lib/kvasir/exceptions.ex

defmodule Kvasir.InvalidKey do
  @doc ~S"""
  Invalid key has been given.
  """
  defexception [:value, :key, :reason, message: "Invalid key."]

  def message(%{value: value, key: key, reason: reason}) do
    """
    Invalid #{inspect(key)} key.

    Could not parse #{inspect(value)}, because #{inspect(reason)}.
    """
  end
end

defmodule Kvasir.InvalidType do
  @doc ~S"""
  Invalid type has been given.
  """

  defexception [:value, :type, :reason, message: "Invalid type."]

  def message(%{value: value, type: type, reason: reason}) do
    """
    Invalid #{inspect(type)} type.

    Could not parse #{inspect(value)}, because #{inspect(reason)}.
    """
  end
end