-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, FUL} | {error, list(gleam@dynamic:decode_error())}) ) -> evaluation:resolution_details(FUL). 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}.