Skip to main content

lib/dllb/error.ex

defmodule Dllb.Error do
  @moduledoc """
  Exception struct for dllb client errors.

  ## Fields

    * `:message` - human-readable error description
    * `:type` - atom classifying the error, one of
      `:connection_error`, `:protocol_error`, `:query_error`, `:timeout`
  """

  @type t :: %__MODULE__{
          message: String.t(),
          type: :connection_error | :protocol_error | :query_error | :timeout
        }

  defexception [:message, :type]

  @impl Exception
  def exception(%{message: message, type: type}) do
    %__MODULE__{message: message, type: type}
  end

  def exception(message) when is_binary(message) do
    %__MODULE__{message: message, type: :query_error}
  end
end