License Hex.pm Documentation

Numa provides an easy way to define enum-like macros in Elixir.

It allows you to create named constants with associated values that can be used as compile-time macros. You can pass a list of plain values or keyword pairs to automatically generate macros for your enums. This is useful when you want efficient, readable constants without the overhead of runtime lookups.

Features

  • Define enums with mixed plain values (strings, atoms, integers) or explicit key-value pairs.
  • Macro names are automatically prefixed with _ to ensure valid names, even if keys start with digits.
  • Provides helper functions to retrieve all enum keys, values, or key-value pairs.
  • Validates input and raises clear errors for invalid enum entries.

Installation

Add numa to your list of dependencies in mix.exs:

def deps do
  [
    {:numa, "~> 0.1.0"}
  ]
end

Then fetch dependencies:

mix deps.get

Usage

Defining simple enums

When names and values are the same:

defmodule MyEnums do
  use Numa, ["FULL", "1M"]
end

MyEnums._FULL()  # => "FULL"
MyEnums._1M()    # => "1M"

Defining enums with explicit names and values

defmodule MyEnums do
  use Numa, [M3: "3m", MINI: "MINI"]
end

MyEnums._M3()    # => "3m"
MyEnums._MINI()  # => "MINI"

Mixed enums and helper functions

defmodule MyEnums do
  use Numa, ["FULL", "1M", M3: "3m", mini: "MINI"]
end

MyEnums._FULL()    # => "FULL"
MyEnums._1M()      # => "1M"
MyEnums._M3()      # => "3m"
MyEnums._mini()    # => "MINI"

MyEnums.values()   # => ["FULL", "1M", "3m", "MINI"]
MyEnums.keys()     # => [:_FULL, :_1M, :_M3, :_mini]
MyEnums.all()      # => [{:_FULL, "FULL"}, {:_1M, "1M"}, {:_M3, "3m"}, {:_mini, "MINI"}]

Dynamic enum list

You can also pass a function returning a list:

defmodule MyEnums do
  use Numa, fn -> ["A", "B", "C"] end
end

MyEnums._A()   # => "A"

Error handling

Invalid input raises clear errors:

defmodule InvalidEnums do
  use Numa, [%{}]  # Raises ArgumentError: Invalid Numa list value: %{}, expected type: atom, binary or integer
end

Documentation

Documentation is generated with ExDoc and published on HexDocs.


Created and maintained by Centib.