Current section
Files
Jump to
Current section
Files
lib/formula/errors.ex
defmodule Formula.Errors do
@moduledoc """
Errors wrapper module for the more specific errors defined using macros.
"""
@errors %{
"DIV/0!" => DivideByZeroError,
"MISSING_ARGS" => MissingArgumentsError,
"INVALID_ARGS" => InvalidArgumentsError,
"INVALID_FORMULA" => InvalidFormulaError
}
for {symbol, name} <- @errors do
name = Module.concat(__MODULE__, name)
defmodule name do
defexception [:message, :attributes]
@type t :: %unquote(name){
message: String.t(),
attributes: map()
}
def exception(opts) do
{message, opts} = Keyword.pop_first(opts, :message, "Encounter error: #{unquote(symbol)}")
%unquote(name){
message: message,
attributes: Map.new(opts)
}
end
end
end
end