Packages

SuperWorker is a powerful Elixir library for working with supervisors and background jobs. It provides a much simpler approach than traditional supervisors. This library is currently under development and is unstable, so it is not recommended for production use.

Current section

Files

Jump to
super_worker lib supervisor error.ex
Raw

lib/supervisor/error.ex

defmodule SuperWorker.Error do
@moduledoc """
Exception module for SuperWorker errors.
This module defines exceptions that can be raised by SuperWorker operations.
"""
defexception [:reason, :message]
@type t :: %__MODULE__{
reason: atom() | String.t(),
message: String.t()
}
@impl true
def exception(opts) when is_list(opts) do
reason = Keyword.get(opts, :reason, :unknown_error)
message = Keyword.get(opts, :message, format_message(reason))
%__MODULE__{
reason: reason,
message: message
}
end
def exception(reason) when is_atom(reason) or is_binary(reason) do
%__MODULE__{
reason: reason,
message: format_message(reason)
}
end
def exception(opts) do
exception(reason: opts)
end
@impl true
def message(%__MODULE__{message: message}) when is_binary(message) do
message
end
def message(%__MODULE__{reason: reason}) do
format_message(reason)
end
@doc """
Formats an error reason into a human-readable message.
"""
@spec format_message(atom() | String.t()) :: String.t()
def format_message(reason) when is_binary(reason), do: reason
def format_message(:supervisor_not_running) do
"Supervisor is not running"
end
def format_message(:already_running) do
"Supervisor is already running"
end
def format_message(:worker_not_found) do
"Worker not found"
end
def format_message(:worker_already_exists) do
"Worker already exists"
end
def format_message(:group_not_found) do
"Group not found"
end
def format_message(:chain_not_found) do
"Chain not found"
end
def format_message(:invalid_options) do
"Invalid options provided"
end
def format_message(:invalid_restart_strategy) do
"Invalid restart strategy"
end
def format_message(:timeout) do
"Operation timed out"
end
def format_message(:api_timeout) do
"API call timed out"
end
def format_message(:queue_full) do
"Queue is full"
end
def format_message(:partition_not_found) do
"Partition not found"
end
def format_message(reason) when is_atom(reason) do
reason
|> Atom.to_string()
|> String.replace("_", " ")
|> String.capitalize()
end
def format_message(reason) do
inspect(reason)
end
end