Current section

Files

Jump to
oaspec src oaspec@codegen@operation_ir.erl
Raw

src/oaspec@codegen@operation_ir.erl

-module(oaspec@codegen@operation_ir).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/codegen/operation_ir.gleam").
-export([effective_explode/1, delimiter_for_style/1, is_deep_object_param/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.
-file("src/oaspec/codegen/operation_ir.gleam", 10).
?DOC(
" Compute the effective explode value for a parameter.\n"
" OpenAPI 3.x default: true for form/deepObject style, false otherwise.\n"
" When style is None (on a query parameter), the default is form → true.\n"
).
-spec effective_explode(
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved())
) -> boolean().
effective_explode(Param) ->
case erlang:element(8, Param) of
{some, V} ->
V;
none ->
case erlang:element(7, Param) of
{some, form_style} ->
true;
{some, deep_object_style} ->
true;
none ->
true;
_ ->
false
end
end.
-file("src/oaspec/codegen/operation_ir.gleam", 23).
?DOC(
" Return the delimiter character for a parameter style.\n"
" pipeDelimited → \"|\", spaceDelimited → \" \", all others → \",\"\n"
).
-spec delimiter_for_style(
gleam@option:option(oaspec@openapi@spec:parameter_style())
) -> binary().
delimiter_for_style(Style) ->
case Style of
{some, pipe_delimited_style} ->
<<"|"/utf8>>;
{some, space_delimited_style} ->
<<" "/utf8>>;
_ ->
<<","/utf8>>
end.
-file("src/oaspec/codegen/operation_ir.gleam", 33).
?DOC(
" Check if a parameter uses deepObject serialization.\n"
" True when: in=query, style=deepObject, and schema is an ObjectSchema.\n"
).
-spec is_deep_object_param(
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
is_deep_object_param(Param, Ctx) ->
case {erlang:element(3, Param),
erlang:element(7, Param),
oaspec@openapi@spec:parameter_schema(Param)} of
{in_query,
{some, deep_object_style},
{some, {reference, _, _} = Schema_ref}} ->
case oaspec@openapi@resolver:resolve_schema_ref(
Schema_ref,
oaspec@codegen@context:spec(Ctx)
) of
{ok, {object_schema, _, _, _, _, _, _}} ->
true;
_ ->
false
end;
{in_query,
{some, deep_object_style},
{some, {inline, {object_schema, _, _, _, _, _, _}}}} ->
true;
{_, _, _} ->
false
end.