Packages
caffeine_lang
4.4.1
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_lang@rich_error.erl
-module(caffeine_lang@rich_error).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/rich_error.gleam").
-export([error_code_to_string/1, error_message/1, error_code_for/1, from_compilation_error/1, from_compilation_errors/1]).
-export_type([rich_error/0, error_code/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 rich_error() :: {rich_error,
caffeine_lang@errors:compilation_error(),
error_code(),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(caffeine_lang@errors:source_location()),
gleam@option:option(binary())}.
-type error_code() :: {error_code, binary(), integer()}.
-file("src/caffeine_lang/rich_error.gleam", 28).
?DOC(" Converts an ErrorCode to its display string (e.g., \"E103\").\n").
-spec error_code_to_string(error_code()) -> binary().
error_code_to_string(Code) ->
S = erlang:integer_to_binary(erlang:element(3, Code)),
Padding = 3 - string:length(S),
case Padding > 0 of
true ->
<<<<"E"/utf8, (gleam@string:repeat(<<"0"/utf8>>, Padding))/binary>>/binary,
S/binary>>;
false ->
<<"E"/utf8, S/binary>>
end.
-file("src/caffeine_lang/rich_error.gleam", 83).
?DOC(
" Extracts the human-readable message from a CompilationError.\n"
" Delegates to errors.to_message for consistent behavior.\n"
).
-spec error_message(caffeine_lang@errors:compilation_error()) -> binary().
error_message(Error) ->
caffeine_lang@errors:to_message(Error).
-file("src/caffeine_lang/rich_error.gleam", 88).
?DOC(" Maps a vendor string to its codegen error code.\n").
-spec vendor_to_error_code(binary()) -> error_code().
vendor_to_error_code(Vendor) ->
case Vendor of
V when V =:= <<"datadog"/utf8>> ->
{error_code, <<"codegen"/utf8>>, 502};
V@1 when V@1 =:= <<"honeycomb"/utf8>> ->
{error_code, <<"codegen"/utf8>>, 503};
V@2 when V@2 =:= <<"dynatrace"/utf8>> ->
{error_code, <<"codegen"/utf8>>, 504};
V@3 when V@3 =:= <<"newrelic"/utf8>> ->
{error_code, <<"codegen"/utf8>>, 505};
_ ->
{error_code, <<"codegen"/utf8>>, 500}
end.
-file("src/caffeine_lang/rich_error.gleam", 38).
?DOC(" Assigns an error code based on the CompilationError variant.\n").
-spec error_code_for(caffeine_lang@errors:compilation_error()) -> error_code().
error_code_for(Error) ->
case Error of
{frontend_parse_error, _, _} ->
{error_code, <<"parse"/utf8>>, 100};
{frontend_validation_error, _, _} ->
{error_code, <<"validation"/utf8>>, 200};
{linker_value_validation_error, _, _} ->
{error_code, <<"linker"/utf8>>, 302};
{linker_duplicate_error, _, _} ->
{error_code, <<"linker"/utf8>>, 303};
{linker_parse_error, _, _} ->
{error_code, <<"linker"/utf8>>, 301};
{linker_vendor_resolution_error, _, _} ->
{error_code, <<"linker"/utf8>>, 304};
{semantic_analysis_template_parse_error, _, _} ->
{error_code, <<"semantic"/utf8>>, 402};
{semantic_analysis_template_resolution_error, _, _} ->
{error_code, <<"semantic"/utf8>>, 403};
{semantic_analysis_dependency_validation_error, _, _} ->
{error_code, <<"semantic"/utf8>>, 404};
{generator_slo_query_resolution_error, _, _} ->
{error_code, <<"codegen"/utf8>>, 501};
{generator_terraform_resolution_error, Vendor, _, _} ->
vendor_to_error_code(Vendor);
{c_q_l_resolver_error, _, _} ->
{error_code, <<"cql"/utf8>>, 601};
{c_q_l_parser_error, _, _} ->
{error_code, <<"cql"/utf8>>, 602};
{compilation_errors, _} ->
{error_code, <<"multiple"/utf8>>, 0}
end.
-file("src/caffeine_lang/rich_error.gleam", 61).
?DOC(" Creates a RichError, extracting context from the error's ErrorContext.\n").
-spec from_compilation_error(caffeine_lang@errors:compilation_error()) -> rich_error().
from_compilation_error(Error) ->
Ctx = caffeine_lang@errors:error_context(Error),
{rich_error,
Error,
error_code_for(Error),
erlang:element(3, Ctx),
erlang:element(4, Ctx),
erlang:element(5, Ctx),
erlang:element(6, Ctx)}.
-file("src/caffeine_lang/rich_error.gleam", 75).
?DOC(
" Flattens a CompilationError into a list of RichErrors.\n"
" Unwraps CompilationErrors into individual RichErrors.\n"
).
-spec from_compilation_errors(caffeine_lang@errors:compilation_error()) -> list(rich_error()).
from_compilation_errors(Error) ->
_pipe = Error,
_pipe@1 = caffeine_lang@errors:to_list(_pipe),
gleam@list:map(_pipe@1, fun from_compilation_error/1).