-module(api). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([set_provider/1, get_provider_metadata/0, set_context/1, set_domain_provider/2, get_domain_provider_metadata/1]). -export_type([api/0]). -opaque api() :: {api, gleam@option:option(provider:feature_provider()), evaluation_context:evaluation_context()}. -spec default_api() -> api(). default_api() -> {api, none, {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, {some, Provider}, erlang:element(3, Api)}, persistent_term:put(<<"openfeature_api"/utf8>>, New_api), (erlang:element(2, Provider))(erlang:element(3, Api)). -spec get_provider_metadata() -> gleam@option:option(metadata:metadata()). get_provider_metadata() -> _pipe = erlang:element( 2, persistent_term:get(<<"openfeature_api"/utf8>>, default_api()) ), gleam@option:map( _pipe, fun(Provider) -> (erlang:element(4, Provider))() end ). -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_metadata(binary()) -> gleam@option:option(metadata:metadata()). get_domain_provider_metadata(Domain) -> _pipe = persistent_term:get( <<"domain_provider__"/utf8, Domain/binary>>, none ), gleam@option:map( _pipe, fun(Provider) -> (erlang:element(4, Provider))() end ).