lib/gumroad/error.ex

defmodule Gumroad.Error do
  @moduledoc """
  An error encountered while trying to query the Gumroad API.
  """
  defexception from_gumroad: false, reason: nil

  @typedoc """
  An error encountered while trying to query the Gumroad API.

  * `from_gumroad` - set to `true` if Gumroad was reached but
      returned an error while processing the request.
      Set to `false` if Gumroad could not be reached at all.
  * `reason` - set to the error message returned from Gumroad
      when `from_gumroad` is `true`. Otherwise is an atom
      pointing to the underlying error, i.e. `:timeout`.
  """
  @type t :: %__MODULE__{from_gumroad: boolean(), reason: any()}

  def message(%__MODULE__{from_gumroad: true, reason: reason}) do
    "Gumroad error: #{inspect(reason)}"
  end

  def message(%__MODULE__{reason: reason}), do: inspect(reason)
end