Current section
Files
Jump to
Current section
Files
src/api.erl
-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
).