Current section

Files

Jump to
openfeature src providers@in_memory.erl
Raw

src/providers@in_memory.erl

-module(providers@in_memory).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([in_memory_provider/1]).
-spec get_metadata() -> metadata:metadata().
get_metadata() ->
{metadata, <<"In-Memory Provider"/utf8>>}.
-spec resolve_evaluation(
binary(),
gleam@dict:dict(binary(), any()),
fun((gleam@dynamic:dynamic_()) -> {ok, FTQ} |
{error, list(gleam@dynamic:decode_error())})
) -> evaluation:resolution_details(FTQ).
resolve_evaluation(Flag, Flags, Decoder) ->
case gleam@dict:get(Flags, Flag) of
{ok, Val} ->
case begin
_pipe = gleam@dynamic:from(Val),
Decoder(_pipe)
end of
{ok, Resolved_val} ->
{resolution_success, Resolved_val, static};
{error, _} ->
{resolution_error, type_mismatch, <<"type mismatch"/utf8>>}
end;
{error, _} ->
{resolution_error, flag_not_found, <<"not found"/utf8>>}
end.
-spec resolve_dynamic_evaluation(binary(), gleam@dict:dict(binary(), any())) -> evaluation:resolution_details(gleam@dynamic:dynamic_()).
resolve_dynamic_evaluation(Flag, Flags) ->
case gleam@dict:get(Flags, Flag) of
{ok, Val} ->
{resolution_success, gleam@dynamic:from(Val), static};
{error, _} ->
{resolution_error, flag_not_found, <<"not found"/utf8>>}
end.
-spec in_memory_provider(gleam@dict:dict(binary(), any())) -> provider:feature_provider().
in_memory_provider(From) ->
{feature_provider,
fun(Context) ->
gleam@io:debug(Context),
{ok, nil}
end,
fun() -> nil end,
fun get_metadata/0,
fun(Flag, _, _) ->
resolve_evaluation(Flag, From, fun gleam@dynamic:bool/1)
end,
fun(Flag@1, _, _) ->
resolve_evaluation(Flag@1, From, fun gleam@dynamic:string/1)
end,
fun(Flag@2, _, _) ->
resolve_evaluation(Flag@2, From, fun gleam@dynamic:int/1)
end,
fun(Flag@3, _, _) ->
resolve_evaluation(Flag@3, From, fun gleam@dynamic:float/1)
end,
fun(Flag@4, _, _) -> resolve_dynamic_evaluation(Flag@4, From) end}.