Packages
caffeine_lang
5.3.0
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_query_language@resolver.erl
-module(caffeine_query_language@resolver).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_query_language/resolver.gleam").
-export([comparator_to_string/1, resolve_primitives/1]).
-export_type([primitives/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 primitives() :: {good_over_total,
caffeine_query_language@ast:exp(caffeine_query_language@ast:cql_parsed()),
caffeine_query_language@ast:exp(caffeine_query_language@ast:cql_parsed())} |
{time_slice,
caffeine_query_language@ast:comparator(),
integer(),
float(),
binary()}.
-file("src/caffeine_query_language/resolver.gleam", 23).
?DOC(false).
-spec comparator_to_string(caffeine_query_language@ast:comparator()) -> binary().
comparator_to_string(Comparator) ->
case Comparator of
less_than ->
<<"\"<\""/utf8>>;
less_than_or_equal_to ->
<<"\"<=\""/utf8>>;
greater_than ->
<<"\">\""/utf8>>;
greater_than_or_equal_to ->
<<"\">=\""/utf8>>
end.
-file("src/caffeine_query_language/resolver.gleam", 65).
?DOC(" Checks if an expression contains a time_slice expression anywhere.\n").
-spec contains_time_slice(caffeine_query_language@ast:exp(any())) -> boolean().
contains_time_slice(Exp) ->
case Exp of
{time_slice_expr, _} ->
true;
{operator_expr, Left, Right, _} ->
contains_time_slice(Left) orelse contains_time_slice(Right);
{primary, {primary_exp, Inner}} ->
contains_time_slice(Inner);
{primary, {primary_word, _}} ->
false
end.
-file("src/caffeine_query_language/resolver.gleam", 36).
?DOC(false).
-spec resolve_primitives(
caffeine_query_language@ast:exp(caffeine_query_language@ast:cql_parsed())
) -> {ok, primitives()} | {error, caffeine_lang@errors:compilation_error()}.
resolve_primitives(Exp) ->
case Exp of
{operator_expr, Left, Right, 'div'} ->
gleam@bool:guard(
contains_time_slice(Left) orelse contains_time_slice(Right),
{error,
caffeine_lang@errors:cql_resolver_error(
<<"time_slice cannot be used as an operand. It must be the entire expression."/utf8>>
)},
fun() -> {ok, {good_over_total, Left, Right}} end
);
{time_slice_expr, Spec} ->
{ok,
{time_slice,
erlang:element(3, Spec),
erlang:trunc(erlang:element(5, Spec)),
erlang:element(4, Spec),
erlang:element(2, Spec)}};
_ ->
{error,
caffeine_lang@errors:cql_resolver_error(
<<"Invalid expression. Expected a top level division operator or time_slice."/utf8>>
)}
end.