lib/ash/error/engine_error.ex

defmodule Ash.Error.EngineError do
  @moduledoc "Used when the Ash engine has an internal error"
  use Ash.Error.Exception

  def_ash_error([:state, :message], class: :framework)

  defimpl Ash.ErrorKind do
    def id(_), do: Ash.UUID.generate()

    def code(_), do: "engine_error"

    def class(_), do: :framework

    def message(%{state: state, message: message}) do
      transaction_info =
        if state.transaction_id do
          "Transaction: #{inspect(state.transaction_id)}"
        end

      """
      #{message}
      #{transaction_info}
      #{Ash.Engine.long_breakdown(state)}
      """
    end

    def stacktrace(_), do: nil
  end
end