Current section

Files

Jump to
openfeature src openfeature@api.erl
Raw

src/openfeature@api.erl

-module(openfeature@api).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([get_provider_metadata/0, get_client/0, set_provider/1, set_context/1, set_domain_provider/2, get_domain_provider_metadata/1, get_domain_client/1, shutdown/0]).
-spec get_provider() -> openfeature@provider:feature_provider().
get_provider() ->
persistent_term:get(
<<"global_openfeature_provider"/utf8>>,
openfeature@providers@no_op:provider()
).
-spec get_provider_metadata() -> openfeature@provider:metadata().
get_provider_metadata() ->
(erlang:element(4, get_provider()))().
-spec get_client() -> openfeature@client:client().
get_client() ->
{client, get_provider(), {client_metadata, global}}.
-spec set_provider(openfeature@provider:feature_provider()) -> {ok, nil} |
{error, nil}.
set_provider(Provider) ->
persistent_term:put(<<"global_openfeature_provider"/utf8>>, Provider),
Context = persistent_term:get(
<<"global_openfeature_context"/utf8>>,
openfeature@evaluation_context:empty()
),
(erlang:element(2, Provider))(Context).
-spec set_context(openfeature@evaluation_context:evaluation_context()) -> nil.
set_context(Context) ->
persistent_term:put(<<"global_openfeature_context"/utf8>>, Context).
-spec get_domain_provider_registry() -> gleam@dict:dict(binary(), openfeature@provider:feature_provider()).
get_domain_provider_registry() ->
persistent_term:get(
<<"openfeature_domain_providers"/utf8>>,
gleam@dict:new()
).
-spec set_domain_provider(binary(), openfeature@provider:feature_provider()) -> nil.
set_domain_provider(Domain, Provider) ->
_pipe = get_domain_provider_registry(),
_pipe@1 = gleam@dict:insert(_pipe, Domain, Provider),
persistent_term:put(<<"openfeature_domain_providers"/utf8>>, _pipe@1).
-spec get_domain_provider(binary()) -> openfeature@provider:feature_provider().
get_domain_provider(Domain) ->
_pipe = get_domain_provider_registry(),
_pipe@1 = gleam@dict:get(_pipe, Domain),
gleam@result:unwrap(_pipe@1, get_provider()).
-spec get_domain_provider_metadata(binary()) -> openfeature@provider:metadata().
get_domain_provider_metadata(Domain) ->
(erlang:element(4, get_domain_provider(Domain)))().
-spec get_domain_client(binary()) -> openfeature@client:client().
get_domain_client(Domain) ->
{client, get_domain_provider(Domain), {client_metadata, {scoped, Domain}}}.
-spec shutdown() -> boolean().
shutdown() ->
_pipe = get_domain_provider_registry(),
_pipe@1 = gleam@dict:values(_pipe),
_pipe@2 = gleam@list:prepend(_pipe@1, get_provider()),
gleam@list:each(
_pipe@2,
fun(Provider) -> (erlang:element(3, Provider))() end
),
persistent_term:erase(<<"openfeature_domain_providers"/utf8>>),
persistent_term:erase(<<"global_openfeature_provider"/utf8>>),
persistent_term:erase(<<"global_openfeature_context"/utf8>>).