Defconst
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.
Installation
Defconst can be installed by adding defconst to your list of dependencies in mix.exs:
def deps do
[
{:defconst, "~> 0.1.0"}
]
endUsage
defconst
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
enddefenum
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
enddefmodule TestEnumType4 do
use Defconst
defenum [
{:one, "one"},
{:nine, "nine"},
:ten
],
EnumGenerator3
end