Current section
Files
Jump to
Current section
Files
lib/layr8/errors.ex
defmodule Layr8.Error do
@moduledoc """
Base exception for all Layr8 SDK errors.
"""
defexception [:message]
@type t :: %__MODULE__{message: String.t()}
end
defmodule Layr8.NotConnectedError do
@moduledoc """
Raised when `send/2` or `request/3` is called before `connect/1`.
"""
defexception message: "client is not connected"
@type t :: %__MODULE__{message: String.t()}
end
defmodule Layr8.AlreadyConnectedError do
@moduledoc """
Raised when `handle/3` is called after `connect/1`.
"""
defexception message: "client is already connected"
@type t :: %__MODULE__{message: String.t()}
end
defmodule Layr8.ClientClosedError do
@moduledoc """
Raised when `connect/1` is called after `close/1`.
"""
defexception message: "client is closed"
@type t :: %__MODULE__{message: String.t()}
end
defmodule Layr8.ConnectionError do
@moduledoc """
Represents a failure to connect to the cloud-node.
"""
defexception [:message, :url, :reason]
@type t :: %__MODULE__{message: String.t(), url: String.t(), reason: String.t()}
@impl true
def exception(opts) when is_list(opts) do
url = Keyword.get(opts, :url, "")
reason = Keyword.get(opts, :reason, "unknown")
%__MODULE__{url: url, reason: reason, message: "connection error [#{url}]: #{reason}"}
end
end
defmodule Layr8.ProblemReportError do
@moduledoc """
Represents a DIDComm problem report received from a remote agent.
See https://identity.foundation/didcomm-messaging/spec/#problem-reports
"""
defexception [:message, :code, :comment]
@type t :: %__MODULE__{message: String.t(), code: String.t(), comment: String.t()}
@impl true
def exception(opts) when is_list(opts) do
code = Keyword.get(opts, :code, "unknown")
comment = Keyword.get(opts, :comment, "unknown error")
%__MODULE__{code: code, comment: comment, message: "problem report [#{code}]: #{comment}"}
end
end