Current section
Files
Jump to
Current section
Files
lib/not_loaded.ex
defmodule NotLoaded do
@moduledoc """
Struct returned by fields when they have not been loaded.
## Example
defmodule Book do
import NotLoaded, only: [lazy_loaded: 1]
defstruct [
:title,
lazy_loaded(:author)
]
end
"""
defstruct [:__field__]
@opaque t :: %__MODULE__{
__field__: atom
}
defimpl Inspect do
def inspect(not_loaded, _opts) do
msg = "field #{inspect not_loaded.__field__} is not loaded"
"##{inspect @for}<#{msg}>"
end
end
@doc """
Defaults a struct field to `NotLoaded`.
"""
defmacro lazy_loaded(field_name) when is_atom(field_name) do
quote do
{unquote(field_name),
%unquote(__MODULE__){__field__: unquote(field_name)}}
end
end
end