Packages
caffeine_lang
3.0.6
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@parser@artifacts.erl
-module(caffeine_lang@parser@artifacts).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/parser/artifacts.gleam").
-export([artifact_type_to_string/1, parse_standard_library/0, parse_from_json_file/1]).
-export_type([artifact/0, artifact_type/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 artifact() :: {artifact,
artifact_type(),
gleam@dict:dict(binary(), caffeine_lang@common@accepted_types:accepted_types())}.
-type artifact_type() :: s_l_o | dependency_relations.
-file("src/caffeine_lang/parser/artifacts.gleam", 41).
?DOC(false).
-spec artifact_type_to_string(artifact_type()) -> binary().
artifact_type_to_string(Type_) ->
case Type_ of
s_l_o ->
<<"SLO"/utf8>>;
dependency_relations ->
<<"DependencyRelations"/utf8>>
end.
-file("src/caffeine_lang/parser/artifacts.gleam", 49).
?DOC(" Decoder for ArtifactType from a string.\n").
-spec artifact_type_decoder() -> gleam@dynamic@decode:decoder(artifact_type()).
artifact_type_decoder() ->
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Type_string) -> case Type_string of
<<"SLO"/utf8>> ->
gleam@dynamic@decode:success(s_l_o);
<<"DependencyRelations"/utf8>> ->
gleam@dynamic@decode:success(dependency_relations);
_ ->
gleam@dynamic@decode:failure(
s_l_o,
<<"SLO or DependencyRelations"/utf8>>
)
end end
).
-file("src/caffeine_lang/parser/artifacts.gleam", 76).
-spec parse_from_json_string(binary()) -> {ok, list(artifact())} |
{error, gleam@json:decode_error()}.
parse_from_json_string(Json_string) ->
Artifact_decoder = begin
gleam@dynamic@decode:field(
<<"type_"/utf8>>,
artifact_type_decoder(),
fun(Type_) ->
gleam@dynamic@decode:field(
<<"params"/utf8>>,
gleam@dynamic@decode:dict(
{decoder, fun gleam@dynamic@decode:decode_string/1},
caffeine_lang@common@decoders:accepted_types_decoder()
),
fun(Params) ->
gleam@dynamic@decode:success({artifact, Type_, Params})
end
)
end
)
end,
Artifacts_decoded = begin
gleam@dynamic@decode:field(
<<"artifacts"/utf8>>,
gleam@dynamic@decode:list(Artifact_decoder),
fun(Artifacts) -> gleam@dynamic@decode:success(Artifacts) end
)
end,
gleam@json:parse(Json_string, Artifacts_decoded).
-file("src/caffeine_lang/parser/artifacts.gleam", 59).
?DOC(" The actual, common parsing logic.\n").
-spec internal_parse_from_json_string(binary()) -> {ok, list(artifact())} |
{error, caffeine_lang@common@errors:compilation_error()}.
internal_parse_from_json_string(Content) ->
gleam@result:'try'(case parse_from_json_string(Content) of
{ok, Artifacts} ->
{ok, Artifacts};
{error, Err} ->
{error,
caffeine_lang@common@errors:format_json_decode_error(Err)}
end, fun(Artifacts@1) ->
gleam@result:'try'(
caffeine_lang@common@validations:validate_relevant_uniqueness(
Artifacts@1,
fun(A) -> _pipe = erlang:element(2, A),
artifact_type_to_string(_pipe) end,
<<"artifact names"/utf8>>
),
fun(_) -> {ok, Artifacts@1} end
)
end).
-file("src/caffeine_lang/parser/artifacts.gleam", 25).
?DOC(false).
-spec parse_standard_library() -> {ok, list(artifact())} |
{error, caffeine_lang@common@errors:compilation_error()}.
parse_standard_library() ->
internal_parse_from_json_string(
<<"
{
\"artifacts\": [
{
\"type_\": \"SLO\",
\"params\": { \"threshold\": \"Float { x | x in ( 0.0..100.0 ) }\", \"window_in_days\": \"Defaulted(Integer, 30) { x | x in { 7, 30, 90 } }\", \"queries\": \"Dict(String, String)\", \"value\": \"String\", \"vendor\": \"String { x | x in { datadog } }\" }
},
{
\"type_\": \"DependencyRelations\",
\"params\": { \"relations\": \"Dict(String { x | x in { soft, hard } }, List(String))\" }
}
]
}
"/utf8>>
).
-file("src/caffeine_lang/parser/artifacts.gleam", 31).
?DOC(false).
-spec parse_from_json_file(binary()) -> {ok, list(artifact())} |
{error, caffeine_lang@common@errors:compilation_error()}.
parse_from_json_file(File_path) ->
gleam@result:'try'(
caffeine_lang@common@helpers:json_from_file(File_path),
fun(Json_string) -> internal_parse_from_json_string(Json_string) end
).