Defconst (Defconst v0.3.0)

Copy Markdown 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

Summary

Functions

Define constant

Defines an enum with specified constant names and optional values

Functions

defconst(name, value)

(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"

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

(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"