Current section

Files

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

src/caffeine_lang@common@errors.erl

-module(caffeine_lang@common@errors).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/common/errors.gleam").
-export([format_decode_error_message/2, format_json_decode_error_to_string/1, format_json_decode_error/1]).
-export_type([compilation_error/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 compilation_error() :: {parser_file_read_error, binary()} |
{parser_json_parser_error, binary()} |
{parser_duplicate_error, binary()} |
{linker_parse_error, binary()} |
{linker_semantic_error, binary()} |
{semantic_analysis_vendor_resolution_error, binary()} |
{semantic_analysis_template_parse_error, binary()} |
{semantic_analysis_template_resolution_error, binary()} |
{generator_slo_query_resolution_error, binary()} |
{generator_datadog_terraform_resolution_error, binary()} |
{c_q_l_resolver_error, binary()} |
{c_q_l_parser_error, binary()} |
{c_q_l_generator_error, binary()}.
-file("src/caffeine_lang/common/errors.gleam", 55).
?DOC(" Normalizes type names across targets (JS uses \"Array\", Erlang uses \"List\").\n").
-spec normalize_type_name(binary()) -> binary().
normalize_type_name(Name) ->
case Name of
<<"Array"/utf8>> ->
<<"List"/utf8>>;
Other ->
Other
end.
-file("src/caffeine_lang/common/errors.gleam", 63).
?DOC(" Formats a list of decode errors into a human-readable string.\n").
-spec format_decode_error_message(
list(gleam@dynamic@decode:decode_error()),
gleam@option:option(binary())
) -> binary().
format_decode_error_message(Errors, Type_key_identifier) ->
_pipe = Errors,
_pipe@4 = gleam@list:map(
_pipe,
fun(Error) ->
<<<<<<<<<<<<"expected ("/utf8, (erlang:element(2, Error))/binary>>/binary,
") received ("/utf8>>/binary,
(normalize_type_name(erlang:element(3, Error)))/binary>>/binary,
") for ("/utf8>>/binary,
((case {begin
_pipe@1 = erlang:element(4, Error),
gleam@string:join(_pipe@1, <<"."/utf8>>)
end,
Type_key_identifier} of
{<<""/utf8>>, none} ->
<<"Unknown"/utf8>>;
{_, none} ->
_pipe@2 = erlang:element(4, Error),
gleam@string:join(_pipe@2, <<"."/utf8>>);
{<<""/utf8>>, {some, Val}} ->
Val;
{_, _} ->
_pipe@3 = erlang:element(4, Error),
gleam@string:join(_pipe@3, <<"."/utf8>>)
end))/binary>>/binary,
")"/utf8>>
end
),
gleam@string:join(_pipe@4, <<", "/utf8>>).
-file("src/caffeine_lang/common/errors.gleam", 42).
?DOC(" Converts a JSON decode error directly to a string (for browser error messages).\n").
-spec format_json_decode_error_to_string(gleam@json:decode_error()) -> binary().
format_json_decode_error_to_string(Error) ->
case Error of
unexpected_end_of_input ->
<<"Unexpected end of input."/utf8>>;
{unexpected_byte, Val} ->
<<<<"Unexpected byte: "/utf8, Val/binary>>/binary, "."/utf8>>;
{unexpected_sequence, Val@1} ->
<<<<"Unexpected sequence: "/utf8, Val@1/binary>>/binary, "."/utf8>>;
{unable_to_decode, Suberrors} ->
<<"Incorrect types: "/utf8,
(begin
_pipe = Suberrors,
format_decode_error_message(_pipe, none)
end)/binary>>
end.
-file("src/caffeine_lang/common/errors.gleam", 35).
?DOC(
" Converts a JSON decode error into a CompilationError. Useful for leveraging the\n"
" custom errors we have per compilation phase vs. the lower level ones from\n"
" various libraries we leverage.\n"
).
-spec format_json_decode_error(gleam@json:decode_error()) -> compilation_error().
format_json_decode_error(Error) ->
Msg = format_json_decode_error_to_string(Error),
{parser_json_parser_error, Msg}.