Enumex.Static.Components.Index behaviour (Enumex v1.0.0)

View Source

A component that provides functions for working with enum indexes.

Example

defmodule MyApp.Enums do
  use Enumex.Static, components: [Enumex.Static.Components.Index]

  # enum definitions go here
end

Summary

Callbacks

Gets an enum id or enum value by index or returns the default.

Gets an enum index by enum id or value or returns the default.

Callbacks

at(enum_name, index, type, default)

@callback at(
  Enumex.Value.enum_name(),
  Enumex.Value.index(),
  type :: :id,
  default :: Enumex.Value.id()
) ::
  Enumex.Value.id()
@callback at(
  Enumex.Value.enum_name(),
  Enumex.Value.index(),
  type :: :value,
  default :: Enumex.Value.id()
) ::
  Enumex.Value.t()

Gets an enum id or enum value by index or returns the default.

Example

iex> MyApp.Enums.elem(:my_enum, 1, :id, :fallback_id)
:first
iex> MyApp.Enums.elem(:my_enum, 100, :id, :fallback_id)
:fallback_id

iex> fallback_value = Enumex.Value.new(MyApp.Enums, :my_enum, :fallback_id, 1000)
iex> MyApp.Enums.elem(:my_enum, 1, fallback_value)
Enumex.Value.new(MyApp.Enums, :my_enum, :first, 1)
iex> MyApp.Enums.elem(:my_enum, 1, :value, fallback_value)
Enumex.Value.new(MyApp.Enums, :my_enum, :first, 1)
iex> MyApp.Enums.elem(:my_enum, 100, fallback_value)
fallback_value
iex> MyApp.Enums.elem(:my_enum, 100, :value, fallback_value)
fallback_value

find_index(enum_name, id_or_value, default)

@callback find_index(
  Enumex.Value.enum_name(),
  id_or_value :: Enumex.Value.id() | Enumex.Value.t(),
  default :: Enumex.Value.index()
) :: Enumex.Value.index()

Gets an enum index by enum id or value or returns the default.

Example

iex> MyApp.Enums.find_index(:my_enum, :first)
1
iex> MyApp.Enums.find_index(:my_enum, :first, 100)
1
iex> MyApp.Enums.find_index(:my_enum, :non_existing)
nil
iex> MyApp.Enums.find_index(:my_enum, :non_existing, 100)
100

iex> first = Enumex.Value.new(MyApp.Enums, :my_enum, :first, 1)
iex> non_existing = Enumex.Value.new(MyApp.Enums, :my_enum, :non_existing, 100)
iex> MyApp.Enums.find_index(:my_enum, first)
1
iex> MyApp.Enums.find_index(:my_enum, first, 100)
1
iex> MyApp.Enums.find_index(:my_enum, non_existing)
nil
iex> MyApp.Enums.find_index(:my_enum, non_existing, 100)
100