Skip to main content

lib/jido/chat/errors/ingress.ex

defmodule Jido.Chat.Errors.Ingress do
  @moduledoc """
  Inbound routing error wrapper for request/event transport flows.
  """

  use Splode.Error,
    class: :ingress,
    fields: [
      :transport,
      :adapter_name,
      :reason,
      context: %{}
    ]

  @impl true
  def message(%__MODULE__{transport: transport, adapter_name: adapter_name, reason: reason}) do
    transport_label =
      case transport do
        value when is_atom(value) -> Atom.to_string(value)
        value -> inspect(value)
      end

    adapter_label =
      case adapter_name do
        value when is_atom(value) -> Atom.to_string(value)
        nil -> "unknown"
        value -> to_string(value)
      end

    "ingress #{transport_label} routing failed for adapter #{adapter_label}: #{inspect(reason)}"
  end
end