Packages
caffeine_lang
4.9.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_lang@codegen@graph_data.erl
-module(caffeine_lang@codegen@graph_data).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/codegen/graph_data.gleam").
-export([generate/1]).
-export_type([graph_node/0, graph_edge/0, graph_data/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 graph_node() :: {graph_node,
binary(),
binary(),
binary(),
binary(),
binary()}.
-type graph_edge() :: {graph_edge, binary(), binary(), binary()}.
-type graph_data() :: {graph_data, list(graph_node()), list(graph_edge())}.
-file("src/caffeine_lang/codegen/graph_data.gleam", 43).
?DOC(" Builds graph nodes from all IRs.\n").
-spec build_nodes(
list(caffeine_lang@linker@ir:intermediate_representation(caffeine_lang@linker@ir:resolved()))
) -> list(graph_node()).
build_nodes(Irs) ->
gleam@list:map(
Irs,
fun(Ir) ->
{graph_node,
caffeine_lang@linker@ir:ir_to_identifier(Ir),
erlang:element(2, erlang:element(2, erlang:element(2, Ir))),
erlang:element(2, erlang:element(4, erlang:element(2, Ir))),
erlang:element(2, erlang:element(3, erlang:element(2, Ir))),
erlang:element(2, erlang:element(6, erlang:element(2, Ir)))}
end
).
-file("src/caffeine_lang/codegen/graph_data.gleam", 58).
?DOC(" Builds graph edges from IRs that have DependencyRelations.\n").
-spec build_edges(
list(caffeine_lang@linker@ir:intermediate_representation(caffeine_lang@linker@ir:resolved()))
) -> list(graph_edge()).
build_edges(Irs) ->
_pipe = Irs,
_pipe@1 = gleam@list:filter(
_pipe,
fun(Ir) ->
gleam@list:contains(erlang:element(4, Ir), dependency_relations)
end
),
gleam@list:flat_map(
_pipe@1,
fun(Ir@1) ->
Source_id = caffeine_lang@linker@ir:ir_to_identifier(Ir@1),
case caffeine_lang@linker@ir:get_dependency_fields(
erlang:element(6, Ir@1)
) of
none ->
[];
{some, Dep} ->
Hard_edges = begin
_pipe@2 = gleam_stdlib:map_get(
erlang:element(2, Dep),
hard
),
_pipe@3 = gleam@result:unwrap(_pipe@2, []),
gleam@list:map(
_pipe@3,
fun(Target) ->
{graph_edge, Source_id, Target, <<"hard"/utf8>>}
end
)
end,
Soft_edges = begin
_pipe@4 = gleam_stdlib:map_get(
erlang:element(2, Dep),
soft
),
_pipe@5 = gleam@result:unwrap(_pipe@4, []),
gleam@list:map(
_pipe@5,
fun(Target@1) ->
{graph_edge,
Source_id,
Target@1,
<<"soft"/utf8>>}
end
)
end,
lists:append(Hard_edges, Soft_edges)
end
end
).
-file("src/caffeine_lang/codegen/graph_data.gleam", 36).
?DOC(
" Generates structured graph data from resolved IRs.\n"
" Nodes are derived from all IRs; edges come from DependencyRelations artifacts.\n"
).
-spec generate(
list(caffeine_lang@linker@ir:intermediate_representation(caffeine_lang@linker@ir:resolved()))
) -> graph_data().
generate(Irs) ->
Nodes = build_nodes(Irs),
Edges = build_edges(Irs),
{graph_data, Nodes, Edges}.