Jido. Action. Util
(Jido Action v2.3.0)
View Source
Utility functions for Jido.Action.
Summary
Functions
Conditionally logs a message based on comparing threshold and message log levels.
Converts nested keyword lists to maps for specific option keys.
Returns the default execution log threshold for Jido.
Normalizes nested result tuples to single-level tuples.
Resolves the execution log threshold for a call.
Validates the name of a Action.
Wraps value in error tuple.
Wraps value in success tuple if not already a result tuple.
Functions
@spec cond_log(Logger.level(), Logger.level(), Logger.message(), keyword()) :: :ok
Conditionally logs a message based on comparing threshold and message log levels.
This function provides a way to conditionally log messages by comparing a threshold level against the message's intended log level. The message will only be logged if the threshold level is less than or equal to the message level.
Parameters
threshold_level: The minimum log level threshold (e.g. :debug, :info, etc)message_level: The log level for this specific messagemessage: The message to potentially logopts: Additional options passed to Logger.log/3
Returns
:okin all cases
Examples
# Will log since :info >= :info
iex> cond_log(:info, :info, "test message")
:ok
# Won't log since :info > :debug
iex> cond_log(:info, :debug, "test message")
:ok
# Will log since :debug <= :info
iex> cond_log(:debug, :info, "test message")
:ok
Converts nested keyword lists to maps for specific option keys.
Used during Action configuration to convert nested keyword lists (e.g., compensation) into maps for Zoi validation.
Examples
iex> convert_nested_opt({:compensation, [enabled: true, max_retries: 3]})
{:compensation, %{enabled: true, max_retries: 3}}
iex> convert_nested_opt({:name, "my_action"})
{:name, "my_action"}
@spec default_log_level() :: Logger.level()
Returns the default execution log threshold for Jido.
This reads :jido_action, :default_log_level and falls back to :info
when the config value is missing or invalid.
Normalizes nested result tuples to single-level tuples.
This function handles cases where callbacks or functions return nested tuples like {:ok, {:ok, value}} or {:error, {:error, reason}}, flattening them to proper single-level result tuples.
Examples
iex> normalize_result({:ok, {:ok, "value"}})
{:ok, "value"}
iex> normalize_result({:ok, {:error, "reason"}})
{:error, "reason"}
iex> normalize_result({:ok, "value"})
{:ok, "value"}
iex> normalize_result("value")
{:ok, "value"}
@spec resolve_log_level(keyword()) :: Logger.level()
Resolves the execution log threshold for a call.
Precedence:
opts[:log_level]config :jido_action, default_log_level: ...- built-in
:info
Validates the name of a Action.
The name must contain only letters, numbers, and underscores.
Parameters
name: The name to validate.
Returns
:okif the name is valid.{:error, reason}if the name is invalid.
Examples
iex> Jido.Action.validate_name("valid_name_123")
:ok
iex> Jido.Action.validate_name("invalid-name")
{:error, "The name must contain only letters, numbers, and underscores."}
Wraps value in error tuple.
Examples
iex> wrap_error({:error, "reason"})
{:error, "reason"}
iex> wrap_error("reason")
{:error, "reason"}
Wraps value in success tuple if not already a result tuple.
Examples
iex> wrap_ok({:ok, "value"})
{:ok, "value"}
iex> wrap_ok({:error, "reason"})
{:error, "reason"}
iex> wrap_ok("value")
{:ok, "value"}