defmodule Meili do
@moduledoc """
An idiomatic, high-performance Meilisearch client for Elixir.
"""
alias Meili.Client
@doc """
Builds a custom `Meili.Client` instance with the given options.
## Options
* `:url` or `:endpoint` - The Meilisearch base URL (default: `http://localhost:7700`).
* `:key` or `:api_key` - The API key or master key for authentication.
* `:req_options` - Custom configuration options passed directly to `Req.new/1`.
## Examples
client = Meili.client(url: "http://localhost:7700", key: "secret-key")
"""
@spec client(Keyword.t() | map()) :: Client.t()
def client(opts \\ []) do
Client.new(opts)
end
@doc """
Builds a `Meili.Client` from the global application environment.
## Examples
client = Meili.default_client()
"""
@spec default_client() :: Client.t()
def default_client do
config = Application.get_all_env(:meili)
Client.new(config)
end
# --- Search Delegates ---
@spec search(
Client.t() | String.t(),
String.t() | map(),
String.t() | Keyword.t() | map(),
Keyword.t()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate search(client_or_uid, uid_or_query, query_or_opts \\ [], opts \\ []),
to: Meili.Search
@spec search!(
Client.t() | String.t(),
String.t() | map(),
String.t() | Keyword.t() | map(),
Keyword.t()
) :: map() | no_return()
defdelegate search!(client_or_uid, uid_or_query, query_or_opts \\ [], opts \\ []),
to: Meili.Search
@spec search_similar(
Client.t() | String.t(),
String.t() | map(),
map() | Keyword.t(),
Keyword.t()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate search_similar(client_or_uid, uid_or_body, body_or_opts \\ [], opts \\ []),
to: Meili.Search,
as: :similar
@spec search_similar!(
Client.t() | String.t(),
String.t() | map(),
map() | Keyword.t(),
Keyword.t()
) :: map() | no_return()
defdelegate search_similar!(client_or_uid, uid_or_body, body_or_opts \\ [], opts \\ []),
to: Meili.Search,
as: :similar!
@spec facet_search(
Client.t() | String.t(),
String.t(),
String.t() | nil,
String.t() | Keyword.t(),
Keyword.t()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate facet_search(
client_or_uid,
uid_or_facet_name,
facet_name_or_query \\ nil,
facet_query_or_opts \\ [],
opts \\ []
),
to: Meili.Search
@spec facet_search!(
Client.t() | String.t(),
String.t(),
String.t() | nil,
String.t() | Keyword.t(),
Keyword.t()
) :: map() | no_return()
defdelegate facet_search!(
client_or_uid,
uid_or_facet_name,
facet_name_or_query \\ nil,
facet_query_or_opts \\ [],
opts \\ []
),
to: Meili.Search
@spec multi_search(Client.t() | list(map()), list(map()) | Keyword.t(), Keyword.t()) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate multi_search(client_or_queries, queries_or_opts \\ [], opts \\ []), to: Meili.Search
@spec multi_search!(Client.t() | list(map()), list(map()) | Keyword.t(), Keyword.t()) ::
map() | no_return()
defdelegate multi_search!(client_or_queries, queries_or_opts \\ [], opts \\ []),
to: Meili.Search
# --- Document Delegates ---
@spec list_documents(
Client.t() | String.t(),
String.t() | Keyword.t(),
Keyword.t()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate list_documents(client_or_uid, uid_or_opts \\ [], opts \\ []),
to: Meili.Document,
as: :list
@spec list_documents!(
Client.t() | String.t(),
String.t() | Keyword.t(),
Keyword.t()
) :: map() | no_return()
defdelegate list_documents!(client_or_uid, uid_or_opts \\ [], opts \\ []),
to: Meili.Document,
as: :list!
@spec get_document(
Client.t() | String.t(),
String.t() | integer(),
String.t() | integer() | Keyword.t(),
Keyword.t()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_document(client_or_uid, uid_or_doc_id, doc_id_or_opts \\ [], opts \\ []),
to: Meili.Document,
as: :get
@spec get_document!(
Client.t() | String.t(),
String.t() | integer(),
String.t() | integer() | Keyword.t(),
Keyword.t()
) :: map() | no_return()
defdelegate get_document!(client_or_uid, uid_or_doc_id, doc_id_or_opts \\ [], opts \\ []),
to: Meili.Document,
as: :get!
@spec add_documents(
Client.t() | String.t(),
String.t() | list(map()),
list(map()) | Keyword.t(),
Keyword.t()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate add_documents(client_or_uid, uid_or_documents, documents_or_opts \\ [], opts \\ []),
to: Meili.Document,
as: :add_or_replace
@spec add_documents!(
Client.t() | String.t(),
String.t() | list(map()),
list(map()) | Keyword.t(),
Keyword.t()
) :: map() | no_return()
defdelegate add_documents!(
client_or_uid,
uid_or_documents,
documents_or_opts \\ [],
opts \\ []
), to: Meili.Document, as: :add_or_replace!
@spec update_documents(
Client.t() | String.t(),
String.t() | list(map()),
list(map()) | Keyword.t(),
Keyword.t()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate update_documents(
client_or_uid,
uid_or_documents,
documents_or_opts \\ [],
opts \\ []
), to: Meili.Document, as: :add_or_update
@spec update_documents!(
Client.t() | String.t(),
String.t() | list(map()),
list(map()) | Keyword.t(),
Keyword.t()
) :: map() | no_return()
defdelegate update_documents!(
client_or_uid,
uid_or_documents,
documents_or_opts \\ [],
opts \\ []
), to: Meili.Document, as: :add_or_update!
@spec delete_document(
Client.t() | String.t(),
String.t() | integer(),
String.t() | integer() | nil
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate delete_document(client_or_uid, uid_or_doc_id, doc_id_or_nil \\ nil),
to: Meili.Document,
as: :delete
@spec delete_document!(
Client.t() | String.t(),
String.t() | integer(),
String.t() | integer() | nil
) :: map() | no_return()
defdelegate delete_document!(client_or_uid, uid_or_doc_id, doc_id_or_nil \\ nil),
to: Meili.Document,
as: :delete!
@spec delete_documents_batch(
Client.t() | String.t(),
String.t() | list(),
list() | nil
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate delete_documents_batch(client_or_uid, uid_or_doc_ids, doc_ids_or_nil \\ nil),
to: Meili.Document,
as: :delete_batch
@spec delete_documents_batch!(
Client.t() | String.t(),
String.t() | list(),
list() | nil
) :: map() | no_return()
defdelegate delete_documents_batch!(client_or_uid, uid_or_doc_ids, doc_ids_or_nil \\ nil),
to: Meili.Document,
as: :delete_batch!
@spec delete_all_documents(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate delete_all_documents(client_or_uid, uid_or_nil \\ nil),
to: Meili.Document,
as: :delete_all
@spec delete_all_documents!(Client.t() | String.t(), String.t() | nil) :: map() | no_return()
defdelegate delete_all_documents!(client_or_uid, uid_or_nil \\ nil),
to: Meili.Document,
as: :delete_all!
@spec edit_documents(
Client.t() | String.t(),
String.t() | map(),
map() | Keyword.t(),
Keyword.t()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate edit_documents(client_or_uid, uid_or_queries, queries_or_opts \\ [], opts \\ []),
to: Meili.Document,
as: :edit
@spec edit_documents!(
Client.t() | String.t(),
String.t() | map(),
map() | Keyword.t(),
Keyword.t()
) :: map() | no_return()
defdelegate edit_documents!(client_or_uid, uid_or_queries, queries_or_opts \\ [], opts \\ []),
to: Meili.Document,
as: :edit!
@spec stream_documents(
Client.t() | String.t(),
String.t() | Keyword.t(),
Keyword.t()
) :: Enumerable.t()
defdelegate stream_documents(client_or_uid, uid_or_opts \\ [], opts \\ []),
to: Meili.Document,
as: :stream
# --- Index Delegates ---
@spec create_index(
Client.t() | String.t(),
String.t() | Keyword.t() | map(),
Keyword.t() | map()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate create_index(client_or_uid, uid_or_opts \\ [], opts \\ []),
to: Meili.Index,
as: :create
@spec create_index!(
Client.t() | String.t(),
String.t() | Keyword.t() | map(),
Keyword.t() | map()
) :: map() | no_return()
defdelegate create_index!(client_or_uid, uid_or_opts \\ [], opts \\ []),
to: Meili.Index,
as: :create!
@spec update_index(
Client.t() | String.t(),
String.t() | Keyword.t() | map(),
Keyword.t() | map()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate update_index(client_or_uid, uid_or_opts \\ [], opts \\ []),
to: Meili.Index,
as: :update
@spec update_index!(
Client.t() | String.t(),
String.t() | Keyword.t() | map(),
Keyword.t() | map()
) :: map() | no_return()
defdelegate update_index!(client_or_uid, uid_or_opts \\ [], opts \\ []),
to: Meili.Index,
as: :update!
@spec delete_index(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate delete_index(client_or_uid, uid_or_nil \\ nil), to: Meili.Index, as: :delete
@spec delete_index!(Client.t() | String.t(), String.t() | nil) :: map() | no_return()
defdelegate delete_index!(client_or_uid, uid_or_nil \\ nil), to: Meili.Index, as: :delete!
@spec get_index(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_index(client_or_uid, uid_or_nil \\ nil), to: Meili.Index, as: :get
@spec get_index!(Client.t() | String.t(), String.t() | nil) :: map() | no_return()
defdelegate get_index!(client_or_uid, uid_or_nil \\ nil), to: Meili.Index, as: :get!
@spec list_indexes(Client.t() | Keyword.t() | nil, Keyword.t()) ::
{:ok, list() | map()} | {:error, Meili.Error.t()}
defdelegate list_indexes(client_or_opts \\ nil, opts \\ []), to: Meili.Index, as: :list
@spec list_indexes!(Client.t() | Keyword.t() | nil, Keyword.t()) ::
list() | map() | no_return()
defdelegate list_indexes!(client_or_opts \\ nil, opts \\ []), to: Meili.Index, as: :list!
@spec stream_indexes(Client.t() | Keyword.t(), Keyword.t()) :: Enumerable.t()
defdelegate stream_indexes(client_or_opts \\ [], opts \\ []), to: Meili.Index, as: :stream
@spec swap_indexes(Client.t() | list(map()), list(map()) | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate swap_indexes(client_or_indexes, indexes_or_nil \\ nil),
to: Meili.Index,
as: :swap
@spec swap_indexes!(Client.t() | list(map()), list(map()) | nil) :: map() | no_return()
defdelegate swap_indexes!(client_or_indexes, indexes_or_nil \\ nil),
to: Meili.Index,
as: :swap!
@spec index_stats(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate index_stats(client_or_uid, uid_or_nil \\ nil), to: Meili.Index, as: :stats
@spec index_stats!(Client.t() | String.t(), String.t() | nil) :: map() | no_return()
defdelegate index_stats!(client_or_uid, uid_or_nil \\ nil), to: Meili.Index, as: :stats!
@spec compact_index(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate compact_index(client_or_uid, uid_or_nil \\ nil), to: Meili.Index, as: :compact
@spec compact_index!(Client.t() | String.t(), String.t() | nil) :: map() | no_return()
defdelegate compact_index!(client_or_uid, uid_or_nil \\ nil), to: Meili.Index, as: :compact!
# --- Health Delegates ---
@spec health(Client.t() | nil) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate health(client \\ nil), to: Meili.Health
@spec health!(Client.t() | nil) :: map() | no_return()
defdelegate health!(client \\ nil), to: Meili.Health
@spec version(Client.t() | nil) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate version(client \\ nil), to: Meili.Health
@spec version!(Client.t() | nil) :: map() | no_return()
defdelegate version!(client \\ nil), to: Meili.Health
@spec stats(Client.t() | nil) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate stats(client \\ nil), to: Meili.Health
@spec stats!(Client.t() | nil) :: map() | no_return()
defdelegate stats!(client \\ nil), to: Meili.Health
# --- Task Delegates ---
@spec wait_for_task(
Client.t() | integer() | String.t(),
integer() | String.t() | Keyword.t(),
Keyword.t()
) :: {:ok, map()} | {:error, :timeout | Meili.Error.t()}
defdelegate wait_for_task(client_or_uid, uid_or_opts \\ [], opts \\ []), to: Meili.Task
@spec wait_for_task!(
Client.t() | integer() | String.t(),
integer() | String.t() | Keyword.t(),
Keyword.t()
) :: map() | no_return()
defdelegate wait_for_task!(client_or_uid, uid_or_opts \\ [], opts \\ []), to: Meili.Task
@spec wait_for_tasks(
Client.t() | Keyword.t() | nil,
Keyword.t()
) :: {:ok, :completed} | {:error, :timeout | Meili.Error.t()}
defdelegate wait_for_tasks(client_or_opts \\ nil, opts \\ []), to: Meili.Task
@spec wait_for_tasks!(
Client.t() | Keyword.t() | nil,
Keyword.t()
) :: :completed | no_return()
defdelegate wait_for_tasks!(client_or_opts \\ nil, opts \\ []), to: Meili.Task
@spec list_tasks(Client.t() | Keyword.t() | nil, Keyword.t()) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate list_tasks(client_or_opts \\ nil, opts \\ []), to: Meili.Task, as: :list
@spec list_tasks!(Client.t() | Keyword.t() | nil, Keyword.t()) :: map() | no_return()
defdelegate list_tasks!(client_or_opts \\ nil, opts \\ []), to: Meili.Task, as: :list!
@spec get_task(Client.t() | integer() | String.t(), integer() | String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_task(client_or_uid, uid_or_nil \\ nil), to: Meili.Task, as: :get
@spec get_task!(Client.t() | integer() | String.t(), integer() | String.t() | nil) ::
map() | no_return()
defdelegate get_task!(client_or_uid, uid_or_nil \\ nil), to: Meili.Task, as: :get!
@spec cancel_tasks(Client.t() | Keyword.t() | nil, Keyword.t()) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate cancel_tasks(client_or_opts \\ nil, opts \\ []), to: Meili.Task, as: :cancel
@spec cancel_tasks!(Client.t() | Keyword.t() | nil, Keyword.t()) :: map() | no_return()
defdelegate cancel_tasks!(client_or_opts \\ nil, opts \\ []), to: Meili.Task, as: :cancel!
@spec delete_tasks(Client.t() | Keyword.t() | nil, Keyword.t()) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate delete_tasks(client_or_opts \\ nil, opts \\ []), to: Meili.Task, as: :delete
@spec delete_tasks!(Client.t() | Keyword.t() | nil, Keyword.t()) :: map() | no_return()
defdelegate delete_tasks!(client_or_opts \\ nil, opts \\ []), to: Meili.Task, as: :delete!
# --- Token Delegates ---
@spec generate_tenant_token(String.t() | nil, map() | nil, String.t() | nil, Keyword.t()) ::
{:ok, String.t()} | {:error, :missing_secret | :invalid_uid | :missing_search_rules}
defdelegate generate_tenant_token(api_key_uid, search_rules, secret \\ nil, opts \\ []),
to: Meili.Token,
as: :generate
@spec generate_tenant_token!(String.t() | nil, map() | nil, String.t() | nil, Keyword.t()) ::
String.t() | no_return()
defdelegate generate_tenant_token!(api_key_uid, search_rules, secret \\ nil, opts \\ []),
to: Meili.Token,
as: :generate!
# --- Dump Delegates ---
@spec create_dump(Client.t() | nil) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate create_dump(client \\ nil), to: Meili.Dump, as: :create
@spec create_dump!(Client.t() | nil) :: map() | no_return()
defdelegate create_dump!(client \\ nil), to: Meili.Dump, as: :create!
# --- Batch Delegates ---
@spec get_batch(Client.t() | integer() | String.t(), integer() | String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_batch(client_or_uid, uid_or_nil \\ nil), to: Meili.Batch, as: :get
@spec get_batch!(Client.t() | integer() | String.t(), integer() | String.t() | nil) ::
map() | no_return()
defdelegate get_batch!(client_or_uid, uid_or_nil \\ nil), to: Meili.Batch, as: :get!
@spec list_batches(Client.t() | Keyword.t() | nil, Keyword.t()) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate list_batches(client_or_opts \\ nil, opts \\ []), to: Meili.Batch, as: :list
@spec list_batches!(Client.t() | Keyword.t() | nil, Keyword.t()) :: map() | no_return()
defdelegate list_batches!(client_or_opts \\ nil, opts \\ []), to: Meili.Batch, as: :list!
# --- Chat Delegates ---
@spec chat_completions(
Client.t() | String.t(),
String.t() | map() | nil,
map() | Keyword.t(),
Keyword.t()
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate chat_completions(
client_or_workspace,
workspace_or_body \\ nil,
body_or_opts \\ [],
opts \\ []
),
to: Meili.Chat,
as: :completions
@spec chat_completions!(
Client.t() | String.t(),
String.t() | map() | nil,
map() | Keyword.t(),
Keyword.t()
) :: map() | no_return()
defdelegate chat_completions!(
client_or_workspace,
workspace_or_body \\ nil,
body_or_opts \\ [],
opts \\ []
),
to: Meili.Chat,
as: :completions!
@spec get_chat_settings(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_chat_settings(client_or_workspace, workspace_or_nil \\ nil),
to: Meili.Chat,
as: :get_settings
@spec get_chat_settings!(Client.t() | String.t(), String.t() | nil) :: map() | no_return()
defdelegate get_chat_settings!(client_or_workspace, workspace_or_nil \\ nil),
to: Meili.Chat,
as: :get_settings!
@spec update_chat_settings(
Client.t() | String.t(),
String.t() | map() | Keyword.t() | nil,
map() | Keyword.t() | nil
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate update_chat_settings(
client_or_workspace,
workspace_or_settings \\ nil,
settings_or_nil \\ nil
),
to: Meili.Chat,
as: :update_settings
@spec update_chat_settings!(
Client.t() | String.t(),
String.t() | map() | Keyword.t() | nil,
map() | Keyword.t() | nil
) :: map() | no_return()
defdelegate update_chat_settings!(
client_or_workspace,
workspace_or_settings \\ nil,
settings_or_nil \\ nil
),
to: Meili.Chat,
as: :update_settings!
@spec reset_chat_settings(Client.t() | String.t(), String.t() | nil) ::
{:ok, term()} | {:error, Meili.Error.t()}
defdelegate reset_chat_settings(client_or_workspace, workspace_or_nil \\ nil),
to: Meili.Chat,
as: :reset_settings
@spec reset_chat_settings!(Client.t() | String.t(), String.t() | nil) :: term() | no_return()
defdelegate reset_chat_settings!(client_or_workspace, workspace_or_nil \\ nil),
to: Meili.Chat,
as: :reset_settings!
# --- Snapshot Delegates ---
@spec create_snapshot(Client.t() | nil) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate create_snapshot(client \\ nil), to: Meili.Snapshot, as: :create
@spec create_snapshot!(Client.t() | nil) :: map() | no_return()
defdelegate create_snapshot!(client \\ nil), to: Meili.Snapshot, as: :create!
# --- Dynamic Search Rules Delegates ---
@spec list_dynamic_search_rules(Client.t() | Keyword.t() | nil, Keyword.t()) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate list_dynamic_search_rules(client_or_opts \\ nil, opts \\ []),
to: Meili.DynamicSearchRules,
as: :list
@spec list_dynamic_search_rules!(Client.t() | Keyword.t() | nil, Keyword.t()) ::
map() | no_return()
defdelegate list_dynamic_search_rules!(client_or_opts \\ nil, opts \\ []),
to: Meili.DynamicSearchRules,
as: :list!
@spec get_dynamic_search_rule(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_dynamic_search_rule(client_or_uid, uid_or_nil \\ nil),
to: Meili.DynamicSearchRules,
as: :get
@spec get_dynamic_search_rule!(Client.t() | String.t(), String.t() | nil) ::
map() | no_return()
defdelegate get_dynamic_search_rule!(client_or_uid, uid_or_nil \\ nil),
to: Meili.DynamicSearchRules,
as: :get!
@spec update_dynamic_search_rule(
Client.t() | String.t(),
String.t() | map() | Keyword.t() | nil,
map() | Keyword.t() | nil
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate update_dynamic_search_rule(
client_or_uid,
uid_or_params \\ nil,
params_or_nil \\ nil
),
to: Meili.DynamicSearchRules,
as: :update
@spec update_dynamic_search_rule!(
Client.t() | String.t(),
String.t() | map() | Keyword.t() | nil,
map() | Keyword.t() | nil
) :: map() | no_return()
defdelegate update_dynamic_search_rule!(
client_or_uid,
uid_or_params \\ nil,
params_or_nil \\ nil
),
to: Meili.DynamicSearchRules,
as: :update!
@spec delete_dynamic_search_rule(Client.t() | String.t(), String.t() | nil) ::
{:ok, term()} | {:error, Meili.Error.t()}
defdelegate delete_dynamic_search_rule(client_or_uid, uid_or_nil \\ nil),
to: Meili.DynamicSearchRules,
as: :delete
@spec delete_dynamic_search_rule!(Client.t() | String.t(), String.t() | nil) ::
term() | no_return()
defdelegate delete_dynamic_search_rule!(client_or_uid, uid_or_nil \\ nil),
to: Meili.DynamicSearchRules,
as: :delete!
# --- Export Delegates ---
@spec create_export(Client.t() | map() | Keyword.t(), map() | Keyword.t(), Keyword.t()) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate create_export(client_or_params, params_or_opts \\ [], opts \\ []),
to: Meili.Export,
as: :create
@spec create_export!(Client.t() | map() | Keyword.t(), map() | Keyword.t(), Keyword.t()) ::
map() | no_return()
defdelegate create_export!(client_or_params, params_or_opts \\ [], opts \\ []),
to: Meili.Export,
as: :create!
# --- Webhook Delegates ---
@spec list_webhooks(Client.t() | nil) :: {:ok, term()} | {:error, Meili.Error.t()}
defdelegate list_webhooks(client \\ nil), to: Meili.Webhook, as: :list
@spec list_webhooks!(Client.t() | nil) :: term() | no_return()
defdelegate list_webhooks!(client \\ nil), to: Meili.Webhook, as: :list!
@spec get_webhook(Client.t() | String.t(), String.t() | nil) ::
{:ok, term()} | {:error, Meili.Error.t()}
defdelegate get_webhook(client_or_uuid, uuid_or_nil \\ nil), to: Meili.Webhook, as: :get
@spec get_webhook!(Client.t() | String.t(), String.t() | nil) :: term() | no_return()
defdelegate get_webhook!(client_or_uuid, uuid_or_nil \\ nil), to: Meili.Webhook, as: :get!
@spec create_webhook(Client.t() | map() | list(), map() | list() | nil) ::
{:ok, term()} | {:error, Meili.Error.t()}
defdelegate create_webhook(client_or_params, params_or_nil \\ nil),
to: Meili.Webhook,
as: :create
@spec create_webhook!(Client.t() | map() | list(), map() | list() | nil) :: term() | no_return()
defdelegate create_webhook!(client_or_params, params_or_nil \\ nil),
to: Meili.Webhook,
as: :create!
@spec update_webhook(
Client.t() | String.t(),
String.t() | map() | list() | nil,
map() | list() | nil
) :: {:ok, term()} | {:error, Meili.Error.t()}
defdelegate update_webhook(client_or_uuid, uuid_or_params \\ nil, params_or_nil \\ nil),
to: Meili.Webhook,
as: :update
@spec update_webhook!(
Client.t() | String.t(),
String.t() | map() | list() | nil,
map() | list() | nil
) :: term() | no_return()
defdelegate update_webhook!(client_or_uuid, uuid_or_params \\ nil, params_or_nil \\ nil),
to: Meili.Webhook,
as: :update!
@spec delete_webhook(Client.t() | String.t(), String.t() | nil) ::
{:ok, term()} | {:error, Meili.Error.t()}
defdelegate delete_webhook(client_or_uuid, uuid_or_nil \\ nil), to: Meili.Webhook, as: :delete
@spec delete_webhook!(Client.t() | String.t(), String.t() | nil) :: term() | no_return()
defdelegate delete_webhook!(client_or_uuid, uuid_or_nil \\ nil), to: Meili.Webhook, as: :delete!
# --- Key Delegates ---
@spec list_keys(Client.t() | Keyword.t() | nil, Keyword.t()) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate list_keys(client_or_opts \\ nil, opts \\ []), to: Meili.Key, as: :list
@spec list_keys!(Client.t() | Keyword.t() | nil, Keyword.t()) :: map() | no_return()
defdelegate list_keys!(client_or_opts \\ nil, opts \\ []), to: Meili.Key, as: :list!
@spec get_key(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_key(client_or_key, key_or_nil \\ nil), to: Meili.Key, as: :get
@spec get_key!(Client.t() | String.t(), String.t() | nil) :: map() | no_return()
defdelegate get_key!(client_or_key, key_or_nil \\ nil), to: Meili.Key, as: :get!
@spec create_key(Client.t() | map() | Keyword.t(), map() | Keyword.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate create_key(client_or_params, params_or_nil \\ nil), to: Meili.Key, as: :create
@spec create_key!(Client.t() | map() | Keyword.t(), map() | Keyword.t() | nil) ::
map() | no_return()
defdelegate create_key!(client_or_params, params_or_nil \\ nil), to: Meili.Key, as: :create!
@spec update_key(
Client.t() | String.t(),
String.t() | map() | Keyword.t() | nil,
map() | Keyword.t() | nil
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate update_key(client_or_key, key_or_params \\ nil, params_or_nil \\ nil),
to: Meili.Key,
as: :update
@spec update_key!(
Client.t() | String.t(),
String.t() | map() | Keyword.t() | nil,
map() | Keyword.t() | nil
) :: map() | no_return()
defdelegate update_key!(client_or_key, key_or_params \\ nil, params_or_nil \\ nil),
to: Meili.Key,
as: :update!
@spec delete_key(Client.t() | String.t(), String.t() | nil) ::
{:ok, term()} | {:error, Meili.Error.t()}
defdelegate delete_key(client_or_key, key_or_nil \\ nil), to: Meili.Key, as: :delete
@spec delete_key!(Client.t() | String.t(), String.t() | nil) :: term() | no_return()
defdelegate delete_key!(client_or_key, key_or_nil \\ nil), to: Meili.Key, as: :delete!
# --- Settings Delegates ---
@spec get_settings(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_settings(client_or_uid, uid_or_nil \\ nil), to: Meili.Settings, as: :get
@spec get_settings!(Client.t() | String.t(), String.t() | nil) :: map() | no_return()
defdelegate get_settings!(client_or_uid, uid_or_nil \\ nil), to: Meili.Settings, as: :get!
@spec update_settings(
Client.t() | String.t(),
String.t() | map() | Keyword.t() | nil,
map() | Keyword.t() | nil
) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate update_settings(client_or_uid, uid_or_settings \\ [], settings_or_nil \\ []),
to: Meili.Settings,
as: :update
@spec update_settings!(
Client.t() | String.t(),
String.t() | map() | Keyword.t() | nil,
map() | Keyword.t() | nil
) :: map() | no_return()
defdelegate update_settings!(client_or_uid, uid_or_settings \\ [], settings_or_nil \\ []),
to: Meili.Settings,
as: :update!
@spec reset_settings(Client.t() | String.t(), String.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate reset_settings(client_or_uid, uid_or_nil \\ nil), to: Meili.Settings, as: :reset
@spec reset_settings!(Client.t() | String.t(), String.t() | nil) :: map() | no_return()
defdelegate reset_settings!(client_or_uid, uid_or_nil \\ nil), to: Meili.Settings, as: :reset!
# --- Experimental Features Delegates ---
@spec get_experimental_features(Client.t() | nil) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_experimental_features(client \\ nil), to: Meili.Features, as: :get
@spec get_experimental_features!(Client.t() | nil) :: map() | no_return()
defdelegate get_experimental_features!(client \\ nil), to: Meili.Features, as: :get!
@spec update_experimental_features(Client.t() | map() | Keyword.t(), map() | Keyword.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate update_experimental_features(client_or_features, features_or_nil \\ nil),
to: Meili.Features,
as: :update
@spec update_experimental_features!(
Client.t() | map() | Keyword.t(),
map() | Keyword.t() | nil
) :: map() | no_return()
defdelegate update_experimental_features!(client_or_features, features_or_nil \\ nil),
to: Meili.Features,
as: :update!
# --- Network Delegates ---
@spec get_network(Client.t() | nil) :: {:ok, map()} | {:error, Meili.Error.t()}
defdelegate get_network(client \\ nil), to: Meili.Network, as: :get
@spec get_network!(Client.t() | nil) :: map() | no_return()
defdelegate get_network!(client \\ nil), to: Meili.Network, as: :get!
@spec update_network(Client.t() | map() | Keyword.t(), map() | Keyword.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
defdelegate update_network(client_or_params, params_or_nil \\ nil),
to: Meili.Network,
as: :update
@spec update_network!(Client.t() | map() | Keyword.t(), map() | Keyword.t() | nil) ::
map() | no_return()
defdelegate update_network!(client_or_params, params_or_nil \\ nil),
to: Meili.Network,
as: :update!
end