Current section

Files

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

src/caffeine_lang@common@helpers.erl

-module(caffeine_lang@common@helpers).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/common/helpers.gleam").
-export([accepted_type_to_string/1, json_from_file/1, result_try/2, map_reference_to_referrer_over_collection/4]).
-export_type([accepted_types/0, value_tuple/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type accepted_types() :: boolean |
float |
integer |
string |
{dict, accepted_types(), accepted_types()} |
{list, accepted_types()} |
{optional, accepted_types()} |
{defaulted, accepted_types(), binary()}.
-type value_tuple() :: {value_tuple,
binary(),
accepted_types(),
gleam@dynamic:dynamic_()}.
-file("src/caffeine_lang/common/helpers.gleam", 28).
?DOC(" Converts an AcceptedTypes to its string representation.\n").
-spec accepted_type_to_string(accepted_types()) -> binary().
accepted_type_to_string(Accepted_type) ->
case Accepted_type of
boolean ->
<<"Boolean"/utf8>>;
float ->
<<"Float"/utf8>>;
integer ->
<<"Integer"/utf8>>;
string ->
<<"String"/utf8>>;
{dict, Key_type, Value_type} ->
<<<<<<<<"Dict("/utf8, (accepted_type_to_string(Key_type))/binary>>/binary,
", "/utf8>>/binary,
(accepted_type_to_string(Value_type))/binary>>/binary,
")"/utf8>>;
{list, Inner_type} ->
<<<<"List("/utf8, (accepted_type_to_string(Inner_type))/binary>>/binary,
")"/utf8>>;
{optional, Inner_type@1} ->
<<<<"Optional("/utf8,
(accepted_type_to_string(Inner_type@1))/binary>>/binary,
")"/utf8>>;
{defaulted, Inner_type@2, Default_val} ->
<<<<<<<<"Defaulted("/utf8,
(accepted_type_to_string(Inner_type@2))/binary>>/binary,
", "/utf8>>/binary,
Default_val/binary>>/binary,
")"/utf8>>
end.
-file("src/caffeine_lang/common/helpers.gleam", 53).
?DOC(" Reads the contents of a JSON file as a string.\n").
-spec json_from_file(binary()) -> {ok, binary()} |
{error, caffeine_lang@common@errors:compilation_error()}.
json_from_file(File_path) ->
case simplifile:read(File_path) of
{ok, File_contents} ->
{ok, File_contents};
{error, Err} ->
{error,
{parser_file_read_error,
<<<<<<(simplifile:describe_error(Err))/binary, " ("/utf8>>/binary,
File_path/binary>>/binary,
")"/utf8>>}}
end.
-file("src/caffeine_lang/common/helpers.gleam", 65).
?DOC(
" A helper for chaining Result operations with the `use` syntax.\n"
" Equivalent to `result.try` but defined here for convenient use with `use`.\n"
).
-spec result_try(
{ok, FRG} | {error, FRH},
fun((FRG) -> {ok, FRK} | {error, FRH})
) -> {ok, FRK} | {error, FRH}.
result_try(Result, Next) ->
case Result of
{ok, Value} ->
Next(Value);
{error, Err} ->
{error, Err}
end.
-file("src/caffeine_lang/common/helpers.gleam", 77).
?DOC(
" Maps each referrer to its corresponding reference by matching names.\n"
" Returns a list of tuples pairing each referrer with its matched reference.\n"
).
-spec map_reference_to_referrer_over_collection(
list(FRP),
list(FRR),
fun((FRP) -> binary()),
fun((FRR) -> binary())
) -> list({FRR, FRP}).
map_reference_to_referrer_over_collection(
References,
Referrers,
Reference_name,
Referrer_reference
) ->
_pipe = Referrers,
gleam@list:map(
_pipe,
fun(Referrer) ->
Reference@2 = case begin
_pipe@1 = References,
_pipe@4 = gleam@list:filter(
_pipe@1,
fun(Reference) ->
begin
_pipe@2 = Reference,
Reference_name(_pipe@2)
end
=:= begin
_pipe@3 = Referrer,
Referrer_reference(_pipe@3)
end
end
),
gleam@list:first(_pipe@4)
end of
{ok, Reference@1} -> Reference@1;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"caffeine_lang/common/helpers"/utf8>>,
function => <<"map_reference_to_referrer_over_collection"/utf8>>,
line => 86,
value => _assert_fail,
start => 2739,
'end' => 2926,
pattern_start => 2750,
pattern_end => 2763})
end,
{Referrer, Reference@2}
end
).