defmodule Meilisearch.Version do
@moduledoc """
Retreive Meilisearch version.
[Version API](https://docs.meilisearch.com/reference/api/version.html)
"""
use TypedEctoSchema
@primary_key false
typed_embedded_schema null: false do
field(:commitSha, :string)
field(:commitDate, :utc_datetime)
field(:pkgVersion, :string)
end
def cast(data) when is_map(data) do
%__MODULE__{}
|> Ecto.Changeset.cast(data, [:commitSha, :commitDate, :pkgVersion])
|> Ecto.Changeset.apply_changes()
end
@doc """
Get a response from the /version endpoint of Meilisearch.
[Meilisearch documentation](https://docs.meilisearch.com/reference/api/version.html#get-version-of-meilisearch)
## Examples
iex> client = Meilisearch.Client.new(endpoint: "http://localhost:7700", key: "master_key_test")
iex> Meilisearch.Version.get(client)
{:ok, %{
commitSha: "b46889b5f0f2f8b91438a08a358ba8f05fc09fc1",
commitDate: ~U[2019-11-15 09:51:54.27Z],
pkgVersion: "0.1.1"
}}
"""
@spec get(Tesla.Client.t()) :: {:ok, __MODULE__.t()} | {:error, Meilisearch.Client.error()}
def get(client) do
with {:ok, data} <-
client
|> Tesla.get("/version")
|> Meilisearch.Client.handle_response() do
{:ok, cast(data)}
end
end
end