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
Current section
Files
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