Packages
caffeine_lang
3.0.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, comparator/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@parser:exp(),
caffeine_query_language@parser:exp()} |
{time_slice, comparator(), integer(), float(), binary()}.
-type comparator() :: less_than |
less_than_or_equal_to |
greater_than |
greater_than_or_equal_to.
-file("src/caffeine_query_language/resolver.gleam", 37).
?DOC(false).
-spec comparator_to_string(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", 47).
?DOC(" Converts a parser Comparator to a resolver Comparator.\n").
-spec convert_comparator(caffeine_query_language@parser:comparator()) -> comparator().
convert_comparator(Comp) ->
case Comp of
less_than ->
less_than;
less_than_or_equal_to ->
less_than_or_equal_to;
greater_than ->
greater_than;
greater_than_or_equal_to ->
greater_than_or_equal_to
end.
-file("src/caffeine_query_language/resolver.gleam", 92).
?DOC(" Checks if an expression contains a time_slice expression anywhere.\n").
-spec contains_time_slice(caffeine_query_language@parser:exp()) -> 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", 60).
?DOC(false).
-spec resolve_primitives(caffeine_query_language@parser:exp_container()) -> {ok,
primitives()} |
{error, caffeine_lang@common@errors:compilation_error()}.
resolve_primitives(Exp_container) ->
case Exp_container of
{exp_container, Exp} ->
case Exp of
{operator_expr, Left, Right, 'div'} ->
case contains_time_slice(Left) orelse contains_time_slice(
Right
) of
true ->
{error,
{c_q_l_resolver_error,
<<"time_slice cannot be used as an operand. It must be the entire expression."/utf8>>}};
false ->
{ok, {good_over_total, Left, Right}}
end;
{time_slice_expr, Spec} ->
{ok,
{time_slice,
convert_comparator(erlang:element(3, Spec)),
erlang:trunc(erlang:element(5, Spec)),
erlang:element(4, Spec),
erlang:element(2, Spec)}};
_ ->
{error,
{c_q_l_resolver_error,
<<"Invalid expression. Expected a top level division operator or time_slice."/utf8>>}}
end
end.