Packages
oaspec
0.18.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@codegen@import_analysis.erl
-module(oaspec@codegen@import_analysis).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/codegen/import_analysis.gleam").
-export([operations_need_typed_schemas/1, operations_have_optional_params/1, operations_have_optional_body/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/codegen/import_analysis.gleam", 12).
?DOC(
" Check if any operation has parameters with Reference schemas,\n"
" or request body content with Reference/ObjectSchema/AllOfSchema.\n"
" This determines whether the generated module needs to import the types module.\n"
).
-spec operations_need_typed_schemas(
list({binary(),
oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved()),
binary(),
oaspec@openapi@spec:http_method()})
) -> boolean().
operations_need_typed_schemas(Operations) ->
gleam@list:any(
Operations,
fun(Op) ->
{_, Operation, _, _} = Op,
Has_ref_body = case erlang:element(7, Operation) of
{some, {value, Rb}} ->
gleam@list:any(
maps:to_list(erlang:element(3, Rb)),
fun(Ce) ->
{_, Mt} = Ce,
case erlang:element(2, Mt) of
{some, {reference, _, _}} ->
true;
{some,
{inline, {object_schema, _, _, _, _, _, _}}} ->
true;
{some, {inline, {all_of_schema, _, _}}} ->
true;
_ ->
false
end
end
);
_ ->
false
end,
Has_ref_params = gleam@list:any(
erlang:element(6, Operation),
fun(Ref_p) -> case Ref_p of
{value, P} ->
case erlang:element(6, P) of
{parameter_schema, {reference, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end end
),
Has_ref_body orelse Has_ref_params
end
).
-file("src/oaspec/codegen/import_analysis.gleam", 46).
?DOC(" Check if any operation has optional (non-required) parameters.\n").
-spec operations_have_optional_params(
list({binary(),
oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved()),
binary(),
oaspec@openapi@spec:http_method()})
) -> boolean().
operations_have_optional_params(Operations) ->
gleam@list:any(
Operations,
fun(Op) ->
{_, Operation, _, _} = Op,
gleam@list:any(
erlang:element(6, Operation),
fun(Ref_p) -> case Ref_p of
{value, P} ->
not erlang:element(5, P);
_ ->
false
end end
)
end
).
-file("src/oaspec/codegen/import_analysis.gleam", 61).
?DOC(" Check if any operation has an optional (non-required) request body.\n").
-spec operations_have_optional_body(
list({binary(),
oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved()),
binary(),
oaspec@openapi@spec:http_method()})
) -> boolean().
operations_have_optional_body(Operations) ->
gleam@list:any(
Operations,
fun(Op) ->
{_, Operation, _, _} = Op,
case erlang:element(7, Operation) of
{some, {value, Rb}} ->
not erlang:element(4, Rb);
_ ->
false
end
end
).