-module(api). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([set_provider/1, get_provider_metadata/0, get_client/0, set_context/1, set_domain_provider/2, get_domain_provider_metadata/1, get_domain_client/1]). -export_type([api/0]). -type api() :: {api, provider:feature_provider(), evaluation_context:evaluation_context()}. -spec default_api() -> api(). default_api() -> {api, providers@noop:no_op_provider(), {evaluation_context, none, gleam@dict:new()}}. -spec set_provider(provider:feature_provider()) -> {ok, nil} | {error, nil}. set_provider(Provider) -> Api = persistent_term:get(<<"openfeature_api"/utf8>>, default_api()), New_api = {api, Provider, erlang:element(3, Api)}, persistent_term:put(<<"openfeature_api"/utf8>>, New_api), (erlang:element(2, Provider))(erlang:element(3, Api)). -spec get_provider() -> provider:feature_provider(). get_provider() -> erlang:element( 2, persistent_term:get(<<"openfeature_api"/utf8>>, default_api()) ). -spec get_provider_metadata() -> metadata:metadata(). get_provider_metadata() -> (erlang:element( 4, erlang:element( 2, persistent_term:get(<<"openfeature_api"/utf8>>, default_api()) ) ))(). -spec get_client() -> client:client(). get_client() -> {client, get_provider(), {client_metadata, <<""/utf8>>}}. -spec set_context(evaluation_context:evaluation_context()) -> nil. set_context(Context) -> Api = persistent_term:get(<<"openfeature_api"/utf8>>, default_api()), New_api = {api, erlang:element(2, Api), Context}, persistent_term:put(<<"openfeature_api"/utf8>>, New_api). -spec set_domain_provider(binary(), provider:feature_provider()) -> nil. set_domain_provider(Domain, Provider) -> persistent_term:put(<<"domain_provider__"/utf8, Domain/binary>>, Provider). -spec get_domain_provider(binary()) -> provider:feature_provider(). get_domain_provider(Domain) -> persistent_term:get( <<"domain_provider__"/utf8, Domain/binary>>, get_provider() ). -spec get_domain_provider_metadata(binary()) -> metadata:metadata(). get_domain_provider_metadata(Domain) -> (erlang:element( 4, persistent_term:get( <<"domain_provider__"/utf8, Domain/binary>>, get_provider() ) ))(). -spec get_domain_client(binary()) -> client:client(). get_domain_client(Domain) -> {client, get_domain_provider(Domain), {client_metadata, Domain}}.