Enumex.Static.Components.Index behaviour (Enumex v1.0.0)
View SourceA 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
@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
@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