defmodule Nebulex.RegistryLookupError do
@moduledoc """
Raised at runtime when the cache was not started or it does not exist.
"""
@type t :: %__MODULE__{message: binary, name: atom}
defexception [:message, :name]
@doc false
def exception(opts) do
name = Keyword.fetch!(opts, :name)
msg =
"could not lookup Nebulex cache #{inspect(name)} because it was " <>
"not started or it does not exist"
%__MODULE__{message: msg, name: name}
end
end
defmodule Nebulex.KeyAlreadyExistsError do
@moduledoc """
Raised at runtime when a key already exists in cache.
"""
@type t :: %__MODULE__{key: term, cache: atom}
defexception [:key, :cache]
@doc false
def message(%{key: key, cache: cache}) do
"key #{inspect(key)} already exists in cache #{inspect(cache)}"
end
end
defmodule Nebulex.QueryError do
@moduledoc """
Raised at runtime when the query is invalid.
"""
@type t :: %__MODULE__{message: binary}
defexception [:message]
@doc false
def exception(opts) do
message = Keyword.fetch!(opts, :message)
query = Keyword.fetch!(opts, :query)
message = """
#{message} in query:
#{inspect(query, pretty: true)}
"""
%__MODULE__{message: message}
end
end
defmodule Nebulex.RPCMultiCallError do
@moduledoc """
Raised at runtime when a RPC multi_call error occurs.
"""
@type t :: %__MODULE__{message: binary}
defexception [:message]
@doc false
def exception(opts) do
action = Keyword.fetch!(opts, :action)
errors = Keyword.fetch!(opts, :errors)
responses = Keyword.fetch!(opts, :responses)
message = """
RPC error while executing action #{inspect(action)}
Successful responses:
#{inspect(responses, pretty: true)}
Remote errors:
#{inspect(errors, pretty: true)}
"""
%__MODULE__{message: message}
end
end
defmodule Nebulex.RPCError do
@moduledoc """
Raised at runtime when a RPC error occurs.
"""
@type t :: %__MODULE__{reason: atom, node: node}
defexception [:reason, :node]
@doc false
def message(%__MODULE__{reason: reason, node: node}) do
format_reason(reason, node)
end
# :erpc.call/5 doesn't format error messages.
defp format_reason({:erpc, _} = reason, node) do
"""
The RPC operation failed on node #{inspect(node)} with reason:
#{inspect(reason)}
See :erpc.call/5 for more information about the error reasons.
"""
end
end