Enumex.Value (Enumex v1.0.0)
View SourceDefines the fundamental structure for representing enum values and covers the following use cases:
- accessing the enum module and its values
- filtering data using atom names and integer indexes
- storing non-standard data in value opts
- storing other data in value opts for specific component purposes
Summary
Struct fields
The type representing an enum module of the value.
The type representing an enum name of the value.
The type representing an id of the enum value.
The type representing an index of the enum value.
The type representing an additional options for the enum value.
Guards
A generic guard for enum_module
type.
A generic guard for enum_name
type.
A generic guard for id
type.
A generic guard for index
type.
A generic guard for opts
type.
A generic guard for value
type.
Main
The enum value
structure contains the following keys
A short function for creating an enum value
.
The type representing the enum value
structure with a given enum module, enum name, id and index types.
This type is used for predefined enum value in the enum module with static values.
The type representing an enum value
structure.
Struct fields
@type enum_module() :: module()
The type representing an enum module of the value.
Examples:
iex> value = new(Example, :example, :first, 1, key: :value)
iex> is_enum_module(value.enum_module)
true
@type enum_name() :: atom()
The type representing an enum name of the value.
Examples:
iex> value = new(Example, :example, :first, 1, key: :value)
iex> is_enum_name(value.enum_name)
true
@type id() :: atom()
The type representing an id of the enum value.
Examples:
iex> value = new(Example, :example, :first, 1, key: :value)
iex> is_id(value.id)
true
@type index() :: non_neg_integer()
The type representing an index of the enum value.
Examples:
iex> value = new(Example, :example, :first, 1, key: :value)
iex> is_index(value.index)
true
@type opts() :: keyword()
The type representing an additional options for the enum value.
Examples:
iex> value = new(Example, :example, :first, 1, key: :value)
iex> is_opts(value.opts)
true
Guards
@spec is_enum_module(nil) :: false
@spec is_enum_module(false) :: false
@spec is_enum_module(true) :: false
@spec is_enum_module(module()) :: true
@spec is_enum_module(any()) :: false
A generic guard for enum_module
type.
Examples:
iex> is_enum_module(Example)
true
iex> is_enum_module(nil)
false
iex> is_enum_module(false)
false
iex> is_enum_module(true)
false
iex> is_enum_module(0)
false
iex> is_enum_module(0.0)
false
iex> is_enum_module("string")
false
iex> is_enum_module({1, :two, "three"})
false
iex> is_enum_module([1, :two, "three"])
false
iex> is_enum_module(key: :value)
false
iex> is_enum_module(%{key: :value})
false
iex> is_enum_module(fn -> :ok end)
false
@spec is_enum_name(nil) :: false
@spec is_enum_name(false) :: false
@spec is_enum_name(true) :: false
@spec is_enum_name(atom()) :: true
@spec is_enum_name(any()) :: false
A generic guard for enum_name
type.
Examples:
iex> is_enum_name(:example)
true
iex> is_enum_name(nil)
false
iex> is_enum_name(false)
false
iex> is_enum_name(true)
false
iex> is_enum_name(0)
false
iex> is_enum_name(0.0)
false
iex> is_enum_name("string")
false
iex> is_enum_name({1, :two, "three"})
false
iex> is_enum_name([1, :two, "three"])
false
iex> is_enum_name(key: :value)
false
iex> is_enum_name(%{key: :value})
false
iex> is_enum_name(fn -> :ok end)
false
A generic guard for id
type.
Examples:
iex> is_id(:example)
true
iex> is_id(0)
false
iex> is_id(0.0)
false
iex> is_id("string")
false
iex> is_id({1, :two, "three"})
false
iex> is_id([1, :two, "three"])
false
iex> is_id(key: :value)
false
iex> is_id(%{key: :value})
false
iex> is_id(fn -> :ok end)
false
@spec is_index(non_neg_integer()) :: true
@spec is_index(any()) :: false
A generic guard for index
type.
Examples:
iex> is_index(0)
true
iex> is_index(nil)
false
iex> is_index(false)
false
iex> is_index(true)
false
iex> is_index(-1)
false
iex> is_index(0.0)
false
iex> is_index("string")
false
iex> is_index({1, :two, "three"})
false
iex> is_index([1, :two, "three"])
false
iex> is_index(key: :value)
false
iex> is_index(%{key: :value})
false
iex> is_index(fn -> :ok end)
false
A generic guard for opts
type.
Examples:
iex> is_opts(key: :value)
true
iex> is_opts(nil)
false
iex> is_opts(false)
false
iex> is_opts(true)
false
iex> is_opts(0)
false
iex> is_opts(0.0)
false
iex> is_opts("string")
false
iex> is_opts({1, :two, "three"})
false
iex> is_opts(%{key: :value})
false
iex> is_opts(fn -> :ok end)
false
A generic guard for value
type.
Examples:
iex> is_t(%Enumex.Value{enum_module: Example, enum_name: :example, id: :first, index: 1})
true
iex> is_t(%Enumex.Value{enum_module: Example, enum_name: :example, id: :first, index: 1, opts: [key: :value]})
true
iex> data = nil
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: 0, index: data})
false
iex> data = false
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: 0, index: data})
false
iex> data = true
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: 0, index: data})
false
iex> data = 0
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: data, index: -1})
false
iex> for data <- [0.0, "string", {1, :two, "three"}, [1, :two, "three"], [key: :value], %{key: :value}, fn -> :ok end] do
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: data, index: data})
iex> end
[false, false, false, false, false, false, false]
iex> data = nil
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: 0, index: data, opts: data})
false
iex> data = false
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: 0, index: data, opts: data})
false
iex> data = true
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: 0, index: data, opts: data})
false
iex> data = 0
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: 0, index: data, opts: data})
false
iex> for data <- [[1, :two, "three"], [key: :value]] do
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: 0, index: data, opts: nil})
iex> end
[false, false]
iex> for data <- [0.0, "string", {1, :two, "three"}, %{key: :value}, fn -> :ok end] do
iex> is_t(%Enumex.Value{enum_module: data, enum_name: data, id: 0, index: data, opts: data})
iex> end
[false, false, false, false, false]
Main
The enum value
structure contains the following keys:
enum_module
- an enum module of the valueenum_name
- an enum name of the valueid
- an id of the enum valueindex
- an index of the enum valueopts
- a keyword list of additional options for the enum value
Examples:
iex> value = %Enumex.Value{enum_module: Example, enum_name: :example, id: :first, index: 1, opts: [key: :value]}
iex> is_enum_module(value.enum_module)
true
iex> is_enum_name(value.enum_name)
true
iex> is_id(value.id)
true
iex> is_index(value.index)
true
iex> is_opts(value.opts)
true
iex> is_t(value)
true
A short function for creating an enum value
.
Examples:
iex> new(Example, :example, :first, 1)
%Enumex.Value{enum_module: Example, enum_name: :example, id: :first, index: 1}
iex> new(Example, :example, :first, 1, key: :value)
%Enumex.Value{enum_module: Example, enum_name: :example, id: :first, index: 1, opts: [key: :value]}
@type t() :: t(enum_module(), enum_name(), id(), index())
The type representing the enum value
structure with a given enum module, enum name, id and index types.
This type is used for predefined enum value in the enum module with static values.
Examples:
iex> is_t(%Enumex.Value{enum_module: Example, enum_name: :example, id: :first, index: 1, opts: [key: :value]})
true
@type t(enum_module, enum_name, id, index) :: %Enumex.Value{ enum_module: enum_module, enum_name: enum_name, id: id, index: index, opts: opts() }
The type representing an enum value
structure.
Examples:
iex> is_t(%Enumex.Value{enum_module: Example, enum_name: :example, id: :first, index: 1, opts: [key: :value]})
true