defmodule Meilisearch.Version do @moduledoc """ Retreive Meilisearch version. [Version API](https://www.meilisearch.com/docs/reference/api/version) """ 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://www.meilisearch.com/docs/reference/api/version#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