Enumex.Value (Enumex v1.0.0)

View Source

Defines 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.

t()

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

enum_module()

@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

enum_name()

@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

id()

@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

index()

@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

opts()

@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

is_enum_module(atom)

(macro)
@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

is_enum_name(atom)

(macro)
@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

is_id(atom)

(macro)
@spec is_id(atom()) :: true
@spec is_id(any()) :: 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

is_index(integer)

(macro)
@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

is_opts(keyword)

(macro)
@spec is_opts(keyword()) :: true
@spec is_opts(any()) :: 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

is_t(value)

(macro)
@spec is_t(t()) :: true
@spec is_t(any()) :: 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

%Enumex.Value{}

(struct)

The enum value structure contains the following keys:

  • enum_module - an enum module of the value
  • enum_name - an enum name of the value
  • id - an id of the enum value
  • index - an index of the enum value
  • opts - 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

new(enum_module, enum_name, id, index, opts \\ [])

@spec new(enum_module(), enum_name(), id(), index(), opts()) :: t()

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]}

t()

@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

t(enum_module, enum_name, id, index)

@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