Current section
Files
Jump to
Current section
Files
lib/xdk/errors.ex
# AUTO-GENERATED FILE - DO NOT EDIT
# This file was automatically generated by the XDK build tool.
# Any manual changes will be overwritten on the next generation.
defmodule Xdk.Errors do
@moduledoc "Structured error types for the XDK client."
use Splode,
error_classes: [
api: Xdk.Errors.Api,
transport: Xdk.Errors.Transport,
decode: Xdk.Errors.Decode
],
unknown_error: Xdk.Errors.UnknownError
@typedoc """
Any error returned by the XDK client.
One of `Xdk.Errors.ApiError`, `Xdk.Errors.RateLimitError`,
`Xdk.Errors.TransportError`, or `Xdk.Errors.DecodeError`.
"""
@type error :: Exception.t()
end
defmodule Xdk.Errors.Api do
@moduledoc false
use Splode.ErrorClass, class: :api
end
defmodule Xdk.Errors.Transport do
@moduledoc false
use Splode.ErrorClass, class: :transport
end
defmodule Xdk.Errors.Decode do
@moduledoc false
use Splode.ErrorClass, class: :decode
end
defmodule Xdk.Errors.ApiError do
@moduledoc "Raised when the X API returns a non-2xx HTTP status."
use Splode.Error, fields: [:status, :body, :headers], class: :api
def message(%{status: status, body: body}) do
"X API error (HTTP #{status}): #{inspect(body)}"
end
end
defmodule Xdk.Errors.RateLimitError do
@moduledoc "Raised when the X API returns HTTP 429 (rate limit exceeded)."
use Splode.Error,
fields: [:status, :body, :headers, :limit, :remaining, :reset, :retry_after_ms],
class: :api
def message(%{status: status, retry_after_ms: ms}) do
"X API rate limit exceeded (HTTP #{status}), retry after #{ms}ms"
end
end
defmodule Xdk.Errors.TransportError do
@moduledoc "Raised when the HTTP transport (Finch) fails."
use Splode.Error, fields: [:reason], class: :transport
def message(%{reason: reason}) do
"Transport error: #{inspect(reason)}"
end
end
defmodule Xdk.Errors.DecodeError do
@moduledoc "Raised when JSON decoding of an API response fails."
use Splode.Error, fields: [:error, :raw_body], class: :decode
def message(%{error: error}) do
"JSON decode error: #{inspect(error)}"
end
end
defmodule Xdk.Errors.UnknownError do
@moduledoc false
use Splode.Error, fields: [:error], class: :decode
def message(%{error: error}) do
if is_binary(error), do: error, else: inspect(error)
end
end