Current section
Files
Jump to
Current section
Files
lib/aerospike/error.ex
defmodule Aerospike.Error do
@moduledoc """
Exception raised for Aerospike client and server errors.
Result codes from the wire protocol are represented as atoms (e.g. `:key_not_found`,
`:timeout`). Use `from_result_code/2` to build an error from a result code atom.
"""
alias Aerospike.Protocol.ResultCode
@enforce_keys [:code, :message]
defexception [:code, :message, node: nil, in_doubt: false]
@type t :: %__MODULE__{
code: atom(),
message: String.t(),
node: String.t() | nil,
in_doubt: boolean()
}
@doc """
Builds an error struct from a result code atom.
The default human-readable message is derived from the result code.
Options:
* `:message` — override the message string
* `:node` — optional node name (for cluster-aware errors)
* `:in_doubt` — whether the outcome is uncertain (default `false`)
## Examples
iex> e = Aerospike.Error.from_result_code(:key_not_found)
iex> e.code
:key_not_found
iex> e.in_doubt
false
iex> e = Aerospike.Error.from_result_code(:timeout, node: "BB9", in_doubt: true)
iex> e.node
"BB9"
iex> e.in_doubt
true
"""
@spec from_result_code(atom(), keyword()) :: t()
def from_result_code(code, opts \\ []) when is_atom(code) do
default_msg = ResultCode.message(code)
%__MODULE__{
code: code,
message: Keyword.get(opts, :message, default_msg),
node: Keyword.get(opts, :node, nil),
in_doubt: Keyword.get(opts, :in_doubt, false)
}
end
@impl true
def message(%__MODULE__{code: code, message: msg}) do
"Aerospike error #{code}: #{msg}"
end
end