Packages
oaspec
0.45.0
0.68.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.59.0
0.58.1
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.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.3
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.1.3
Generate Gleam code from OpenAPI 3.x specifications
Current section
Files
Jump to
Current section
Files
src/oaspec@internal@openapi@filter.erl
-module(oaspec@internal@openapi@filter).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/internal/openapi/filter.gleam").
-export([path_matches/2, apply/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/oaspec/internal/openapi/filter.gleam", 80).
?DOC(false).
-spec filter_op(
gleam@option:option(oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved())),
fun((oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved())) -> boolean())
) -> gleam@option:option(oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved())).
filter_op(Op, Keep) ->
case Op of
none ->
none;
{some, O} ->
case Keep(O) of
true ->
{some, O};
false ->
none
end
end.
-file("src/oaspec/internal/openapi/filter.gleam", 94).
?DOC(false).
-spec path_item_has_operations(
oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:resolved())
) -> boolean().
path_item_has_operations(Item) ->
((((((gleam@option:is_some(erlang:element(4, Item)) orelse gleam@option:is_some(
erlang:element(5, Item)
))
orelse gleam@option:is_some(erlang:element(6, Item)))
orelse gleam@option:is_some(erlang:element(7, Item)))
orelse gleam@option:is_some(erlang:element(8, Item)))
orelse gleam@option:is_some(erlang:element(9, Item)))
orelse gleam@option:is_some(erlang:element(10, Item)))
orelse gleam@option:is_some(erlang:element(11, Item)).
-file("src/oaspec/internal/openapi/filter.gleam", 124).
?DOC(false).
-spec tags_match(list(binary()), list(binary())) -> boolean().
tags_match(Op_tags, Include_tags) ->
gleam@list:any(Op_tags, fun(T) -> gleam@list:contains(Include_tags, T) end).
-file("src/oaspec/internal/openapi/filter.gleam", 132).
?DOC(false).
-spec path_matches(binary(), list(binary())) -> boolean().
path_matches(Path, Patterns) ->
gleam@list:any(
Patterns,
fun(Pattern) ->
case gleam_stdlib:string_ends_with(Pattern, <<"/**"/utf8>>) of
true ->
Prefix = gleam@string:drop_end(Pattern, 3),
gleam_stdlib:string_starts_with(
Path,
<<Prefix/binary, "/"/utf8>>
);
false ->
Path =:= Pattern
end
end
).
-file("src/oaspec/internal/openapi/filter.gleam", 105).
?DOC(false).
-spec keep_operation(
binary(),
oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()),
oaspec@config:include()
) -> boolean().
keep_operation(Path, Op, Include) ->
case {erlang:element(2, Include), erlang:element(3, Include)} of
{[], []} ->
true;
{[], _} ->
path_matches(Path, erlang:element(3, Include));
{_, []} ->
tags_match(erlang:element(5, Op), erlang:element(2, Include));
{_, _} ->
tags_match(erlang:element(5, Op), erlang:element(2, Include)) orelse path_matches(
Path,
erlang:element(3, Include)
)
end.
-file("src/oaspec/internal/openapi/filter.gleam", 61).
?DOC(false).
-spec filter_path_item(
binary(),
oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:resolved()),
oaspec@config:include()
) -> oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:resolved()).
filter_path_item(Path, Item, Include) ->
Keep = fun(Op) -> keep_operation(Path, Op, Include) end,
{path_item,
erlang:element(2, Item),
erlang:element(3, Item),
filter_op(erlang:element(4, Item), Keep),
filter_op(erlang:element(5, Item), Keep),
filter_op(erlang:element(6, Item), Keep),
filter_op(erlang:element(7, Item), Keep),
filter_op(erlang:element(8, Item), Keep),
filter_op(erlang:element(9, Item), Keep),
filter_op(erlang:element(10, Item), Keep),
filter_op(erlang:element(11, Item), Keep),
erlang:element(12, Item),
erlang:element(13, Item)}.
-file("src/oaspec/internal/openapi/filter.gleam", 36).
?DOC(false).
-spec filter_paths(
gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:resolved()))),
oaspec@config:include()
) -> gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:resolved()))).
filter_paths(Paths, Include) ->
_pipe = Paths,
_pipe@1 = maps:to_list(_pipe),
_pipe@2 = gleam@list:filter_map(
_pipe@1,
fun(Entry) ->
{Path, Ref_or_item} = Entry,
case Ref_or_item of
{value, Item} ->
Filtered_item = filter_path_item(Path, Item, Include),
case path_item_has_operations(Filtered_item) of
true ->
{ok, {Path, {value, Filtered_item}}};
false ->
{error, nil}
end;
{ref, _} ->
{ok, Entry}
end
end
),
maps:from_list(_pipe@2).
-file("src/oaspec/internal/openapi/filter.gleam", 27).
?DOC(false).
-spec apply(
oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:resolved()),
oaspec@config:include()
) -> oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:resolved()).
apply(Spec, Include) ->
gleam@bool:guard(
oaspec@config:include_is_empty(Include),
Spec,
fun() ->
New_paths = filter_paths(erlang:element(4, Spec), Include),
{open_api_spec,
erlang:element(2, Spec),
erlang:element(3, Spec),
New_paths,
erlang:element(5, Spec),
erlang:element(6, Spec),
erlang:element(7, Spec),
erlang:element(8, Spec),
erlang:element(9, Spec),
erlang:element(10, Spec),
erlang:element(11, Spec)}
end
).