defmodule Witchcraft.Foldable.EmptyError do
@moduledoc """
Represent the error state of trying to fold over an empty structure
## Examples
iex> %Witchcraft.Foldable.EmptyError{}
%Witchcraft.Foldable.EmptyError{
message: "Unable to process empty data",
plug_status: 500
}
"""
alias __MODULE__
@type t :: %EmptyError{
message: String.t(),
data: any(),
plug_status: pos_integer()
}
@base_message "Unable to process empty data"
defexception message: @base_message, data: nil, plug_status: 500
defmacro new(data) do
quote do
case __ENV__.function do
{fun_name, arity} ->
%EmptyError{
data: unquote(data),
message: "Unable to process empty data in #{__MODULE__}.#{fun_name}/#{arity}"
}
nil ->
%EmptyError{data: unquote(data)}
end
end
end
end