Packages
caffeine_lang
3.0.2
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@middle_end@semantic_analyzer.erl
-module(caffeine_lang@middle_end@semantic_analyzer).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/middle_end/semantic_analyzer.gleam").
-export([resolve_vendor/1, resolve_queries/1, resolve_intermediate_representations/1]).
-export_type([intermediate_representation/0, intermediate_representation_meta_data/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 intermediate_representation() :: {intermediate_representation,
intermediate_representation_meta_data(),
binary(),
list(binary()),
list(caffeine_lang@common@helpers:value_tuple()),
gleam@option:option(caffeine_lang@middle_end@vendor:vendor())}.
-type intermediate_representation_meta_data() :: {intermediate_representation_meta_data,
binary(),
binary(),
binary(),
binary(),
binary(),
gleam@dict:dict(binary(), binary())}.
-file("src/caffeine_lang/middle_end/semantic_analyzer.gleam", 54).
?DOC(false).
-spec resolve_vendor(intermediate_representation()) -> {ok,
intermediate_representation()} |
{error, caffeine_lang@common@errors:compilation_error()}.
resolve_vendor(Ir) ->
case begin
_pipe = erlang:element(5, Ir),
_pipe@1 = gleam@list:filter(
_pipe,
fun(Value) -> erlang:element(2, Value) =:= <<"vendor"/utf8>> end
),
gleam@list:first(_pipe@1)
end of
{error, _} ->
{error,
{semantic_analysis_vendor_resolution_error,
<<"No vendor input for: "/utf8,
(erlang:element(3, Ir))/binary>>}};
{ok, Vendor_value_tuple} ->
Vendor_string@1 = case gleam@dynamic@decode:run(
erlang:element(4, Vendor_value_tuple),
{decoder, fun gleam@dynamic@decode:decode_string/1}
) of
{ok, Vendor_string} -> Vendor_string;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"caffeine_lang/middle_end/semantic_analyzer"/utf8>>,
function => <<"resolve_vendor"/utf8>>,
line => 68,
value => _assert_fail,
start => 2208,
'end' => 2298,
pattern_start => 2219,
pattern_end => 2236})
end,
Vendor_value = caffeine_lang@middle_end@vendor:resolve_vendor(
Vendor_string@1
),
{ok,
{intermediate_representation,
erlang:element(2, Ir),
erlang:element(3, Ir),
erlang:element(4, Ir),
erlang:element(5, Ir),
{some, Vendor_value}}}
end.
-file("src/caffeine_lang/middle_end/semantic_analyzer.gleam", 79).
?DOC(false).
-spec resolve_queries(intermediate_representation()) -> {ok,
intermediate_representation()} |
{error, caffeine_lang@common@errors:compilation_error()}.
resolve_queries(Ir) ->
case erlang:element(6, Ir) of
{some, datadog} ->
Queries_value_tuple@1 = case begin
_pipe = erlang:element(5, Ir),
_pipe@1 = gleam@list:filter(
_pipe,
fun(Vt) -> erlang:element(2, Vt) =:= <<"queries"/utf8>> end
),
gleam@list:first(_pipe@1)
end of
{ok, Queries_value_tuple} -> Queries_value_tuple;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"caffeine_lang/middle_end/semantic_analyzer"/utf8>>,
function => <<"resolve_queries"/utf8>>,
line => 84,
value => _assert_fail,
start => 2707,
'end' => 2840,
pattern_start => 2718,
pattern_end => 2741})
end,
Queries_dict@1 = case gleam@dynamic@decode:run(
erlang:element(4, Queries_value_tuple@1),
gleam@dynamic@decode:dict(
{decoder, fun gleam@dynamic@decode:decode_string/1},
{decoder, fun gleam@dynamic@decode:decode_string/1}
)
) of
{ok, Queries_dict} -> Queries_dict;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"caffeine_lang/middle_end/semantic_analyzer"/utf8>>,
function => <<"resolve_queries"/utf8>>,
line => 89,
value => _assert_fail@1,
start => 2848,
'end' => 2997,
pattern_start => 2859,
pattern_end => 2875})
end,
gleam@result:'try'(
begin
_pipe@2 = Queries_dict@1,
_pipe@3 = maps:to_list(_pipe@2),
gleam@list:try_map(
_pipe@3,
fun(Pair) ->
{Key, Query} = Pair,
gleam@result:map(
caffeine_lang@middle_end@templatizer:parse_and_resolve_query_template(
Query,
erlang:element(5, Ir)
),
fun(Resolved) -> {Key, Resolved} end
)
end
)
end,
fun(Resolved_queries) ->
Resolved_queries_dynamic = begin
_pipe@4 = Resolved_queries,
_pipe@5 = gleam@list:map(
_pipe@4,
fun(Pair@1) ->
{Key@1, Value} = Pair@1,
{gleam_stdlib:identity(Key@1),
gleam_stdlib:identity(Value)}
end
),
gleam@dynamic:properties(_pipe@5)
end,
New_queries_value_tuple = {value_tuple,
<<"queries"/utf8>>,
{collection_type,
{dict,
{primitive_type, string},
{primitive_type, string}}},
Resolved_queries_dynamic},
Value_tuple_result = begin
_pipe@6 = erlang:element(5, Ir),
_pipe@7 = gleam@list:filter(
_pipe@6,
fun(Vt@1) ->
erlang:element(2, Vt@1) =:= <<"value"/utf8>>
end
),
gleam@list:first(_pipe@7)
end,
gleam@result:'try'(case Value_tuple_result of
{error, _} ->
{ok, none};
{ok, Value_tuple} ->
Value_string@1 = case gleam@dynamic@decode:run(
erlang:element(4, Value_tuple),
{decoder,
fun gleam@dynamic@decode:decode_string/1}
) of
{ok, Value_string} -> Value_string;
_assert_fail@2 ->
erlang:error(
#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"caffeine_lang/middle_end/semantic_analyzer"/utf8>>,
function => <<"resolve_queries"/utf8>>,
line => 137,
value => _assert_fail@2,
start => 4385,
'end' => 4471,
pattern_start => 4396,
pattern_end => 4412}
)
end,
case caffeine_lang@middle_end@templatizer:parse_and_resolve_query_template(
Value_string@1,
erlang:element(5, Ir)
) of
{ok, Resolved_value} ->
{ok,
{some,
{value_tuple,
<<"value"/utf8>>,
{primitive_type, string},
gleam_stdlib:identity(
Resolved_value
)}}};
{error, Err} ->
{error, Err}
end
end, fun(Resolved_value_tuple) ->
New_values = begin
_pipe@8 = erlang:element(5, Ir),
gleam@list:map(
_pipe@8,
fun(Vt@2) -> case erlang:element(2, Vt@2) of
<<"queries"/utf8>> ->
New_queries_value_tuple;
<<"value"/utf8>> ->
case Resolved_value_tuple of
{some, New_value} ->
New_value;
none ->
Vt@2
end;
_ ->
Vt@2
end end
)
end,
{ok,
{intermediate_representation,
erlang:element(2, Ir),
erlang:element(3, Ir),
erlang:element(4, Ir),
New_values,
erlang:element(6, Ir)}}
end)
end
);
_ ->
{error,
{semantic_analysis_template_resolution_error,
<<"No vendor for expectation: "/utf8,
(erlang:element(3, Ir))/binary>>}}
end.
-file("src/caffeine_lang/middle_end/semantic_analyzer.gleam", 42).
?DOC(false).
-spec resolve_intermediate_representations(list(intermediate_representation())) -> {ok,
list(intermediate_representation())} |
{error, caffeine_lang@common@errors:compilation_error()}.
resolve_intermediate_representations(Irs) ->
_pipe = Irs,
gleam@list:try_map(
_pipe,
fun(Ir) ->
gleam@result:'try'(
resolve_vendor(Ir),
fun(Ir_with_vendor) -> resolve_queries(Ir_with_vendor) end
)
end
).