lib/ash/resource/validation/action_is.ex

defmodule Ash.Resource.Validation.ActionIs do
  @moduledoc "Validates that the action is the specified action."
  use Ash.Resource.Validation

  @impl true
  def validate(changeset, opts, _context) do
    if changeset.action.name == opts[:action] do
      :ok
    else
      # We use "unknown" here because it doesn't make sense to surface
      # this error to clients potentially (and this should really only be used as a condition anyway)
      [message: message, vars: vars] = describe(opts)

      {:error, Ash.Error.Unknown.UnknownError.exception(error: message, vars: vars)}
    end
  end

  @impl true
  def atomic(changeset, opts, context) do
    validate(changeset, opts, context)
  end

  @impl true
  def describe(opts) do
    [message: "must be %{action}", vars: %{action: opts[:action]}]
  end
end