Croma.TypeGen
Module that defines macros for ad-hoc module definitions.
Croma
leverages Elixir’s lightweight module syntax and advocate coding styles to define many modules.
Macros in this module helps defining modules in an ad-hoc way (in other words “in-line”) based on existing modules.
Summary↑
list_of(mod) | An ad-hoc version of |
nilable(mod) | Creates a new module that represents a nilable type, based on the given module |
Macros
An ad-hoc version of Croma.SubtypeOfList
.
Options for Croma.SubtypeOfList
are not available in list_of/1
.
Usage of list_of/1
macro is the same as nilable/1
.
Creates a new module that represents a nilable type, based on the given module module
.
The module passed to nilable/1
must define the following members:
@type t
@spec validate(term) :: Croma.Result.t(t)
Using the above members nilable/1
generates a new module that also defines the same members:
@type t :: nil | module.t
@spec validate(term) :: Croma.Result.t(t)
Examples
iex> use Croma
...> defmodule I do
...> use Croma.SubtypeOfInt, min: 0
...> end
This is useful in defining a struct with nilable fields using Croma.Struct
.
...> defmodule S do
...> use Croma.Struct, not_nilable_int: I, nilable_int: Croma.TypeGen.nilable(I)
...> end
...> S.new([not_nilable_int: 0, nilable_int: nil])
%S{nilable_int: nil, not_nilable_int: 0}