Current section
Files
Jump to
Current section
Files
lib/tripswitch/admin/error.ex
defmodule Tripswitch.Admin.Error do
@moduledoc """
Represents an error returned by the Tripswitch management API.
## Fields
- `:status` — HTTP status code
- `:code` — machine-readable error code string from the API (may be `nil`)
- `:message` — human-readable description
- `:request_id` — `X-Request-Id` header value (useful for support requests)
- `:retry_after` — seconds to wait before retrying (populated on 429 responses)
"""
@enforce_keys [:status, :message]
defstruct [:status, :code, :message, :request_id, :retry_after]
@type t :: %__MODULE__{
status: pos_integer(),
code: String.t() | nil,
message: String.t(),
request_id: String.t() | nil,
retry_after: non_neg_integer() | nil
}
@doc "Returns `true` for 404 responses."
@spec not_found?(t() | term()) :: boolean()
def not_found?(%__MODULE__{status: 404}), do: true
def not_found?(_), do: false
@doc "Returns `true` for 401 responses."
@spec unauthorized?(t() | term()) :: boolean()
def unauthorized?(%__MODULE__{status: 401}), do: true
def unauthorized?(_), do: false
@doc "Returns `true` for 403 responses."
@spec forbidden?(t() | term()) :: boolean()
def forbidden?(%__MODULE__{status: 403}), do: true
def forbidden?(_), do: false
@doc "Returns `true` for 422 responses."
@spec unprocessable?(t() | term()) :: boolean()
def unprocessable?(%__MODULE__{status: 422}), do: true
def unprocessable?(_), do: false
@doc "Returns `true` for 429 responses."
@spec rate_limited?(t() | term()) :: boolean()
def rate_limited?(%__MODULE__{status: 429}), do: true
def rate_limited?(_), do: false
@doc "Returns `true` for 5xx responses."
@spec server_error?(t() | term()) :: boolean()
def server_error?(%__MODULE__{status: s}) when s in 500..599, do: true
def server_error?(_), do: false
end