defmodule Ash.Api.Interface do @moduledoc false defmacro __using__(_) do quote location: :keep do alias Ash.Api @impl true def get!(resource, id, params \\ []) do Api.get!(__MODULE__, resource, id, params) end @impl true def get(resource, id, params \\ []) do case Api.get(__MODULE__, resource, id, params) do {:ok, instance} -> {:ok, instance} {:error, error} -> {:error, List.wrap(error)} end end @impl true def read!(query, opts \\ []) def read!(query, opts) do Api.read!(__MODULE__, query, opts) end @impl true def read(query, opts \\ []) def read(query, opts) do case Api.read(__MODULE__, query, opts) do {:ok, results} -> {:ok, results} {:error, error} -> {:error, List.wrap(error)} end end @impl true def side_load!(data, query, opts \\ []) do Api.side_load!(__MODULE__, data, query, opts) end @impl true def side_load(data, query, opts \\ []) do case Api.side_load(__MODULE__, data, query, opts) do {:ok, results} -> {:ok, results} {:error, error} -> {:error, List.wrap(error)} end end @impl true def create!(changeset, params \\ []) do Api.create!(__MODULE__, changeset, params) end @impl true def create(changeset, params \\ []) do case Api.create(__MODULE__, changeset, params) do {:ok, instance} -> {:ok, instance} {:error, error} -> {:error, List.wrap(error)} end end @impl true def update!(changeset, params \\ []) do Api.update!(__MODULE__, changeset, params) end @impl true def update(changeset, params \\ []) do case Api.update(__MODULE__, changeset, params) do {:ok, instance} -> {:ok, instance} {:error, error} -> {:error, List.wrap(error)} end end @impl true def destroy!(record, params \\ []) do Api.destroy!(__MODULE__, record, params) end @impl true def destroy(record, params \\ []) do case Api.destroy(__MODULE__, record, params) do :ok -> :ok {:error, error} -> {:error, List.wrap(error)} end end @impl true def reload!(%resource{} = record, params \\ []) do id = record |> Map.take(Ash.Resource.primary_key(resource)) |> Enum.to_list() get!(resource, id, params) end @impl true def reload(%resource{} = record, params \\ []) do id = record |> Map.take(Ash.Resource.primary_key(resource)) |> Enum.to_list() get(resource, id, params) end end end end