Splode-backed error helpers for Jidoka.
Runtime-facing APIs should return these errors instead of leaking raw atoms, tuples, or third-party exception structs. Lower-level constructors may still return library-native validation details when that is the precise contract.
Summary
Functions
Returns the Jidoka error category for a normalized exception or aggregate error.
Builds a Splode-backed configuration error.
Builds a Splode-backed execution error.
Formats a Jidoka/Splode error into a short human-readable message.
Normalizes arbitrary error terms into a Jidoka/Splode exception.
Returns whether an error term is already a Jidoka/Splode error.
Converts a Jidoka/Splode error into a serializable map.
Traverses errors, calling fun for each leaf error, and returns a nested
map of results grouped by each error's path.
Raises an error if the result is an error, otherwise returns the result
Builds a Splode-backed validation error.
Types
@type category() :: :validation | :configuration | :execution | :internal | :unknown
@type class() :: %{ :__struct__ => class_module(), :__exception__ => true, :errors => [t()], :class => error_class(), :bread_crumbs => [String.t()], :vars => Keyword.t(), :stacktrace => Splode.Stacktrace.t() | nil, :context => map(), optional(atom()) => any() }
@type class_module() ::
Jidoka.Error.Internal
| Jidoka.Error.Config
| Jidoka.Error.Execution
| Jidoka.Error.Invalid
| Splode.Error.Unknown
@type error_class() :: :internal | :config | :execution | :invalid | :unknown
@type t() :: %{ :__struct__ => module(), :__exception__ => true, :class => error_class(), :bread_crumbs => [String.t()], :vars => Keyword.t(), :stacktrace => Splode.Stacktrace.t() | nil, :context => map(), optional(atom()) => any() }
Functions
Returns the Jidoka error category for a normalized exception or aggregate error.
@spec config_error(String.t(), keyword() | map()) :: Exception.t()
Builds a Splode-backed configuration error.
@spec execution_error(String.t(), keyword() | map()) :: Exception.t()
Builds a Splode-backed execution error.
Formats a Jidoka/Splode error into a short human-readable message.
@spec normalize(term(), context()) :: Exception.t()
Normalizes arbitrary error terms into a Jidoka/Splode exception.
Returns whether an error term is already a Jidoka/Splode error.
Converts a Jidoka/Splode error into a serializable map.
Traverses errors, calling fun for each leaf error, and returns a nested
map of results grouped by each error's path.
See Splode.traverse_errors/2 for full documentation.
Example
iex> Elixir.Jidoka.Error.traverse_errors(error, fn error ->
...> Exception.message(error)
...> end)
%{name: ["name is required"]}
Raises an error if the result is an error, otherwise returns the result
Alternatively, you can use the defsplode macro, which does this automatically.
Options
:error_opts- Options to pass toto_error/2when converting the returned error:unknown_error_opts- Options to pass to the unknown error if the function returns only:error. not necessary if your function always returns{:error, error}.
Examples
def function(arg) do
case do_something(arg) do
:success -> :ok
{:success, result} -> {:ok, result}
{:error, error} -> {:error, error}
endend
def function!(arg) do
YourErrors.unwrap!(function(arg))end
@spec validation_error(String.t(), keyword() | map()) :: Exception.t()
Builds a Splode-backed validation error.