lib/ash/resource/preparation/builtins.ex

defmodule Ash.Resource.Preparation.Builtins do
  @moduledoc "Builtin query preparations"

  @doc """
  Merges the given query context. If an MFA is provided, it will be called with the query.

  The MFA should return `{:ok, context_to_be_merged}` or `{:error, term}`
  """
  @spec set_context(map | (Ash.Query.t() -> mfa)) ::
          {atom, Keyword.t()}
  def set_context(context) do
    {Ash.Resource.Preparation.SetContext, context: context}
  end

  @doc """
  Passes the given keyword list to `Ash.Query.build/2` with the query being prepared.

  This allows declaring simple query modifications in-line. For more complicated query modifications,
  use a custom preparation.

  For example:

  ```elixir
  read :top_ten_songs do
    prepare build(sort: [song_rank: :desc], limit: 10)
  end
  ```
  """
  @spec build(Keyword.t()) :: {atom, Keyword.t()}
  def build(options) do
    {Ash.Resource.Preparation.Build, options: options}
  end
end