lib/exceptions.ex
defmodule Tempus.ArgumentError do
@moduledoc """
Raised at runtime when an argument passed to function is invalid
"""
defexception [:message, :expected, :passed]
def exception(opts) do
expected = Keyword.fetch!(opts, :expected)
passed = Keyword.fetch!(opts, :passed)
message = "Invalid argument; expected `#{expected}`, passed: `#{inspect(passed)}`"
%__MODULE__{message: message, expected: expected, passed: passed}
end
end