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]).
-export_type([api/0]).
-type api() :: {api,
openfeature@provider:feature_provider(),
openfeature@evaluation_context:evaluation_context()}.
-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) ->
Context = persistent_term:get(
<<"global_openfeature_context"/utf8>>,
openfeature@evaluation_context:empty()
),
Api = {api, Provider, Context},
persistent_term:put(<<"global_openfeature_provider"/utf8>>, Api),
(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 set_domain_provider(binary(), openfeature@provider:feature_provider()) -> nil.
set_domain_provider(Domain, Provider) ->
_pipe = persistent_term:get(
<<"openfeature_domain_providers"/utf8>>,
gleam@dict:new()
),
_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 = persistent_term:get(
<<"openfeature_domain_providers"/utf8>>,
gleam@dict:new()
),
_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}}}.