Packages
caffeine_lang
3.0.1
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@frontend@validator.erl
-module(caffeine_lang@frontend@validator).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/frontend/validator.gleam").
-export([validate_blueprints_file/1, validate_expects_file/1]).
-export_type([validator_error/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 validator_error() :: {duplicate_extendable, binary()} |
{undefined_extendable, binary(), binary()} |
{duplicate_extends_reference, binary(), binary()} |
{invalid_extendable_kind, binary(), binary(), binary()}.
-file("src/caffeine_lang/frontend/validator.gleam", 62).
-spec validate_no_duplicate_extendables_loop(
list(caffeine_lang@frontend@ast:extendable()),
gleam@set:set(binary())
) -> {ok, nil} | {error, validator_error()}.
validate_no_duplicate_extendables_loop(Extendables, Seen) ->
case Extendables of
[] ->
{ok, nil};
[First | Rest] ->
case gleam@set:contains(Seen, erlang:element(2, First)) of
true ->
{error, {duplicate_extendable, erlang:element(2, First)}};
false ->
validate_no_duplicate_extendables_loop(
Rest,
gleam@set:insert(Seen, erlang:element(2, First))
)
end
end.
-file("src/caffeine_lang/frontend/validator.gleam", 56).
?DOC(" Validates that no two extendables have the same name.\n").
-spec validate_no_duplicate_extendables(
list(caffeine_lang@frontend@ast:extendable())
) -> {ok, nil} | {error, validator_error()}.
validate_no_duplicate_extendables(Extendables) ->
validate_no_duplicate_extendables_loop(Extendables, gleam@set:new()).
-file("src/caffeine_lang/frontend/validator.gleam", 82).
?DOC(" Validates that all extendables in an expects file are Provides kind.\n").
-spec validate_extendables_are_provides(
list(caffeine_lang@frontend@ast:extendable())
) -> {ok, nil} | {error, validator_error()}.
validate_extendables_are_provides(Extendables) ->
case Extendables of
[] ->
{ok, nil};
[First | Rest] ->
case erlang:element(3, First) of
extendable_provides ->
validate_extendables_are_provides(Rest);
extendable_requires ->
{error,
{invalid_extendable_kind,
erlang:element(2, First),
<<"Provides"/utf8>>,
<<"Requires"/utf8>>}}
end
end.
-file("src/caffeine_lang/frontend/validator.gleam", 142).
?DOC(" Validates that all names in extends list exist as extendables.\n").
-spec validate_extends_exist(list(binary()), binary(), gleam@set:set(binary())) -> {ok,
nil} |
{error, validator_error()}.
validate_extends_exist(Extends, Item_name, Extendable_names) ->
case Extends of
[] ->
{ok, nil};
[First | Rest] ->
case gleam@set:contains(Extendable_names, First) of
true ->
validate_extends_exist(Rest, Item_name, Extendable_names);
false ->
{error, {undefined_extendable, First, Item_name}}
end
end.
-file("src/caffeine_lang/frontend/validator.gleam", 167).
-spec validate_no_duplicate_extends_loop(
list(binary()),
binary(),
gleam@set:set(binary())
) -> {ok, nil} | {error, validator_error()}.
validate_no_duplicate_extends_loop(Extends, Item_name, Seen) ->
case Extends of
[] ->
{ok, nil};
[First | Rest] ->
case gleam@set:contains(Seen, First) of
true ->
{error, {duplicate_extends_reference, First, Item_name}};
false ->
validate_no_duplicate_extends_loop(
Rest,
Item_name,
gleam@set:insert(Seen, First)
)
end
end.
-file("src/caffeine_lang/frontend/validator.gleam", 160).
?DOC(" Validates that no extendable is referenced twice in the same extends list.\n").
-spec validate_no_duplicate_extends(list(binary()), binary()) -> {ok, nil} |
{error, validator_error()}.
validate_no_duplicate_extends(Extends, Item_name) ->
validate_no_duplicate_extends_loop(Extends, Item_name, gleam@set:new()).
-file("src/caffeine_lang/frontend/validator.gleam", 102).
?DOC(" Validates extends references for blueprint items.\n").
-spec validate_blueprint_items_extends(
list(caffeine_lang@frontend@ast:blueprint_item()),
list(caffeine_lang@frontend@ast:extendable())
) -> {ok, nil} | {error, validator_error()}.
validate_blueprint_items_extends(Items, Extendables) ->
Extendable_names = begin
_pipe = Extendables,
_pipe@1 = gleam@list:map(_pipe, fun(E) -> erlang:element(2, E) end),
gleam@set:from_list(_pipe@1)
end,
gleam@list:try_each(
Items,
fun(Item) ->
gleam@result:'try'(
validate_extends_exist(
erlang:element(3, Item),
erlang:element(2, Item),
Extendable_names
),
fun(_) ->
validate_no_duplicate_extends(
erlang:element(3, Item),
erlang:element(2, Item)
)
end
)
end
).
-file("src/caffeine_lang/frontend/validator.gleam", 22).
?DOC(false).
-spec validate_blueprints_file(caffeine_lang@frontend@ast:blueprints_file()) -> {ok,
caffeine_lang@frontend@ast:blueprints_file()} |
{error, validator_error()}.
validate_blueprints_file(File) ->
Extendables = erlang:element(2, File),
Items = begin
_pipe = erlang:element(3, File),
gleam@list:flat_map(_pipe, fun(Block) -> erlang:element(3, Block) end)
end,
gleam@result:'try'(
validate_no_duplicate_extendables(Extendables),
fun(_) ->
gleam@result:'try'(
validate_blueprint_items_extends(Items, Extendables),
fun(_) -> {ok, File} end
)
end
).
-file("src/caffeine_lang/frontend/validator.gleam", 122).
?DOC(" Validates extends references for expect items.\n").
-spec validate_expect_items_extends(
list(caffeine_lang@frontend@ast:expect_item()),
list(caffeine_lang@frontend@ast:extendable())
) -> {ok, nil} | {error, validator_error()}.
validate_expect_items_extends(Items, Extendables) ->
Extendable_names = begin
_pipe = Extendables,
_pipe@1 = gleam@list:map(_pipe, fun(E) -> erlang:element(2, E) end),
gleam@set:from_list(_pipe@1)
end,
gleam@list:try_each(
Items,
fun(Item) ->
gleam@result:'try'(
validate_extends_exist(
erlang:element(3, Item),
erlang:element(2, Item),
Extendable_names
),
fun(_) ->
validate_no_duplicate_extends(
erlang:element(3, Item),
erlang:element(2, Item)
)
end
)
end
).
-file("src/caffeine_lang/frontend/validator.gleam", 40).
?DOC(false).
-spec validate_expects_file(caffeine_lang@frontend@ast:expects_file()) -> {ok,
caffeine_lang@frontend@ast:expects_file()} |
{error, validator_error()}.
validate_expects_file(File) ->
Extendables = erlang:element(2, File),
Items = begin
_pipe = erlang:element(3, File),
gleam@list:flat_map(_pipe, fun(Block) -> erlang:element(3, Block) end)
end,
gleam@result:'try'(
validate_no_duplicate_extendables(Extendables),
fun(_) ->
gleam@result:'try'(
validate_extendables_are_provides(Extendables),
fun(_) ->
gleam@result:'try'(
validate_expect_items_extends(Items, Extendables),
fun(_) -> {ok, File} end
)
end
)
end
).