Defconst v0.2.5 Defconst View Source

Define constants and enum with use in guards

Define a contant

defmodule ConstType do
  use Defconst

  defconst :one, 1
  defconst :two, 2
end

Define an enum with default values

defmodule EnumType1 do
  use Defconst

  defenum [
    :zero,
    :one,
    :two
  ]
end

Define an enum with explicit values

defmodule EnumType2 do
  use Defconst

  defenum [
    {:one, 1},
    {:nine, 9},
    :ten
  ]
end

Link to this section Summary

Functions

Define constant

Defines an enum with specified constant names and optional values

Link to this section Functions

Link to this macro

defconst(name, value)

View Source (macro)

Define constant

Examples:

iex> defmodule ConstType do
...>   use Defconst
...>
...>   defconst :one, 1
...>   defconst :two, 2
...> end
iex> defmodule ConstUse do
...>   require ConstType
...>
...>   def const_value(x) do
...>     case x do
...>       ConstType.one -> "one"
...>       ConstType.two -> "two"
...>       _ -> "unknown"
...>     end
...>   end
...>
...>   def const_guard(x) when x == ConstType.two do
...>     "two"
...>   end
...> end
iex> ConstType.constants
[{:one, 1}, {:two, 2}]
iex> ConstUse.const_value(1)
"one"
iex> ConstUse.const_guard(2)
"two"
Link to this macro

defenum(constants, quoted_generator \\ quote do Defconst.Enum.DefaultGenerator end)

View Source (macro)

Defines an enum with specified constant names and optional values

Examples:

iex> defmodule EnumType1 do
...>   use Defconst
...>
...>   defenum [
...>     :zero,
...>     :one,
...>     :two
...>   ]
...> end
iex> defmodule EnumUse1 do
...>   require EnumType1
...>
...>   def enum_value(x) do
...>     case x do
...>       EnumType1.zero -> "zero"
...>       EnumType1.one -> "one"
...>       EnumType1.two -> "two"
...>       _ -> "unknown"
...>     end
...>   end
...>
...>   def enum_guard(x) when x == EnumType1.two do
...>     "two"
...>   end
...> end
iex> EnumType1.constants
[zero: 0, one: 1, two: 2]
iex> EnumUse1.enum_value(1)
"one"
iex> EnumUse1.enum_guard(2)
"two"

iex> defmodule EnumType2 do
...>   use Defconst
...>
...>   defenum [
...>     {:zero, "zero"},
...>     {:one, 1},
...>     {:nine, 9},
...>     :ten
...>   ]
...> end
iex> defmodule EnumUse2 do
...>   require EnumType2
...>
...>   def enum_value(x) do
...>     case x do
...>       EnumType2.zero -> "zero"
...>       EnumType2.one -> "one"
...>       EnumType2.nine -> "nine"
...>       EnumType2.ten -> "ten"
...>       _ -> "unknown"
...>     end
...>   end
...>
...>   def enum_guard(x) when x == EnumType2.ten do
...>     "ten"
...>   end
...> end
iex> EnumType2.constants
[zero: "zero", one: 1, nine: 9, ten: 10]
iex> EnumUse2.enum_value(1)
"one"
iex> EnumUse2.enum_guard(10)
"ten"