Packages
oaspec
0.58.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@reachability.erl
-module(oaspec@internal@openapi@reachability).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/internal/openapi/reachability.gleam").
-export([prune/1]).
-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/reachability.gleam", 156).
?DOC(false).
-spec refs_from_media_dict(
gleam@dict:dict(binary(), oaspec@internal@openapi@spec:media_type())
) -> list(oaspec@internal@openapi@schema:schema_ref()).
refs_from_media_dict(Content) ->
_pipe = maps:values(Content),
gleam@list:filter_map(
_pipe,
fun(Mt) -> gleam@option:to_result(erlang:element(2, Mt), nil) end
).
-file("src/oaspec/internal/openapi/reachability.gleam", 137).
?DOC(false).
-spec refs_from_parameter_ref(
oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()))
) -> list(oaspec@internal@openapi@schema:schema_ref()).
refs_from_parameter_ref(Pref) ->
case Pref of
{value, P} ->
case erlang:element(6, P) of
{parameter_schema, S} ->
[S];
{parameter_content, Content} ->
refs_from_media_dict(Content)
end;
{ref, _} ->
[]
end.
-file("src/oaspec/internal/openapi/reachability.gleam", 148).
?DOC(false).
-spec refs_from_response(
oaspec@internal@openapi@spec:response(oaspec@internal@openapi@spec:resolved())
) -> list(oaspec@internal@openapi@schema:schema_ref()).
refs_from_response(R) ->
Content_refs = refs_from_media_dict(erlang:element(3, R)),
Header_refs = begin
_pipe = maps:values(erlang:element(4, R)),
gleam@list:filter_map(
_pipe,
fun(H) -> gleam@option:to_result(erlang:element(4, H), nil) end
)
end,
lists:append([Content_refs, Header_refs]).
-file("src/oaspec/internal/openapi/reachability.gleam", 225).
?DOC(false).
-spec discriminator_mapping_refs(
gleam@option:option(oaspec@internal@openapi@schema:discriminator())
) -> list(oaspec@internal@openapi@schema:schema_ref()).
discriminator_mapping_refs(Discriminator) ->
case Discriminator of
{some, D} ->
_pipe = maps:values(erlang:element(3, D)),
gleam@list:map(
_pipe,
fun oaspec@internal@openapi@schema:make_reference/1
);
none ->
[]
end.
-file("src/oaspec/internal/openapi/reachability.gleam", 201).
?DOC(false).
-spec refs_from_schema_object(oaspec@internal@openapi@schema:schema_object()) -> list(oaspec@internal@openapi@schema:schema_ref()).
refs_from_schema_object(Schema) ->
case Schema of
{object_schema, _, Properties, _, Additional_properties, _, _} ->
Prop_refs = maps:values(Properties),
Ap_refs = case Additional_properties of
{typed, S} ->
[S];
forbidden ->
[];
untyped ->
[];
unspecified ->
[]
end,
lists:append([Prop_refs, Ap_refs]);
{array_schema, _, Items, _, _, _} ->
[Items];
{all_of_schema, _, Schemas} ->
Schemas;
{one_of_schema, _, Schemas@1, Discriminator} ->
lists:append([Schemas@1, discriminator_mapping_refs(Discriminator)]);
{any_of_schema, _, Schemas@2, Discriminator@1} ->
lists:append(
[Schemas@2, discriminator_mapping_refs(Discriminator@1)]
);
_ ->
[]
end.
-file("src/oaspec/internal/openapi/reachability.gleam", 164).
?DOC(false).
-spec walk(
list(oaspec@internal@openapi@schema:schema_ref()),
gleam@dict:dict(binary(), nil),
gleam@dict:dict(binary(), oaspec@internal@openapi@schema:schema_ref())
) -> gleam@dict:dict(binary(), nil).
walk(Worklist, Reached, Schemas) ->
case Worklist of
[] ->
Reached;
[Ref | Rest] ->
case Ref of
{reference, _, Name} ->
case gleam@dict:has_key(Reached, Name) of
true ->
walk(Rest, Reached, Schemas);
false ->
Reached@1 = gleam@dict:insert(Reached, Name, nil),
case gleam_stdlib:map_get(Schemas, Name) of
{ok, Target} ->
walk([Target | Rest], Reached@1, Schemas);
{error, nil} ->
walk(Rest, Reached@1, Schemas)
end
end;
{inline, Obj} ->
Children = refs_from_schema_object(Obj),
walk(lists:append(Children, Rest), Reached, Schemas)
end
end.
-file("src/oaspec/internal/openapi/reachability.gleam", 128).
?DOC(false).
-spec refs_from_callback_ref(
oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:callback(oaspec@internal@openapi@spec:resolved()))
) -> list(oaspec@internal@openapi@schema:schema_ref()).
refs_from_callback_ref(Cb_ref) ->
case Cb_ref of
{value, {callback, Entries}} ->
_pipe = maps:values(Entries),
gleam@list:flat_map(_pipe, fun refs_from_path_ref/1);
{ref, _} ->
[]
end.
-file("src/oaspec/internal/openapi/reachability.gleam", 82).
?DOC(false).
-spec refs_from_path_ref(
oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:resolved()))
) -> list(oaspec@internal@openapi@schema:schema_ref()).
refs_from_path_ref(Path_ref) ->
case Path_ref of
{value, Item} ->
refs_from_path_item(Item);
{ref, _} ->
[]
end.
-file("src/oaspec/internal/openapi/reachability.gleam", 89).
?DOC(false).
-spec refs_from_path_item(
oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:resolved())
) -> list(oaspec@internal@openapi@schema:schema_ref()).
refs_from_path_item(Item) ->
Path_param_refs = gleam@list:flat_map(
erlang:element(12, Item),
fun refs_from_parameter_ref/1
),
Op_refs = begin
_pipe = [erlang:element(4, Item),
erlang:element(5, Item),
erlang:element(6, Item),
erlang:element(7, Item),
erlang:element(8, Item),
erlang:element(9, Item),
erlang:element(10, Item),
erlang:element(11, Item)],
_pipe@1 = gleam@list:filter_map(
_pipe,
fun(_capture) -> gleam@option:to_result(_capture, nil) end
),
gleam@list:flat_map(_pipe@1, fun refs_from_operation/1)
end,
lists:append([Path_param_refs, Op_refs]).
-file("src/oaspec/internal/openapi/reachability.gleam", 107).
?DOC(false).
-spec refs_from_operation(
oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved())
) -> list(oaspec@internal@openapi@schema:schema_ref()).
refs_from_operation(Op) ->
Parameter_refs = gleam@list:flat_map(
erlang:element(6, Op),
fun refs_from_parameter_ref/1
),
Body_refs = case erlang:element(7, Op) of
{some, {value, Rb}} ->
refs_from_media_dict(erlang:element(3, Rb));
{some, {ref, _}} ->
[];
none ->
[]
end,
Response_refs = begin
_pipe = maps:values(erlang:element(8, Op)),
gleam@list:flat_map(_pipe, fun(Rr) -> case Rr of
{value, R} ->
refs_from_response(R);
{ref, _} ->
[]
end end)
end,
Callback_refs = begin
_pipe@1 = maps:values(erlang:element(11, Op)),
gleam@list:flat_map(_pipe@1, fun refs_from_callback_ref/1)
end,
lists:append([Parameter_refs, Body_refs, Response_refs, Callback_refs]).
-file("src/oaspec/internal/openapi/reachability.gleam", 72).
?DOC(false).
-spec collect_seed_refs(
oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:resolved())
) -> list(oaspec@internal@openapi@schema:schema_ref()).
collect_seed_refs(Spec) ->
Path_refs = begin
_pipe = maps:values(erlang:element(4, Spec)),
gleam@list:flat_map(_pipe, fun refs_from_path_ref/1)
end,
Webhook_refs = begin
_pipe@1 = maps:values(erlang:element(8, Spec)),
gleam@list:flat_map(_pipe@1, fun refs_from_path_ref/1)
end,
lists:append([Path_refs, Webhook_refs]).
-file("src/oaspec/internal/openapi/reachability.gleam", 50).
?DOC(false).
-spec prune(
oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:resolved())
) -> oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:resolved()).
prune(Spec) ->
case erlang:element(5, Spec) of
none ->
Spec;
{some, Components} ->
Seeds = collect_seed_refs(Spec),
Reached = walk(Seeds, maps:new(), erlang:element(2, Components)),
Pruned_schemas = begin
_pipe = erlang:element(2, Components),
_pipe@1 = maps:to_list(_pipe),
_pipe@2 = gleam@list:filter(
_pipe@1,
fun(Entry) ->
gleam@dict:has_key(Reached, erlang:element(1, Entry))
end
),
maps:from_list(_pipe@2)
end,
{open_api_spec,
erlang:element(2, Spec),
erlang:element(3, Spec),
erlang:element(4, Spec),
{some,
{components,
Pruned_schemas,
erlang:element(3, Components),
erlang:element(4, Components),
erlang:element(5, Components),
erlang:element(6, Components),
erlang:element(7, Components),
erlang:element(8, Components),
erlang:element(9, Components),
erlang:element(10, Components),
erlang:element(11, Components)}},
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.