Current section
Files
Jump to
Current section
Files
lib/correios/cep/error.ex
defmodule Correios.CEP.Error do
@moduledoc """
Error structure.
"""
@enforce_keys [:reason]
@type t() :: %__MODULE__{reason: String.t()}
defexception @enforce_keys
@doc """
Creates a new `#{inspect(__MODULE__)}` exception.
## Examples
iex> #{inspect(__MODULE__)}.new("Catastrophic error!")
%#{inspect(__MODULE__)}{reason: "Catastrophic error!"}
iex> #{inspect(__MODULE__)}.new('Catastrophic error!')
%#{inspect(__MODULE__)}{reason: "Catastrophic error!"}
iex> #{inspect(__MODULE__)}.new(:some_error)
%#{inspect(__MODULE__)}{reason: "some_error"}
iex> #{inspect(__MODULE__)}.new(%{a: 123})
%#{inspect(__MODULE__)}{reason: "%{a: 123}"}
"""
@spec new(any()) :: t()
def new(reason), do: %__MODULE__{reason: reason_to_string(reason)}
@spec reason_to_string(any()) :: String.t()
defp reason_to_string(reason) when is_binary(reason), do: reason
defp reason_to_string(reason) when is_atom(reason) or is_list(reason), do: to_string(reason)
defp reason_to_string(reason), do: inspect(reason)
@doc """
Returns the reason message of the exception.
## Examples
iex> error = %#{inspect(__MODULE__)}{reason: "Catastrophic error!"}
...> #{inspect(__MODULE__)}.message(error)
"Catastrophic error!"
"""
@impl true
def message(%__MODULE__{reason: reason}), do: reason
end