defmodule Meili.Network do
@moduledoc """
Manages multi-node network configurations in Meilisearch.
"""
alias Meili.Client
@doc """
Retrieves multi-node network configuration.
## Examples
Meili.Network.get()
Meili.Network.get(client)
"""
@spec get(Meili.Client.t() | nil) :: {:ok, map()} | {:error, Meili.Error.t()}
def get(client \\ nil) do
client = client || Meili.default_client()
Client.request(client, :get, "/network")
end
@doc """
Retrieves multi-node network configuration, raising on error.
## Examples
Meili.Network.get!()
Meili.Network.get!(client)
"""
@spec get!(Meili.Client.t() | nil) :: map() | no_return()
def get!(client \\ nil) do
case get(client) do
{:ok, body} -> body
{:error, exception} -> raise exception
end
end
@doc """
Updates multi-node network configuration.
## Examples
params = %{
leader: %{
endpoint: "https://leader.meili.com",
key: "leader-key"
}
}
Meili.Network.update(params)
Meili.Network.update(client, params)
"""
@spec update(Meili.Client.t() | map() | Keyword.t(), map() | Keyword.t() | nil) ::
{:ok, map()} | {:error, Meili.Error.t()}
def update(client_or_params, params_or_nil \\ nil) do
case client_or_params do
%Client{} = client ->
do_update(client, params_or_nil)
params when is_map(params) or is_list(params) ->
do_update(Meili.default_client(), params)
end
end
@doc """
Updates network configuration, raising on error.
## Examples
params = %{
leader: %{
endpoint: "https://leader.meili.com",
key: "leader-key"
}
}
Meili.Network.update!(params)
Meili.Network.update!(client, params)
"""
@spec update!(Meili.Client.t() | map() | Keyword.t(), map() | Keyword.t() | nil) ::
map() | no_return()
def update!(client_or_params, params_or_nil \\ nil) do
case update(client_or_params, params_or_nil) do
{:ok, body} -> body
{:error, exception} -> raise exception
end
end
defp do_update(client, params) do
body = Meili.Util.camelize_keys(params)
Client.request(client, :patch, "/network", json: body)
end
end