Packages
caffeine_lang
4.6.5
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@helpers.erl
-module(caffeine_lang@helpers).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/helpers.gleam").
-export([map_reference_to_referrer_over_collection/4, extract_path_prefix/1, extract_value/3, extract_threshold/1, extract_relations/1, extract_indicators/1, extract_tags/1, build_system_tag_pairs/7, extract_window_in_days/1]).
-export_type([value_tuple/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 value_tuple() :: {value_tuple,
binary(),
caffeine_lang@types:accepted_types(),
caffeine_lang@value:value()}.
-file("src/caffeine_lang/helpers.gleam", 24).
?DOC(false).
-spec map_reference_to_referrer_over_collection(
list(GVG),
list(GVI),
fun((GVG) -> binary()),
fun((GVI) -> binary())
) -> list({GVI, GVG}).
map_reference_to_referrer_over_collection(
References,
Referrers,
Reference_name,
Referrer_reference
) ->
_pipe = Referrers,
gleam@list:filter_map(_pipe, fun(Referrer) -> _pipe@1 = References,
_pipe@4 = gleam@list:find(
_pipe@1,
fun(Reference) ->
begin
_pipe@2 = Reference,
Reference_name(_pipe@2)
end
=:= begin
_pipe@3 = Referrer,
Referrer_reference(_pipe@3)
end
end
),
gleam@result:map(
_pipe@4,
fun(Reference@1) -> {Referrer, Reference@1} end
) end).
-file("src/caffeine_lang/helpers.gleam", 43).
?DOC(false).
-spec extract_path_prefix(binary()) -> {binary(), binary(), binary()}.
extract_path_prefix(Path) ->
case begin
_pipe = Path,
_pipe@1 = gleam@string:split(_pipe, <<"/"/utf8>>),
_pipe@2 = lists:reverse(_pipe@1),
_pipe@3 = gleam@list:take(_pipe@2, 3),
_pipe@4 = lists:reverse(_pipe@3),
gleam@list:map(
_pipe@4,
fun(Segment) ->
case gleam_stdlib:string_ends_with(
Segment,
<<".caffeine"/utf8>>
) of
true ->
gleam@string:drop_end(Segment, 9);
false ->
case gleam_stdlib:string_ends_with(
Segment,
<<".json"/utf8>>
) of
true ->
gleam@string:drop_end(Segment, 5);
false ->
Segment
end
end
end
)
end of
[Org, Team, Service] ->
{Org, Team, Service};
_ ->
{<<"unknown"/utf8>>, <<"unknown"/utf8>>, <<"unknown"/utf8>>}
end.
-file("src/caffeine_lang/helpers.gleam", 74).
?DOC(false).
-spec extract_value(
list(value_tuple()),
binary(),
fun((caffeine_lang@value:value()) -> {ok, GVM} | {error, nil})
) -> {ok, GVM} | {error, nil}.
extract_value(Values, Label, Extractor) ->
_pipe = Values,
_pipe@1 = gleam@list:find(
_pipe,
fun(Vt) -> erlang:element(2, Vt) =:= Label end
),
gleam@result:'try'(
_pipe@1,
fun(Vt@1) -> Extractor(erlang:element(4, Vt@1)) end
).
-file("src/caffeine_lang/helpers.gleam", 87).
?DOC(false).
-spec extract_threshold(list(value_tuple())) -> float().
extract_threshold(Values) ->
Threshold@1 = case extract_value(
Values,
<<"threshold"/utf8>>,
fun caffeine_lang@value:extract_percentage/1
) of
{ok, Threshold} -> Threshold;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"caffeine_lang/helpers"/utf8>>,
function => <<"extract_threshold"/utf8>>,
line => 88,
value => _assert_fail,
start => 2768,
'end' => 2859,
pattern_start => 2779,
pattern_end => 2792})
end,
Threshold@1.
-file("src/caffeine_lang/helpers.gleam", 96).
?DOC(false).
-spec extract_relations(list(value_tuple())) -> gleam@dict:dict(caffeine_lang@linker@artifacts:dependency_relation_type(), list(binary())).
extract_relations(Values) ->
_pipe = Values,
_pipe@1 = gleam@list:find(
_pipe,
fun(Vt) -> erlang:element(2, Vt) =:= <<"relations"/utf8>> end
),
_pipe@9 = gleam@result:'try'(
_pipe@1,
fun(Vt@1) -> case erlang:element(4, Vt@1) of
{dict_value, D} ->
_pipe@2 = D,
_pipe@3 = maps:to_list(_pipe@2),
_pipe@6 = gleam@list:try_map(
_pipe@3,
fun(Pair) -> case erlang:element(2, Pair) of
{list_value, Items} ->
_pipe@4 = Items,
_pipe@5 = gleam@list:try_map(
_pipe@4,
fun caffeine_lang@value:extract_string/1
),
gleam@result:map(
_pipe@5,
fun(Strings) ->
{erlang:element(1, Pair), Strings}
end
);
_ ->
{error, nil}
end end
),
gleam@result:map(_pipe@6, fun(Pairs) -> _pipe@7 = Pairs,
_pipe@8 = gleam@list:filter_map(
_pipe@7,
fun(Pair@1) ->
case caffeine_lang@linker@artifacts:parse_relation_type(
erlang:element(1, Pair@1)
) of
{ok, Rt} ->
{ok,
{Rt, erlang:element(2, Pair@1)}};
{error, nil} ->
{error, nil}
end
end
),
maps:from_list(_pipe@8) end);
_ ->
{error, nil}
end end
),
gleam@result:unwrap(_pipe@9, maps:new()).
-file("src/caffeine_lang/helpers.gleam", 144).
?DOC(false).
-spec extract_indicators(list(value_tuple())) -> gleam@dict:dict(binary(), binary()).
extract_indicators(Values) ->
_pipe = Values,
_pipe@1 = gleam@list:find(
_pipe,
fun(Vt) -> erlang:element(2, Vt) =:= <<"indicators"/utf8>> end
),
_pipe@2 = gleam@result:'try'(
_pipe@1,
fun(Vt@1) ->
caffeine_lang@value:extract_string_dict(erlang:element(4, Vt@1))
end
),
gleam@result:unwrap(_pipe@2, maps:new()).
-file("src/caffeine_lang/helpers.gleam", 153).
?DOC(false).
-spec extract_tags(list(value_tuple())) -> list({binary(), binary()}).
extract_tags(Values) ->
_pipe = Values,
_pipe@1 = gleam@list:find(
_pipe,
fun(Vt) -> erlang:element(2, Vt) =:= <<"tags"/utf8>> end
),
_pipe@2 = gleam@result:'try'(
_pipe@1,
fun(Vt@1) -> case erlang:element(4, Vt@1) of
nil_value ->
{ok, maps:new()};
{dict_value, _} ->
caffeine_lang@value:extract_string_dict(
erlang:element(4, Vt@1)
);
_ ->
{error, nil}
end end
),
_pipe@3 = gleam@result:unwrap(_pipe@2, maps:new()),
_pipe@4 = maps:to_list(_pipe@3),
gleam@list:sort(
_pipe@4,
fun(A, B) ->
gleam@string:compare(erlang:element(1, A), erlang:element(1, B))
end
).
-file("src/caffeine_lang/helpers.gleam", 170).
?DOC(
" Build system tag key-value pairs from IR metadata fields and artifact refs.\n"
" Returns a sorted, deterministic list of tag pairs shared across all generators.\n"
).
-spec build_system_tag_pairs(
caffeine_lang@identifiers:org_name(),
caffeine_lang@identifiers:team_name(),
caffeine_lang@identifiers:service_name(),
caffeine_lang@identifiers:blueprint_name(),
caffeine_lang@identifiers:expectation_label(),
list(caffeine_lang@linker@artifacts:artifact_type()),
gleam@dict:dict(binary(), list(binary()))
) -> list({binary(), binary()}).
build_system_tag_pairs(
Org_name,
Team_name,
Service_name,
Blueprint_name,
Friendly_label,
Artifact_refs,
Misc
) ->
_pipe = [{<<"managed_by"/utf8>>, <<"caffeine"/utf8>>},
{<<"caffeine_version"/utf8>>, <<"4.6.5"/utf8>>},
{<<"org"/utf8>>, erlang:element(2, Org_name)},
{<<"team"/utf8>>, erlang:element(2, Team_name)},
{<<"service"/utf8>>, erlang:element(2, Service_name)},
{<<"blueprint"/utf8>>, erlang:element(2, Blueprint_name)},
{<<"expectation"/utf8>>, erlang:element(2, Friendly_label)}],
_pipe@2 = lists:append(
_pipe,
begin
_pipe@1 = Artifact_refs,
gleam@list:map(
_pipe@1,
fun(Ref) ->
{<<"artifact"/utf8>>,
caffeine_lang@linker@artifacts:artifact_type_to_string(
Ref
)}
end
)
end
),
lists:append(
_pipe@2,
begin
_pipe@3 = Misc,
_pipe@4 = maps:to_list(_pipe@3),
_pipe@5 = gleam@list:sort(
_pipe@4,
fun(A, B) ->
gleam@string:compare(
erlang:element(1, A),
erlang:element(1, B)
)
end
),
gleam@list:flat_map(
_pipe@5,
fun(Pair) ->
{Key, Values} = Pair,
_pipe@6 = Values,
_pipe@7 = gleam@list:sort(
_pipe@6,
fun gleam@string:compare/2
),
gleam@list:map(_pipe@7, fun(Value) -> {Key, Value} end)
end
)
end
).
-file("src/caffeine_lang/helpers.gleam", 137).
?DOC(false).
-spec extract_window_in_days(list(value_tuple())) -> integer().
extract_window_in_days(Values) ->
_pipe = extract_value(
Values,
<<"window_in_days"/utf8>>,
fun caffeine_lang@value:extract_int/1
),
gleam@result:unwrap(_pipe, 30).