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"}
]
end
Define ConstType1
module with constants
defmodule ConstType1 do
use Defconst
defconst :one, 1
defconst :two, 2
end
Use 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
end
Define EnumType1
module with default values
defmodule EnumType1 do
use Defconst
defenum [
:zero,
:one,
:two
]
end
Use 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
end
Define EnumType2
with specific values
defmodule EnumType2 do
use Defconst
defenum [
{:one, 1},
{:nine, 9},
{:ten, "ten"}
]
end
Define EnumType3
using EnumGenerator3
defmodule EnumGenerator3 do
@behaviour Defconst.Enum.Generator
def next_value(_constant_name, previous_value) do
previous_value <> previous_value
end
end
defmodule TestEnumType3 do
use Defconst
defenum [
{:one, "one"},
{:nine, "nine"},
:ten
],
EnumGenerator3
end