A simple, tiny, compile time-only library for defining an Elixir@type
whose valuesare one of a fixed set of options.
There are two ways to use it:
- The
union_type
andunion_typep
macros, which replaces normal@type
/@typep
annotations with a nice,concise macro version of the type definition. UnionTypespec.union_type_ast/1
, which produces an AST you canunquote
withinthe usual@type
definition.
Here's what those look like in practice:
defmoduleMyModuledoimportUnionTypespec,only:[union_type:1]@statuses[:read,:unread,:deleted]union_typestatus::@statuses@permissions[:view,:edit,:admin]@typepermission::unquote(UnionTypespec.union_type_ast(@permissions))@specget_permission()::permission()defget_permission,do:Enum.random(@permissions)@specget_status()::status()defget_status,do:Enum.random(@statuses)end
You can install the package from Hex by adding this to yourmix.exs
file's dependencies:
defdepsdo[{:union_typespec,"~> 0.0.4",runtime:false},]end