Packages
caffeine_lang
0.0.21
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@cql@generator.erl
-module(caffeine_lang@cql@generator).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/cql/generator.gleam").
-export([operator_to_datadog_query/1, exp_to_string/1, generate_datadog_query/1]).
-file("src/caffeine_lang/cql/generator.gleam", 84).
-spec is_path_component(binary()) -> boolean().
is_path_component(S) ->
Has_complete_braces = gleam_stdlib:contains_string(S, <<"{"/utf8>>) andalso gleam_stdlib:contains_string(
S,
<<"}"/utf8>>
),
(not gleam_stdlib:contains_string(S, <<"_"/utf8>>) andalso not gleam_stdlib:contains_string(
S,
<<" "/utf8>>
))
andalso not Has_complete_braces.
-file("src/caffeine_lang/cql/generator.gleam", 69).
-spec is_path_expression_helper(caffeine_lang@cql@parser:exp(), boolean()) -> boolean().
is_path_expression_helper(Exp, Is_leftmost) ->
case Exp of
{primary, {primary_word, {word, W}}} ->
case Is_leftmost andalso gleam_stdlib:string_ends_with(
W,
<<":"/utf8>>
) of
true ->
true;
false ->
is_path_component(W)
end;
{operator_expr, Left, Right, 'div'} ->
is_path_expression_helper(Left, Is_leftmost) andalso is_path_expression_helper(
Right,
false
);
_ ->
false
end.
-file("src/caffeine_lang/cql/generator.gleam", 65).
-spec is_path_expression(caffeine_lang@cql@parser:exp()) -> boolean().
is_path_expression(Exp) ->
is_path_expression_helper(Exp, true).
-file("src/caffeine_lang/cql/generator.gleam", 160).
-spec operator_precedence(caffeine_lang@cql@parser:operator()) -> integer().
operator_precedence(Op) ->
case Op of
add ->
1;
sub ->
1;
mul ->
2;
'div' ->
2
end.
-file("src/caffeine_lang/cql/generator.gleam", 154).
-spec needs_parentheses(
caffeine_lang@cql@parser:operator(),
caffeine_lang@cql@parser:operator()
) -> boolean().
needs_parentheses(Inner_op, Parent_op) ->
Inner_prec = operator_precedence(Inner_op),
Parent_prec = operator_precedence(Parent_op),
Inner_prec < Parent_prec.
-file("src/caffeine_lang/cql/generator.gleam", 167).
-spec operator_to_datadog_query(caffeine_lang@cql@parser:operator()) -> binary().
operator_to_datadog_query(Operator) ->
case Operator of
add ->
<<"+"/utf8>>;
sub ->
<<"-"/utf8>>;
mul ->
<<"*"/utf8>>;
'div' ->
<<"/"/utf8>>
end.
-file("src/caffeine_lang/cql/generator.gleam", 101).
-spec exp_to_string_no_spaces(caffeine_lang@cql@parser:exp()) -> binary().
exp_to_string_no_spaces(Exp) ->
case Exp of
{primary, {primary_word, {word, W}}} ->
W;
{operator_expr, Left, Right, 'div'} ->
<<<<(exp_to_string_no_spaces(Left))/binary, "/"/utf8>>/binary,
(exp_to_string_no_spaces(Right))/binary>>;
_ ->
exp_to_string(Exp)
end.
-file("src/caffeine_lang/cql/generator.gleam", 41).
-spec exp_to_string(caffeine_lang@cql@parser:exp()) -> binary().
exp_to_string(Exp) ->
case Exp of
{primary, Primary} ->
primary_to_string(Primary, none);
{operator_expr, Numerator, Denominator, Operator} ->
case {Operator, is_path_expression(Exp)} of
{'div', true} ->
exp_to_string_no_spaces(Exp);
{_, _} ->
Left = exp_to_string_with_context(
Numerator,
{some, Operator},
true
),
Right = exp_to_string_with_context(
Denominator,
{some, Operator},
false
),
Op = operator_to_datadog_query(Operator),
<<<<<<<<Left/binary, " "/utf8>>/binary, Op/binary>>/binary,
" "/utf8>>/binary,
Right/binary>>
end
end.
-file("src/caffeine_lang/cql/generator.gleam", 25).
-spec numerator_exp_to_datadog_query(caffeine_lang@cql@parser:exp()) -> binary().
numerator_exp_to_datadog_query(Exp) ->
case Exp of
{primary, {primary_exp, Exp@1}} ->
exp_to_string(Exp@1);
_ ->
exp_to_string(Exp)
end.
-file("src/caffeine_lang/cql/generator.gleam", 33).
-spec denominator_exp_to_datadog_query(caffeine_lang@cql@parser:exp()) -> binary().
denominator_exp_to_datadog_query(Exp) ->
case Exp of
{primary, {primary_exp, Exp@1}} ->
exp_to_string(Exp@1);
_ ->
exp_to_string(Exp)
end.
-file("src/caffeine_lang/cql/generator.gleam", 10).
-spec generate_datadog_query(caffeine_lang@cql@resolver:primitives()) -> binary().
generate_datadog_query(Primitive) ->
case Primitive of
{good_over_total, Numerator, Denominator} ->
<<<<<<<<<<<<<<"query {\n"/utf8, " numerator = \""/utf8>>/binary,
(numerator_exp_to_datadog_query(Numerator))/binary>>/binary,
"\"\n"/utf8>>/binary,
" denominator = \""/utf8>>/binary,
(denominator_exp_to_datadog_query(Denominator))/binary>>/binary,
"\"\n"/utf8>>/binary,
" }\n"/utf8>>
end.
-file("src/caffeine_lang/cql/generator.gleam", 132).
-spec primary_to_string(
caffeine_lang@cql@parser:primary(),
gleam@option:option(caffeine_lang@cql@parser:operator())
) -> binary().
primary_to_string(Primary, Parent_op) ->
case Primary of
{primary_word, Word} ->
erlang:element(2, Word);
{primary_exp, Exp} ->
Needs_parens = case {Exp, Parent_op} of
{_, none} ->
false;
{{primary, _}, _} ->
false;
{{operator_expr, _, _, Inner_op}, {some, Parent}} ->
needs_parentheses(Inner_op, Parent)
end,
case Needs_parens of
true ->
<<<<"("/utf8, (exp_to_string(Exp))/binary>>/binary,
")"/utf8>>;
false ->
exp_to_string(Exp)
end
end.
-file("src/caffeine_lang/cql/generator.gleam", 110).
-spec exp_to_string_with_context(
caffeine_lang@cql@parser:exp(),
gleam@option:option(caffeine_lang@cql@parser:operator()),
boolean()
) -> binary().
exp_to_string_with_context(Exp, Parent_op, _) ->
case Exp of
{primary, Primary} ->
primary_to_string(Primary, Parent_op);
{operator_expr, Numerator, Denominator, Operator} ->
case {Operator, is_path_expression(Exp)} of
{'div', true} ->
exp_to_string_no_spaces(Exp);
{_, _} ->
<<<<<<<<(exp_to_string_with_context(
Numerator,
{some, Operator},
true
))/binary,
" "/utf8>>/binary,
(operator_to_datadog_query(Operator))/binary>>/binary,
" "/utf8>>/binary,
(exp_to_string_with_context(
Denominator,
{some, Operator},
false
))/binary>>
end
end.