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([json_from_file/1, result_try/2, map_reference_to_referrer_over_collection/4]).
-export_type([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 value_tuple() :: {value_tuple,
binary(),
caffeine_lang@common@accepted_types:accepted_types(),
gleam@dynamic:dynamic_()}.
-file("src/caffeine_lang/common/helpers.gleam", 13).
?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", 25).
?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, FRJ} | {error, FRK},
fun((FRJ) -> {ok, FRN} | {error, FRK})
) -> {ok, FRN} | {error, FRK}.
result_try(Result, Next) ->
case Result of
{ok, Value} ->
Next(Value);
{error, Err} ->
{error, Err}
end.
-file("src/caffeine_lang/common/helpers.gleam", 37).
?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(FRS),
list(FRU),
fun((FRS) -> binary()),
fun((FRU) -> binary())
) -> list({FRU, FRS}).
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 => 46,
value => _assert_fail,
start => 1510,
'end' => 1697,
pattern_start => 1521,
pattern_end => 1534})
end,
{Referrer, Reference@2}
end
).