Current section

Files

Jump to
caffeine_lang src caffeine_lang@common@decoders.erl
Raw

src/caffeine_lang@common@decoders.erl

-module(caffeine_lang@common@decoders).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/common/decoders.gleam").
-export([named_reference_decoder/2, non_empty_string_decoder/0, accepted_types_decoder/0, decode_value_to_string/1, decode_list_values_to_strings/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Type Restrictions:\n"
"\n"
" Collections:\n"
" - List(T): T must be a primitive (Boolean, Float, Integer, String)\n"
" - Dict(K, V): K and V must both be primitives\n"
"\n"
" Modifiers:\n"
" - Optional(T): T can be a primitive or collection, not another modifier\n"
" - Defaulted(T, default): T must be a primitive, default must be valid for T\n"
).
-file("src/caffeine_lang/common/decoders.gleam", 18).
?DOC(false).
-spec named_reference_decoder(list(HTZ), fun((HTZ) -> binary())) -> gleam@dynamic@decode:decoder(binary()).
named_reference_decoder(Collection, Name_extraction) ->
Names = begin
_pipe = Collection,
gleam@list:map(_pipe, Name_extraction)
end,
Default = {error, <<""/utf8>>},
gleam@dynamic@decode:new_primitive_decoder(
<<"NamedReference"/utf8>>,
fun(Dyn) ->
case gleam@dynamic@decode:run(
Dyn,
{decoder, fun gleam@dynamic@decode:decode_string/1}
) of
{ok, X} ->
case begin
_pipe@1 = Names,
gleam@list:contains(_pipe@1, X)
end of
true ->
{ok, X};
false ->
Default
end;
_ ->
Default
end
end
).
-file("src/caffeine_lang/common/decoders.gleam", 40).
?DOC(false).
-spec non_empty_string_decoder() -> gleam@dynamic@decode:decoder(binary()).
non_empty_string_decoder() ->
Default = {error, <<""/utf8>>},
gleam@dynamic@decode:new_primitive_decoder(
<<"NonEmptyString"/utf8>>,
fun(Dyn) ->
case gleam@dynamic@decode:run(
Dyn,
{decoder, fun gleam@dynamic@decode:decode_string/1}
) of
{ok, <<""/utf8>>} ->
Default;
{ok, S} ->
{ok, S};
_ ->
Default
end
end
).
-file("src/caffeine_lang/common/decoders.gleam", 54).
?DOC(false).
-spec accepted_types_decoder() -> gleam@dynamic@decode:decoder(caffeine_lang@common@accepted_types:accepted_types()).
accepted_types_decoder() ->
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Raw_string) ->
case caffeine_lang@common@accepted_types:parse_accepted_type(
Raw_string
) of
{ok, T} ->
gleam@dynamic@decode:success(T);
{error, nil} ->
gleam@dynamic@decode:failure(
{primitive_type, boolean},
<<"AcceptedType"/utf8>>
)
end
end
).
-file("src/caffeine_lang/common/decoders.gleam", 69).
?DOC(false).
-spec decode_value_to_string(
caffeine_lang@common@accepted_types:accepted_types()
) -> gleam@dynamic@decode:decoder(binary()).
decode_value_to_string(Typ) ->
caffeine_lang@common@accepted_types:decode_value_to_string(Typ).
-file("src/caffeine_lang/common/decoders.gleam", 76).
?DOC(false).
-spec decode_list_values_to_strings(
caffeine_lang@common@accepted_types:accepted_types()
) -> gleam@dynamic@decode:decoder(list(binary())).
decode_list_values_to_strings(Inner_type) ->
caffeine_lang@common@accepted_types:decode_list_values_to_strings(
Inner_type
).