defmodule Supabase.ConnectionOptions do
@moduledoc """
A changeset for validating and parsing connection options. This is mainly
used internally by `Supabase` module, but can be used to validate and parse
connection options manually.
"""
import Ecto.Changeset
alias Supabase.Types.Atom
@type t :: %{
alias: atom,
name: atom,
base_url: String.t(),
api_key: String.t(),
access_token: String.t(),
bucket: struct
}
@types %{
base_url: :string,
api_key: :string,
access_token: :string,
bucket: :map,
alias: Ecto.ParameterizedType.init(Atom, []),
name: Ecto.ParameterizedType.init(Atom, [])
}
@spec parse(map) :: {:ok, Supabase.ConnectionOptions.t()} | {:error, Ecto.Changeset.t()}
def parse(attrs) do
{%{}, @types}
|> cast(attrs, Map.keys(@types))
|> validate_required(~w[base_url api_key alias name]a)
|> apply_action(:parse_connection_options)
end
@spec to_connection_info(t) :: Supabase.Connection.params()
def to_connection_info(data) do
[
name: data[:name],
conn_info: data
]
end
end