This package provides defconst macro for defining a single constant and defenum macro for defining a list of enumerated constant values. The defined constants and enumerated constants are referencable in any expression as well as in guards statements.
Defconst can be installed by adding defconst to your list of dependencies in mix.exs:
def deps do
[
{:defconst, "~> 0.2.2"}
]
endDefine ConstType1 module with constants
defmodule ConstType1 do
use Defconst
defconst :one, 1
defconst :two, 2
endUse ConstType1 module
defmodule ConstUse1 do
require ConstType1
def const_value(x) do
case x do
ConstType1.one -> "one"
ConstType1.two -> "two"
end
end
def const_guard(x) when x == ConstType1.two do
"two"
end
endDefine EnumType1 module with default values
defmodule EnumType1 do
use Defconst
defenum [
:zero,
:one,
:two
]
endUse EnumType1 module
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
endDefine EnumType2 with specific values
defmodule EnumType2 do
use Defconst
defenum [
{:one, 1},
{:nine, 9},
{:ten, "ten"}
]
endDefine EnumType3 using EnumGenerator3
defmodule EnumGenerator3 do
@behaviour Defconst.Enum.Generator
def next_value(_constant_name, previous_value) do
previous_value <> previous_value
end
enddefmodule TestEnumType3 do
use Defconst
defenum [
{:one, "one"},
{:nine, "nine"},
:ten
],
EnumGenerator3
end