Current section

Files

Jump to
oaspec src oaspec@internal@openapi@filter.erl
Raw

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@openapi@spec:operation(oaspec@openapi@spec:resolved())),
fun((oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved())) -> boolean())
) -> gleam@option:option(oaspec@openapi@spec:operation(oaspec@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@openapi@spec:path_item(oaspec@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@openapi@spec:operation(oaspec@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@openapi@spec:path_item(oaspec@openapi@spec:resolved()),
oaspec@config:include()
) -> oaspec@openapi@spec:path_item(oaspec@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@openapi@spec:ref_or(oaspec@openapi@spec:path_item(oaspec@openapi@spec:resolved()))),
oaspec@config:include()
) -> gleam@dict:dict(binary(), oaspec@openapi@spec:ref_or(oaspec@openapi@spec:path_item(oaspec@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@openapi@spec:open_api_spec(oaspec@openapi@spec:resolved()),
oaspec@config:include()
) -> oaspec@openapi@spec:open_api_spec(oaspec@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
).