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([set_provider/1, get_provider_metadata/0, set_context/1, set_domain_provider/2, get_domain_provider_metadata/1, get_domain_client/1, get_client/0]).
-export_type([api/0]).
-type api() :: {api,
openfeature@provider:feature_provider(),
openfeature@evaluation_context:evaluation_context()}.
-spec default_api() -> api().
default_api() ->
{api,
openfeature@providers@no_op:provider(),
{evaluation_context, none, gleam@dict:new()}}.
-spec set_provider(openfeature@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() -> openfeature@provider:feature_provider().
get_provider() ->
erlang:element(
2,
persistent_term:get(<<"openfeature_api"/utf8>>, default_api())
).
-spec get_provider_metadata() -> openfeature@provider:metadata().
get_provider_metadata() ->
(erlang:element(
4,
erlang:element(
2,
persistent_term:get(<<"openfeature_api"/utf8>>, default_api())
)
))().
-spec set_context(openfeature@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(), openfeature@provider:feature_provider()) -> nil.
set_domain_provider(Domain, Provider) ->
persistent_term:put(<<"domain_provider__"/utf8, Domain/binary>>, Provider).
-spec get_domain_provider(binary()) -> openfeature@provider:feature_provider().
get_domain_provider(Domain) ->
persistent_term:get(
<<"domain_provider__"/utf8, Domain/binary>>,
get_provider()
).
-spec get_domain_provider_metadata(binary()) -> openfeature@provider:metadata().
get_domain_provider_metadata(Domain) ->
(erlang:element(
4,
persistent_term:get(
<<"domain_provider__"/utf8, Domain/binary>>,
get_provider()
)
))().
-spec get_domain_client(binary()) -> openfeature@client:client().
get_domain_client(Domain) ->
{client, get_domain_provider(Domain), {client_metadata, Domain}}.
-spec get_client() -> openfeature@client:client().
get_client() ->
{client, get_provider(), {client_metadata, <<""/utf8>>}}.