defmodule Hobbes.BeginError do @moduledoc """ Raised when a transaction fails to get a read version. """ defexception [:message, :error] @impl true def exception([error: {:error, err}]) do %__MODULE__{message: "begin failed with error: #{inspect(err)}", error: err} end end defmodule Hobbes.CommitError do @moduledoc """ Raised when a transaction fails to commit. """ defexception [:message, :error, :read_version, :commit_version, :batch_index] @impl true def exception([error: {:error, err}, read_version: read_version, commit_version: commit_version, batch_index: batch_index]) do %__MODULE__{message: "commit failed with error: #{inspect(err)}", error: err, read_version: read_version, commit_version: commit_version, batch_index: batch_index} end end defmodule Hobbes.ReadError do @moduledoc """ Raised when a read fails. """ defexception [:message, :error] @impl true def exception([error: {:error, err}]) do %__MODULE__{message: "read failed with error: #{inspect(err)}", error: err} end end defmodule Hobbes.NoTransactionError do defexception [:message] @impl true def exception([]) do %__MODULE__{message: "reads and writes can only be performed within a transaction"} end end