defmodule Supabase.ClientRegistry do @moduledoc """ Registry for the Supabase multiple Clients. This registry is used to register and lookup the Supabase Clients defined by the user. This Registry is used by the `Supabase.ClientSupervisor` to register and any `Supabase.Client` that is defined. That way, the `Supabase.ClientSupervisor` can lookup the `Supabase.Client` by name and start it if it is not running. ## Usage This Registry is used internally by the `Supabase.Application` and should start automatically when the application starts. """ def start_link(_) do Registry.start_link(keys: :unique, name: __MODULE__) end def child_spec(opts) do %{ id: __MODULE__, start: {__MODULE__, :start_link, [opts]}, type: :worker, restart: :permanent, shutdown: 500 } end def named(key) when is_atom(key) do {:via, Registry, {__MODULE__, key}} end def register(key) when is_atom(key) do Registry.register(__MODULE__, key, nil) end def lookup(key) when is_atom(key) do case Registry.lookup(__MODULE__, key) do [{pid, _}] -> pid [] -> nil end end end