Croma.TypeGen.nilable

You're seeing just the macro nilable, go back to Croma.TypeGen module for more information.
Link to this macro

nilable(module)

View Source (macro)

Creates a new module that represents a nilable type, based on the given type module module.

Using the given type module nilable/1 generates a new module that defines:

  • @type t :: nil | module.t
  • @spec valid?(term) :: boolean
  • @spec default() :: nil
  • If the given module exports new/1
    • @spec new(term) :: Croma.Result.t(t)
    • @spec new!(term) :: t

This is useful in defining a struct with nilable fields using Croma.Struct.

Examples

iex> use Croma
...> defmodule I do
...>   use Croma.SubtypeOfInt, min: 0
...> end
...> defmodule S do
...>   use Croma.Struct, fields: [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}