Packages
caffeine_lang
0.0.24
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/deps@cql@generator.erl
-module(deps@cql@generator).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/deps/cql/generator.gleam").
-export([operator_to_datadog_query/1, exp_to_string/1, generate_datadog_query/1]).
-file("src/deps/cql/generator.gleam", 79).
-spec get_leftmost_word(deps@cql@parser:exp()) -> gleam@option:option(binary()).
get_leftmost_word(Exp) ->
case Exp of
{primary, {primary_word, {word, W}}} ->
{some, W};
{primary, {primary_exp, Inner_exp}} ->
get_leftmost_word(Inner_exp);
{operator_expr, Left, _, _} ->
get_leftmost_word(Left)
end.
-file("src/deps/cql/generator.gleam", 88).
-spec all_divisions(deps@cql@parser:exp()) -> boolean().
all_divisions(Exp) ->
case Exp of
{primary, _} ->
true;
{operator_expr, Left, Right, 'div'} ->
all_divisions(Left) andalso all_divisions(Right);
_ ->
false
end.
-file("src/deps/cql/generator.gleam", 65).
-spec is_path_expression(deps@cql@parser:exp()) -> boolean().
is_path_expression(Exp) ->
case get_leftmost_word(Exp) of
{some, W} ->
case gleam_stdlib:string_ends_with(W, <<":"/utf8>>) of
true ->
all_divisions(Exp);
false ->
false
end;
none ->
false
end.
-file("src/deps/cql/generator.gleam", 142).
-spec operator_to_datadog_query(deps@cql@parser:operator()) -> binary().
operator_to_datadog_query(Operator) ->
case Operator of
add ->
<<"+"/utf8>>;
sub ->
<<"-"/utf8>>;
mul ->
<<"*"/utf8>>;
'div' ->
<<"/"/utf8>>
end.
-file("src/deps/cql/generator.gleam", 98).
-spec exp_to_string_no_spaces(deps@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/deps/cql/generator.gleam", 40).
-spec exp_to_string(deps@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/deps/cql/generator.gleam", 24).
-spec numerator_exp_to_datadog_query(deps@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/deps/cql/generator.gleam", 32).
-spec denominator_exp_to_datadog_query(deps@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/deps/cql/generator.gleam", 9).
-spec generate_datadog_query(deps@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/deps/cql/generator.gleam", 132).
-spec primary_to_string(
deps@cql@parser:primary(),
gleam@option:option(deps@cql@parser:operator())
) -> binary().
primary_to_string(Primary, _) ->
case Primary of
{primary_word, Word} ->
erlang:element(2, Word);
{primary_exp, Exp} ->
<<<<"("/utf8, (exp_to_string(Exp))/binary>>/binary, ")"/utf8>>
end.
-file("src/deps/cql/generator.gleam", 107).
-spec exp_to_string_with_context(
deps@cql@parser:exp(),
gleam@option:option(deps@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);
{_, _} ->
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.