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.2.1"}
]
end

Usage

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
end

defenum

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