Packages
oaspec
0.16.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@openapi@normalize.erl
-module(oaspec@openapi@normalize).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/openapi/normalize.gleam").
-export([normalize/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.
-file("src/oaspec/openapi/normalize.gleam", 233).
-spec make_typed_schema(binary(), oaspec@openapi@schema:schema_metadata()) -> oaspec@openapi@schema:schema_object().
make_typed_schema(Type_str, Metadata) ->
case Type_str of
<<"string"/utf8>> ->
{string_schema, Metadata, none, [], none, none, none};
<<"integer"/utf8>> ->
{integer_schema, Metadata, none, none, none, none, none, none};
<<"number"/utf8>> ->
{number_schema, Metadata, none, none, none, none, none, none};
<<"boolean"/utf8>> ->
{boolean_schema, Metadata};
_ ->
{object_schema, Metadata, maps:new(), [], forbidden, none, none}
end.
-file("src/oaspec/openapi/normalize.gleam", 134).
-spec normalize_callback(oaspec@openapi@spec:callback(OYF)) -> oaspec@openapi@spec:callback(OYF).
normalize_callback(Cb) ->
{callback,
gleam@dict:map_values(
erlang:element(2, Cb),
fun(_, Ref_or) -> normalize_ref_or_path_item(Ref_or) end
)}.
-file("src/oaspec/openapi/normalize.gleam", 39).
-spec normalize_ref_or_path_item(
oaspec@openapi@spec:ref_or(oaspec@openapi@spec:path_item(OXM))
) -> oaspec@openapi@spec:ref_or(oaspec@openapi@spec:path_item(OXM)).
normalize_ref_or_path_item(Ref_or) ->
case Ref_or of
{ref, R} ->
{ref, R};
{value, Item} ->
{value, normalize_path_item(Item)}
end.
-file("src/oaspec/openapi/normalize.gleam", 88).
-spec normalize_path_item(oaspec@openapi@spec:path_item(OXU)) -> oaspec@openapi@spec:path_item(OXU).
normalize_path_item(Item) ->
{path_item,
erlang:element(2, Item),
erlang:element(3, Item),
gleam@option:map(erlang:element(4, Item), fun normalize_operation/1),
gleam@option:map(erlang:element(5, Item), fun normalize_operation/1),
gleam@option:map(erlang:element(6, Item), fun normalize_operation/1),
gleam@option:map(erlang:element(7, Item), fun normalize_operation/1),
gleam@option:map(erlang:element(8, Item), fun normalize_operation/1),
gleam@option:map(erlang:element(9, Item), fun normalize_operation/1),
gleam@option:map(erlang:element(10, Item), fun normalize_operation/1),
gleam@option:map(erlang:element(11, Item), fun normalize_operation/1),
gleam@list:map(
erlang:element(12, Item),
fun normalize_ref_or_parameter/1
),
erlang:element(13, Item)}.
-file("src/oaspec/openapi/normalize.gleam", 112).
-spec normalize_operation(oaspec@openapi@spec:operation(OYC)) -> oaspec@openapi@spec:operation(OYC).
normalize_operation(Op) ->
{operation,
erlang:element(2, Op),
erlang:element(3, Op),
erlang:element(4, Op),
erlang:element(5, Op),
gleam@list:map(erlang:element(6, Op), fun normalize_ref_or_parameter/1),
gleam@option:map(erlang:element(7, Op), fun(Ref_or) -> case Ref_or of
{ref, R} ->
{ref, R};
{value, Rb} ->
{value, normalize_request_body(Rb)}
end end),
gleam@dict:map_values(
erlang:element(8, Op),
fun(_, Ref_or@1) -> case Ref_or@1 of
{ref, R@1} ->
{ref, R@1};
{value, R@2} ->
{value, normalize_response(R@2)}
end end
),
erlang:element(9, Op),
erlang:element(10, Op),
gleam@dict:map_values(
erlang:element(11, Op),
fun(_, Cb) -> normalize_callback(Cb) end
),
erlang:element(12, Op),
erlang:element(13, Op)}.
-file("src/oaspec/openapi/normalize.gleam", 277).
-spec normalize_schema_children(oaspec@openapi@schema:schema_object()) -> oaspec@openapi@schema:schema_object().
normalize_schema_children(S) ->
case S of
{object_schema,
Metadata,
Properties,
Required,
Additional_properties,
Min_properties,
Max_properties} ->
Properties@1 = gleam@dict:map_values(
Properties,
fun(_, V) -> normalize_schema_ref(V) end
),
Additional_properties@1 = case Additional_properties of
{typed, Sr} ->
{typed, normalize_schema_ref(Sr)};
Other ->
Other
end,
{object_schema,
Metadata,
Properties@1,
Required,
Additional_properties@1,
Min_properties,
Max_properties};
{array_schema, Metadata@1, Items, Min_items, Max_items, Unique_items} ->
{array_schema,
Metadata@1,
normalize_schema_ref(Items),
Min_items,
Max_items,
Unique_items};
{all_of_schema, Metadata@2, Schemas} ->
{all_of_schema,
Metadata@2,
gleam@list:map(Schemas, fun normalize_schema_ref/1)};
{one_of_schema, Metadata@3, Schemas@1, Discriminator} ->
{one_of_schema,
Metadata@3,
gleam@list:map(Schemas@1, fun normalize_schema_ref/1),
Discriminator};
{any_of_schema, Metadata@4, Schemas@2, Discriminator@1} ->
{any_of_schema,
Metadata@4,
gleam@list:map(Schemas@2, fun normalize_schema_ref/1),
Discriminator@1};
_ ->
S
end.
-file("src/oaspec/openapi/normalize.gleam", 176).
-spec normalize_schema_ref(oaspec@openapi@schema:schema_ref()) -> oaspec@openapi@schema:schema_ref().
normalize_schema_ref(Ref) ->
case Ref of
{inline, S} ->
{inline, normalize_schema(S)};
{reference, _, _} ->
Ref
end.
-file("src/oaspec/openapi/normalize.gleam", 183).
-spec normalize_schema(oaspec@openapi@schema:schema_object()) -> oaspec@openapi@schema:schema_object().
normalize_schema(Schema_obj) ->
Schema_obj@1 = case Schema_obj of
{string_schema, Meta, _, _, _, _, _} ->
case erlang:element(10, Meta) of
{some, {json_string, Str_val}} ->
{string_schema,
{schema_metadata,
erlang:element(2, Meta),
erlang:element(3, Meta),
erlang:element(4, Meta),
erlang:element(5, Meta),
erlang:element(6, Meta),
erlang:element(7, Meta),
erlang:element(8, Meta),
erlang:element(9, Meta),
none,
erlang:element(11, Meta),
erlang:element(12, Meta),
erlang:element(13, Meta),
erlang:element(14, Meta)},
erlang:element(3, Schema_obj),
[Str_val],
erlang:element(5, Schema_obj),
erlang:element(6, Schema_obj),
erlang:element(7, Schema_obj)};
_ ->
Schema_obj
end;
_ ->
Schema_obj
end,
Schema_obj@2 = case erlang:element(
11,
oaspec@openapi@schema:get_metadata(Schema_obj@1)
) of
{some, Types} ->
case erlang:length(Types) > 1 of
true ->
Meta@1 = oaspec@openapi@schema:get_metadata(Schema_obj@1),
Type_schemas = gleam@list:map(
Types,
fun(T) ->
{inline,
make_typed_schema(
T,
begin
_record = oaspec@openapi@schema:default_metadata(
),
{schema_metadata,
erlang:element(2, _record),
erlang:element(3, Meta@1),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record),
erlang:element(7, _record),
erlang:element(8, _record),
erlang:element(9, _record),
erlang:element(10, _record),
erlang:element(11, _record),
erlang:element(12, _record),
erlang:element(13, _record),
erlang:element(14, _record)}
end
)}
end
),
{one_of_schema,
{schema_metadata,
erlang:element(2, Meta@1),
erlang:element(3, Meta@1),
erlang:element(4, Meta@1),
erlang:element(5, Meta@1),
erlang:element(6, Meta@1),
erlang:element(7, Meta@1),
erlang:element(8, Meta@1),
erlang:element(9, Meta@1),
erlang:element(10, Meta@1),
none,
erlang:element(12, Meta@1),
erlang:element(13, Meta@1),
erlang:element(14, Meta@1)},
Type_schemas,
none};
false ->
Schema_obj@1
end;
none ->
Schema_obj@1
end,
normalize_schema_children(Schema_obj@2).
-file("src/oaspec/openapi/normalize.gleam", 168).
-spec normalize_header(oaspec@openapi@spec:header()) -> oaspec@openapi@spec:header().
normalize_header(H) ->
{header,
erlang:element(2, H),
erlang:element(3, H),
gleam@option:map(erlang:element(4, H), fun normalize_schema_ref/1)}.
-file("src/oaspec/openapi/normalize.gleam", 172).
-spec normalize_media_type(oaspec@openapi@spec:media_type()) -> oaspec@openapi@spec:media_type().
normalize_media_type(Mt) ->
{media_type,
gleam@option:map(erlang:element(2, Mt), fun normalize_schema_ref/1),
erlang:element(3, Mt),
erlang:element(4, Mt),
erlang:element(5, Mt)}.
-file("src/oaspec/openapi/normalize.gleam", 142).
-spec normalize_parameter(oaspec@openapi@spec:parameter(OYI)) -> oaspec@openapi@spec:parameter(OYI).
normalize_parameter(P) ->
Payload = case erlang:element(6, P) of
{parameter_schema, S} ->
{parameter_schema, normalize_schema_ref(S)};
{parameter_content, C} ->
{parameter_content,
gleam@dict:map_values(
C,
fun(_, Mt) -> normalize_media_type(Mt) end
)}
end,
{parameter,
erlang:element(2, P),
erlang:element(3, P),
erlang:element(4, P),
erlang:element(5, P),
Payload,
erlang:element(7, P),
erlang:element(8, P),
erlang:element(9, P),
erlang:element(10, P),
erlang:element(11, P)}.
-file("src/oaspec/openapi/normalize.gleam", 103).
-spec normalize_ref_or_parameter(
oaspec@openapi@spec:ref_or(oaspec@openapi@spec:parameter(OXX))
) -> oaspec@openapi@spec:ref_or(oaspec@openapi@spec:parameter(OXX)).
normalize_ref_or_parameter(Ref_or) ->
case Ref_or of
{ref, R} ->
{ref, R};
{value, P} ->
{value, normalize_parameter(P)}
end.
-file("src/oaspec/openapi/normalize.gleam", 153).
-spec normalize_request_body(oaspec@openapi@spec:request_body(OYL)) -> oaspec@openapi@spec:request_body(OYL).
normalize_request_body(Rb) ->
{request_body,
erlang:element(2, Rb),
gleam@dict:map_values(
erlang:element(3, Rb),
fun(_, Mt) -> normalize_media_type(Mt) end
),
erlang:element(4, Rb)}.
-file("src/oaspec/openapi/normalize.gleam", 160).
-spec normalize_response(oaspec@openapi@spec:response(OYO)) -> oaspec@openapi@spec:response(OYO).
normalize_response(R) ->
{response,
erlang:element(2, R),
gleam@dict:map_values(
erlang:element(3, R),
fun(_, Mt) -> normalize_media_type(Mt) end
),
gleam@dict:map_values(
erlang:element(4, R),
fun(_, H) -> normalize_header(H) end
),
erlang:element(5, R)}.
-file("src/oaspec/openapi/normalize.gleam", 48).
-spec normalize_components(oaspec@openapi@spec:components(OXR)) -> oaspec@openapi@spec:components(OXR).
normalize_components(C) ->
Schemas = gleam@dict:map_values(
erlang:element(2, C),
fun(_, V) -> normalize_schema_ref(V) end
),
Parameters = gleam@dict:map_values(
erlang:element(3, C),
fun(_, Entry) -> case Entry of
{value, P} ->
{value, normalize_parameter(P)};
{ref, R} ->
{ref, R}
end end
),
Request_bodies = gleam@dict:map_values(
erlang:element(4, C),
fun(_, Entry@1) -> case Entry@1 of
{value, Rb} ->
{value, normalize_request_body(Rb)};
{ref, R@1} ->
{ref, R@1}
end end
),
Responses = gleam@dict:map_values(
erlang:element(5, C),
fun(_, Entry@2) -> case Entry@2 of
{value, R@2} ->
{value, normalize_response(R@2)};
{ref, Ref} ->
{ref, Ref}
end end
),
Path_items = gleam@dict:map_values(
erlang:element(7, C),
fun(_, Entry@3) -> normalize_ref_or_path_item(Entry@3) end
),
Headers = gleam@dict:map_values(
erlang:element(8, C),
fun(_, H) -> normalize_header(H) end
),
{components,
Schemas,
Parameters,
Request_bodies,
Responses,
erlang:element(6, C),
Path_items,
Headers,
erlang:element(9, C),
erlang:element(10, C)}.
-file("src/oaspec/openapi/normalize.gleam", 23).
?DOC(
" Normalize an OpenApiSpec after parsing.\n"
" Converts OAS 3.1 patterns to 3.0-compatible representations:\n"
" - raw_type with multiple types becomes oneOf\n"
" - const_value becomes a single-value enum\n"
).
-spec normalize(oaspec@openapi@spec:open_api_spec(OXJ)) -> oaspec@openapi@spec:open_api_spec(OXJ).
normalize(Spec) ->
Components = case erlang:element(5, Spec) of
{some, C} ->
{some, normalize_components(C)};
none ->
none
end,
Paths = gleam@dict:map_values(
erlang:element(4, Spec),
fun(_, Ref_or) -> normalize_ref_or_path_item(Ref_or) end
),
Webhooks = gleam@dict:map_values(
erlang:element(8, Spec),
fun(_, Ref_or@1) -> normalize_ref_or_path_item(Ref_or@1) end
),
{open_api_spec,
erlang:element(2, Spec),
erlang:element(3, Spec),
Paths,
Components,
erlang:element(6, Spec),
erlang:element(7, Spec),
Webhooks,
erlang:element(9, Spec),
erlang:element(10, Spec),
erlang:element(11, Spec)}.