Packages
oaspec
0.9.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@server_request_decode.erl
-module(oaspec@codegen@server_request_decode).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/codegen/server_request_decode.gleam").
-export([body_field_kind_needs_int/1, body_field_kind_needs_float/1, is_deep_object_param/2, deep_object_param_has_optional_fields/2, request_body_uses_form_urlencoded/1, request_body_uses_multipart/1, operation_uses_form_urlencoded_body/1, operation_uses_multipart_body/1, object_properties_from_schema_ref/2, form_urlencoded_body_has_nested_object/2, multipart_body_has_optional_fields/2, form_urlencoded_body_has_optional_fields/2, query_schema_needs_string/1, deep_object_param_needs_string/2, form_urlencoded_body_needs_string/2, query_schema_needs_int/1, deep_object_param_needs_int/2, query_schema_needs_float/1, deep_object_param_needs_float/2, param_parse_expr/2, query_required_expr_with_schema/3, query_required_expr/2, query_optional_expr_with_schema/3, query_optional_expr/2, deep_object_required_expr/4, deep_object_optional_expr/4, header_required_expr/2, header_optional_expr/2, cookie_required_expr/2, cookie_optional_expr/2, form_urlencoded_body_constructor_expr/3, body_field_kind/2, schema_ref_body_field_kind/2, multipart_body_needs_int/2, multipart_body_needs_float/2, form_urlencoded_body_needs_int/2, form_urlencoded_body_needs_float/2, multipart_body_constructor_expr/3, generate_body_decode_expr/3]).
-export_type([deep_object_property/0, body_field_kind/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type deep_object_property() :: {deep_object_property,
binary(),
binary(),
oaspec@openapi@schema:schema_ref(),
boolean()}.
-type body_field_kind() :: body_field_unknown |
body_field_string |
body_field_int |
body_field_float |
body_field_bool |
body_field_string_array |
body_field_int_array |
body_field_float_array |
body_field_bool_array.
-file("src/oaspec/codegen/server_request_decode.gleam", 88).
-spec body_field_kind_needs_int(body_field_kind()) -> boolean().
body_field_kind_needs_int(Kind) ->
case Kind of
body_field_int ->
true;
body_field_int_array ->
true;
_ ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 95).
-spec body_field_kind_needs_float(body_field_kind()) -> boolean().
body_field_kind_needs_float(Kind) ->
case Kind of
body_field_float ->
true;
body_field_float_array ->
true;
_ ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 294).
-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,
erlang:element(2, Ctx)
) of
{ok, {object_schema, _, _, _, _, _, _}} ->
true;
_ ->
false
end;
{in_query,
{some, deep_object_style},
{some, {inline, {object_schema, _, _, _, _, _, _}}}} ->
true;
{_, _, _} ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 310).
-spec deep_object_properties(
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> list(deep_object_property()).
deep_object_properties(Param, Ctx) ->
Details = case oaspec@openapi@spec:parameter_schema(Param) of
{some, {reference, _, _} = Schema_ref} ->
case oaspec@openapi@resolver:resolve_schema_ref(
Schema_ref,
erlang:element(2, Ctx)
) of
{ok, {object_schema, _, Properties, Required, _, _, _}} ->
{Properties, Required};
_ ->
{maps:new(), []}
end;
{some, {inline, {object_schema, _, Properties@1, Required@1, _, _, _}}} ->
{Properties@1, Required@1};
_ ->
{maps:new(), []}
end,
{Properties@2, Required_fields} = Details,
_pipe = maps:to_list(Properties@2),
gleam@list:map(
_pipe,
fun(Entry) ->
{Prop_name, Prop_ref} = Entry,
{deep_object_property,
Prop_name,
oaspec@util@naming:to_snake_case(Prop_name),
Prop_ref,
gleam@list:contains(Required_fields, Prop_name)}
end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 339).
-spec deep_object_type_name(
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
binary()
) -> binary().
deep_object_type_name(Param, Op_id) ->
case oaspec@openapi@spec:parameter_schema(Param) of
{some, {reference, _, Name}} ->
<<"types."/utf8,
(oaspec@util@naming:schema_to_type_name(Name))/binary>>;
_ ->
<<<<<<"types."/utf8,
(oaspec@util@naming:schema_to_type_name(Op_id))/binary>>/binary,
"Param"/utf8>>/binary,
(oaspec@util@naming:to_pascal_case(erlang:element(2, Param)))/binary>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 412).
-spec deep_object_param_has_optional_fields(
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
deep_object_param_has_optional_fields(Param, Ctx) ->
case is_deep_object_param(Param, Ctx) of
true ->
gleam@list:any(
deep_object_properties(Param, Ctx),
fun(Prop) -> not erlang:element(5, Prop) end
);
false ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 462).
-spec request_body_uses_form_urlencoded(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved())
) -> boolean().
request_body_uses_form_urlencoded(Rb) ->
gleam@dict:has_key(
erlang:element(3, Rb),
<<"application/x-www-form-urlencoded"/utf8>>
).
-file("src/oaspec/codegen/server_request_decode.gleam", 466).
-spec request_body_uses_multipart(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved())
) -> boolean().
request_body_uses_multipart(Rb) ->
gleam@dict:has_key(erlang:element(3, Rb), <<"multipart/form-data"/utf8>>).
-file("src/oaspec/codegen/server_request_decode.gleam", 470).
-spec operation_uses_form_urlencoded_body(
oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved())
) -> boolean().
operation_uses_form_urlencoded_body(Operation) ->
case erlang:element(7, Operation) of
{some, {value, Rb}} ->
request_body_uses_form_urlencoded(Rb);
_ ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 479).
-spec operation_uses_multipart_body(
oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved())
) -> boolean().
operation_uses_multipart_body(Operation) ->
case erlang:element(7, Operation) of
{some, {value, Rb}} ->
request_body_uses_multipart(Rb);
_ ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 488).
-spec object_properties_from_schema_ref(
oaspec@openapi@schema:schema_ref(),
oaspec@codegen@context:context()
) -> list(deep_object_property()).
object_properties_from_schema_ref(Schema_ref, Ctx) ->
Details = case Schema_ref of
{reference, _, _} = Schema_ref@1 ->
case oaspec@openapi@resolver:resolve_schema_ref(
Schema_ref@1,
erlang:element(2, Ctx)
) of
{ok, {object_schema, _, Properties, Required, _, _, _}} ->
{Properties, Required};
_ ->
{maps:new(), []}
end;
{inline, {object_schema, _, Properties@1, Required@1, _, _, _}} ->
{Properties@1, Required@1};
_ ->
{maps:new(), []}
end,
{Properties@2, Required_fields} = Details,
_pipe = maps:to_list(Properties@2),
gleam@list:map(
_pipe,
fun(Entry) ->
{Prop_name, Prop_ref} = Entry,
{deep_object_property,
Prop_name,
oaspec@util@naming:to_snake_case(Prop_name),
Prop_ref,
gleam@list:contains(Required_fields, Prop_name)}
end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 514).
-spec form_urlencoded_body_properties(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> list(deep_object_property()).
form_urlencoded_body_properties(Rb, Ctx) ->
case gleam_stdlib:map_get(
erlang:element(3, Rb),
<<"application/x-www-form-urlencoded"/utf8>>
) of
{ok, Media_type} ->
case erlang:element(2, Media_type) of
{some, Schema_ref} ->
object_properties_from_schema_ref(Schema_ref, Ctx);
none ->
[]
end;
{error, _} ->
[]
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 529).
-spec multipart_body_properties(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> list(deep_object_property()).
multipart_body_properties(Rb, Ctx) ->
case gleam_stdlib:map_get(
erlang:element(3, Rb),
<<"multipart/form-data"/utf8>>
) of
{ok, Media_type} ->
case erlang:element(2, Media_type) of
{some, Schema_ref} ->
object_properties_from_schema_ref(Schema_ref, Ctx);
none ->
[]
end;
{error, _} ->
[]
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 543).
-spec schema_ref_resolves_to_object(
oaspec@openapi@schema:schema_ref(),
oaspec@codegen@context:context()
) -> boolean().
schema_ref_resolves_to_object(Schema_ref, Ctx) ->
case Schema_ref of
{inline, {object_schema, _, _, _, _, _, _}} ->
true;
{reference, _, _} = Schema_ref@1 ->
case oaspec@openapi@resolver:resolve_schema_ref(
Schema_ref@1,
erlang:element(2, Ctx)
) of
{ok, {object_schema, _, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 555).
-spec form_urlencoded_schema_ref_type_name(oaspec@openapi@schema:schema_ref()) -> binary().
form_urlencoded_schema_ref_type_name(Schema_ref) ->
case Schema_ref of
{reference, _, Name} ->
<<"types."/utf8,
(oaspec@util@naming:schema_to_type_name(Name))/binary>>;
_ ->
<<"String"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 562).
-spec form_urlencoded_body_type_name(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
binary()
) -> binary().
form_urlencoded_body_type_name(Rb, Op_id) ->
case gleam_stdlib:map_get(
erlang:element(3, Rb),
<<"application/x-www-form-urlencoded"/utf8>>
) of
{ok, Media_type} ->
case erlang:element(2, Media_type) of
{some, {reference, _, Name}} ->
<<"types."/utf8,
(oaspec@util@naming:schema_to_type_name(Name))/binary>>;
{some, {inline, {object_schema, _, _, _, _, _, _}}} ->
<<<<"types."/utf8,
(oaspec@util@naming:schema_to_type_name(Op_id))/binary>>/binary,
"Request"/utf8>>;
_ ->
<<"String"/utf8>>
end;
{error, _} ->
<<"String"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 579).
-spec multipart_body_type_name(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
binary()
) -> binary().
multipart_body_type_name(Rb, Op_id) ->
case gleam_stdlib:map_get(
erlang:element(3, Rb),
<<"multipart/form-data"/utf8>>
) of
{ok, Media_type} ->
case erlang:element(2, Media_type) of
{some, {reference, _, Name}} ->
<<"types."/utf8,
(oaspec@util@naming:schema_to_type_name(Name))/binary>>;
{some, {inline, {object_schema, _, _, _, _, _, _}}} ->
<<<<"types."/utf8,
(oaspec@util@naming:schema_to_type_name(Op_id))/binary>>/binary,
"Request"/utf8>>;
_ ->
<<"String"/utf8>>
end;
{error, _} ->
<<"String"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 596).
-spec form_urlencoded_key(binary(), binary()) -> binary().
form_urlencoded_key(Prefix, Name) ->
case Prefix of
<<""/utf8>> ->
Name;
_ ->
<<<<<<Prefix/binary, "["/utf8>>/binary, Name/binary>>/binary,
"]"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 742).
-spec form_urlencoded_body_has_nested_object(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
form_urlencoded_body_has_nested_object(Rb, Ctx) ->
gleam@list:any(
form_urlencoded_body_properties(Rb, Ctx),
fun(Prop) ->
schema_ref_resolves_to_object(erlang:element(4, Prop), Ctx)
end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 779).
-spec multipart_body_has_optional_fields(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
multipart_body_has_optional_fields(Rb, Ctx) ->
gleam@list:any(
multipart_body_properties(Rb, Ctx),
fun(Prop) -> not erlang:element(5, Prop) end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 810).
-spec form_urlencoded_properties_have_optional_fields(
list(deep_object_property()),
oaspec@codegen@context:context(),
boolean()
) -> boolean().
form_urlencoded_properties_have_optional_fields(
Props,
Ctx,
Allow_nested_objects
) ->
gleam@list:any(
Props,
fun(Prop) ->
not erlang:element(5, Prop) orelse case Allow_nested_objects andalso schema_ref_resolves_to_object(
erlang:element(4, Prop),
Ctx
) of
true ->
form_urlencoded_properties_have_optional_fields(
object_properties_from_schema_ref(
erlang:element(4, Prop),
Ctx
),
Ctx,
false
);
false ->
false
end
end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 698).
-spec form_urlencoded_body_has_optional_fields(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
form_urlencoded_body_has_optional_fields(Rb, Ctx) ->
form_urlencoded_properties_have_optional_fields(
form_urlencoded_body_properties(Rb, Ctx),
Ctx,
true
).
-file("src/oaspec/codegen/server_request_decode.gleam", 904).
-spec query_schema_needs_string(
gleam@option:option(oaspec@openapi@schema:schema_ref())
) -> boolean().
query_schema_needs_string(Schema_ref) ->
case Schema_ref of
{some, {inline, {array_schema, _, _, _, _, _}}} ->
true;
{some, {inline, {boolean_schema, _}}} ->
true;
_ ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 423).
-spec deep_object_param_needs_string(
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
deep_object_param_needs_string(Param, Ctx) ->
case is_deep_object_param(Param, Ctx) of
true ->
gleam@list:any(
deep_object_properties(Param, Ctx),
fun(Prop) ->
query_schema_needs_string({some, erlang:element(4, Prop)})
end
);
false ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 832).
-spec form_urlencoded_properties_need_string(
list(deep_object_property()),
oaspec@codegen@context:context(),
boolean()
) -> boolean().
form_urlencoded_properties_need_string(Props, Ctx, Allow_nested_objects) ->
gleam@list:any(
Props,
fun(Prop) ->
query_schema_needs_string({some, erlang:element(4, Prop)}) orelse case Allow_nested_objects
andalso schema_ref_resolves_to_object(erlang:element(4, Prop), Ctx) of
true ->
form_urlencoded_properties_need_string(
object_properties_from_schema_ref(
erlang:element(4, Prop),
Ctx
),
Ctx,
false
);
false ->
false
end
end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 709).
-spec form_urlencoded_body_needs_string(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
form_urlencoded_body_needs_string(Rb, Ctx) ->
form_urlencoded_properties_need_string(
form_urlencoded_body_properties(Rb, Ctx),
Ctx,
true
).
-file("src/oaspec/codegen/server_request_decode.gleam", 912).
-spec query_schema_needs_int(
gleam@option:option(oaspec@openapi@schema:schema_ref())
) -> boolean().
query_schema_needs_int(Schema_ref) ->
case Schema_ref of
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
true;
{some,
{inline,
{array_schema,
_,
{inline, {integer_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
true;
_ ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 436).
-spec deep_object_param_needs_int(
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
deep_object_param_needs_int(Param, Ctx) ->
case is_deep_object_param(Param, Ctx) of
true ->
gleam@list:any(
deep_object_properties(Param, Ctx),
fun(Prop) ->
query_schema_needs_int({some, erlang:element(4, Prop)})
end
);
false ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 921).
-spec query_schema_needs_float(
gleam@option:option(oaspec@openapi@schema:schema_ref())
) -> boolean().
query_schema_needs_float(Schema_ref) ->
case Schema_ref of
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
true;
{some,
{inline,
{array_schema,
_,
{inline, {number_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
true;
_ ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 449).
-spec deep_object_param_needs_float(
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
deep_object_param_needs_float(Param, Ctx) ->
case is_deep_object_param(Param, Ctx) of
true ->
gleam@list:any(
deep_object_properties(Param, Ctx),
fun(Prop) ->
query_schema_needs_float({some, erlang:element(4, Prop)})
end
);
false ->
false
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 103).
?DOC(" Generate parse expression for a path parameter (already bound as String).\n").
-spec param_parse_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved())
) -> binary().
param_parse_expr(Var_name, Param) ->
case oaspec@openapi@spec:parameter_schema(Param) of
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
<<<<"{ let assert Ok(v) = int.parse("/utf8, Var_name/binary>>/binary,
") v }"/utf8>>;
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
<<<<"{ let assert Ok(v) = float.parse("/utf8, Var_name/binary>>/binary,
") v }"/utf8>>;
{some, {inline, {boolean_schema, _}}} ->
<<<<<<<<"{ let v = "/utf8, Var_name/binary>>/binary, " "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }"/utf8>>;
_ ->
Var_name
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 134).
-spec query_required_expr_with_schema(
binary(),
gleam@option:option(oaspec@openapi@schema:schema_ref()),
gleam@option:option(boolean())
) -> binary().
query_required_expr_with_schema(Key, Schema_ref, Explode) ->
Base = <<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") v }"/utf8>>,
case Schema_ref of
{some,
{inline,
{array_schema,
_,
{inline, {string_schema, _, _, _, _, _, _}},
_,
_,
_}}} ->
case Explode of
{some, false} ->
<<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") list.map(string.split(v, \",\"), fn(item) { string.trim(item) }) }"/utf8>>;
_ ->
<<<<"{ let assert Ok(vs) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { string.trim(item) }) }"/utf8>>
end;
{some,
{inline,
{array_schema,
_,
{inline, {integer_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
case Explode of
{some, false} ->
<<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n }) }"/utf8>>;
_ ->
<<<<"{ let assert Ok(vs) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n }) }"/utf8>>
end;
{some,
{inline,
{array_schema,
_,
{inline, {number_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
case Explode of
{some, false} ->
<<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n }) }"/utf8>>;
_ ->
<<<<"{ let assert Ok(vs) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n }) }"/utf8>>
end;
{some,
{inline, {array_schema, _, {inline, {boolean_schema, _}}, _, _, _}}} ->
case Explode of
{some, false} ->
<<<<<<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") list.map(string.split(v, \",\"), fn(item) { let v = string.trim(item) "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }) }"/utf8>>;
_ ->
<<<<<<<<"{ let assert Ok(vs) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { let v = string.trim(item) "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }) }"/utf8>>
end;
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
<<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") let assert Ok(n) = int.parse(v) n }"/utf8>>;
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
<<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") let assert Ok(n) = float.parse(v) n }"/utf8>>;
{some, {inline, {boolean_schema, _}}} ->
<<<<<<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8,
Key/binary>>/binary,
"\") "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }"/utf8>>;
_ ->
Base
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 123).
?DOC(" Generate expression for a required query parameter.\n").
-spec query_required_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved())
) -> binary().
query_required_expr(Key, Param) ->
query_required_expr_with_schema(
Key,
oaspec@openapi@spec:parameter_schema(Param),
erlang:element(8, Param)
).
-file("src/oaspec/codegen/server_request_decode.gleam", 219).
-spec query_optional_expr_with_schema(
binary(),
gleam@option:option(oaspec@openapi@schema:schema_ref()),
gleam@option:option(boolean())
) -> binary().
query_optional_expr_with_schema(Key, Schema_ref, Explode) ->
case Schema_ref of
{some,
{inline,
{array_schema,
_,
{inline, {string_schema, _, _, _, _, _, _}},
_,
_,
_}}} ->
case Explode of
{some, false} ->
<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some(list.map(string.split(v, \",\"), fn(item) { string.trim(item) })) _ -> None }"/utf8>>;
_ ->
<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { string.trim(item) })) _ -> None }"/utf8>>
end;
{some,
{inline,
{array_schema,
_,
{inline, {integer_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
case Explode of
{some, false} ->
<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some(list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n })) _ -> None }"/utf8>>;
_ ->
<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n })) _ -> None }"/utf8>>
end;
{some,
{inline,
{array_schema,
_,
{inline, {number_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
case Explode of
{some, false} ->
<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some(list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n })) _ -> None }"/utf8>>;
_ ->
<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n })) _ -> None }"/utf8>>
end;
{some,
{inline, {array_schema, _, {inline, {boolean_schema, _}}, _, _, _}}} ->
case Explode of
{some, false} ->
<<<<<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some(list.map(string.split(v, \",\"), fn(item) { let v = string.trim(item) "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" })) _ -> None }"/utf8>>;
_ ->
<<<<<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { let v = string.trim(item) "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" })) _ -> None }"/utf8>>
end;
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> { case int.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>;
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> { case float.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>;
{some, {inline, {boolean_schema, _}}} ->
<<<<<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some("/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
") _ -> None }"/utf8>>;
_ ->
<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some(v) _ -> None }"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 208).
?DOC(" Generate expression for an optional query parameter.\n").
-spec query_optional_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved())
) -> binary().
query_optional_expr(Key, Param) ->
query_optional_expr_with_schema(
Key,
oaspec@openapi@spec:parameter_schema(Param),
erlang:element(8, Param)
).
-file("src/oaspec/codegen/server_request_decode.gleam", 382).
-spec deep_object_constructor_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
binary(),
oaspec@codegen@context:context()
) -> binary().
deep_object_constructor_expr(Key, Param, Op_id, Ctx) ->
Fields = begin
_pipe = deep_object_properties(Param, Ctx),
_pipe@1 = gleam@list:map(
_pipe,
fun(Prop) ->
Prop_key = <<<<<<Key/binary, "["/utf8>>/binary,
(erlang:element(2, Prop))/binary>>/binary,
"]"/utf8>>,
Value_expr = case erlang:element(5, Prop) of
true ->
query_required_expr_with_schema(
Prop_key,
{some, erlang:element(4, Prop)},
{some, true}
);
false ->
query_optional_expr_with_schema(
Prop_key,
{some, erlang:element(4, Prop)},
{some, true}
)
end,
<<<<(erlang:element(3, Prop))/binary, ": "/utf8>>/binary,
Value_expr/binary>>
end
),
gleam@string:join(_pipe@1, <<", "/utf8>>)
end,
<<<<<<(deep_object_type_name(Param, Op_id))/binary, "("/utf8>>/binary,
Fields/binary>>/binary,
")"/utf8>>.
-file("src/oaspec/codegen/server_request_decode.gleam", 353).
-spec deep_object_required_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
binary(),
oaspec@codegen@context:context()
) -> binary().
deep_object_required_expr(Key, Param, Op_id, Ctx) ->
deep_object_constructor_expr(Key, Param, Op_id, Ctx).
-file("src/oaspec/codegen/server_request_decode.gleam", 362).
-spec deep_object_optional_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()),
binary(),
oaspec@codegen@context:context()
) -> binary().
deep_object_optional_expr(Key, Param, Op_id, Ctx) ->
Props = deep_object_properties(Param, Ctx),
Prop_names = begin
_pipe = Props,
_pipe@1 = gleam@list:map(
_pipe,
fun(Prop) ->
<<<<"\""/utf8, (erlang:element(2, Prop))/binary>>/binary,
"\""/utf8>>
end
),
gleam@string:join(_pipe@1, <<", "/utf8>>)
end,
<<<<<<<<<<<<"case deep_object_present(query, \""/utf8, Key/binary>>/binary,
"\", ["/utf8>>/binary,
Prop_names/binary>>/binary,
"]) { True -> Some("/utf8>>/binary,
(deep_object_constructor_expr(Key, Param, Op_id, Ctx))/binary>>/binary,
") False -> None }"/utf8>>.
-file("src/oaspec/codegen/server_request_decode.gleam", 1107).
?DOC(" Generate expression for a required header parameter.\n").
-spec header_required_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved())
) -> binary().
header_required_expr(Key, Param) ->
case oaspec@openapi@spec:parameter_schema(Param) of
{some,
{inline,
{array_schema,
_,
{inline, {string_schema, _, _, _, _, _, _}},
_,
_,
_}}} ->
<<<<"{ let assert Ok(v) = dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") list.map(string.split(v, \",\"), fn(item) { string.trim(item) }) }"/utf8>>;
{some,
{inline,
{array_schema,
_,
{inline, {integer_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
<<<<"{ let assert Ok(v) = dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n }) }"/utf8>>;
{some,
{inline,
{array_schema,
_,
{inline, {number_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
<<<<"{ let assert Ok(v) = dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n }) }"/utf8>>;
{some,
{inline, {array_schema, _, {inline, {boolean_schema, _}}, _, _, _}}} ->
<<<<<<<<"{ let assert Ok(v) = dict.get(headers, \""/utf8,
Key/binary>>/binary,
"\") list.map(string.split(v, \",\"), fn(item) { let v = string.trim(item) "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }) }"/utf8>>;
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
<<<<"{ let assert Ok(v) = dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") let assert Ok(n) = int.parse(v) n }"/utf8>>;
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
<<<<"{ let assert Ok(v) = dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") let assert Ok(n) = float.parse(v) n }"/utf8>>;
{some, {inline, {boolean_schema, _}}} ->
<<<<<<<<"{ let assert Ok(v) = dict.get(headers, \""/utf8,
Key/binary>>/binary,
"\") "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }"/utf8>>;
_ ->
<<<<"{ let assert Ok(v) = dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") v }"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 1149).
?DOC(" Generate expression for an optional header parameter.\n").
-spec header_optional_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved())
) -> binary().
header_optional_expr(Key, Param) ->
case oaspec@openapi@spec:parameter_schema(Param) of
{some,
{inline,
{array_schema,
_,
{inline, {string_schema, _, _, _, _, _, _}},
_,
_,
_}}} ->
<<<<"case dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> Some(list.map(string.split(v, \",\"), fn(item) { string.trim(item) })) _ -> None }"/utf8>>;
{some,
{inline,
{array_schema,
_,
{inline, {integer_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
<<<<"case dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> Some(list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n })) _ -> None }"/utf8>>;
{some,
{inline,
{array_schema,
_,
{inline, {number_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
<<<<"case dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> Some(list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n })) _ -> None }"/utf8>>;
{some,
{inline, {array_schema, _, {inline, {boolean_schema, _}}, _, _, _}}} ->
<<<<<<<<"case dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> Some(list.map(string.split(v, \",\"), fn(item) { let v = string.trim(item) "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" })) _ -> None }"/utf8>>;
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
<<<<"case dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> { case int.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>;
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
<<<<"case dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> { case float.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>;
{some, {inline, {boolean_schema, _}}} ->
<<<<<<<<"case dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> Some("/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
") _ -> None }"/utf8>>;
_ ->
<<<<"case dict.get(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> Some(v) _ -> None }"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 1192).
?DOC(" Generate expression for a required cookie parameter.\n").
-spec cookie_required_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved())
) -> binary().
cookie_required_expr(Key, Param) ->
case oaspec@openapi@spec:parameter_schema(Param) of
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
<<<<"{ let assert Ok(v) = cookie_lookup(headers, \""/utf8,
Key/binary>>/binary,
"\") let assert Ok(n) = int.parse(v) n }"/utf8>>;
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
<<<<"{ let assert Ok(v) = cookie_lookup(headers, \""/utf8,
Key/binary>>/binary,
"\") let assert Ok(n) = float.parse(v) n }"/utf8>>;
{some, {inline, {boolean_schema, _}}} ->
<<<<<<<<"{ let assert Ok(v) = cookie_lookup(headers, \""/utf8,
Key/binary>>/binary,
"\") "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }"/utf8>>;
_ ->
<<<<"{ let assert Ok(v) = cookie_lookup(headers, \""/utf8,
Key/binary>>/binary,
"\") v }"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 1216).
?DOC(" Generate expression for an optional cookie parameter.\n").
-spec cookie_optional_expr(
binary(),
oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved())
) -> binary().
cookie_optional_expr(Key, Param) ->
case oaspec@openapi@spec:parameter_schema(Param) of
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
<<<<"case cookie_lookup(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> { case int.parse(v) { Ok(n) -> Some(n) _ -> None } } Error(_) -> None }"/utf8>>;
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
<<<<"case cookie_lookup(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> { case float.parse(v) { Ok(n) -> Some(n) _ -> None } } Error(_) -> None }"/utf8>>;
{some, {inline, {boolean_schema, _}}} ->
<<<<<<<<"case cookie_lookup(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> Some("/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
") Error(_) -> None }"/utf8>>;
_ ->
<<<<"case cookie_lookup(headers, \""/utf8, Key/binary>>/binary,
"\") { Ok(v) -> Some(v) Error(_) -> None }"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 643).
-spec form_urlencoded_object_required_expr(
binary(),
oaspec@openapi@schema:schema_ref(),
oaspec@codegen@context:context(),
integer()
) -> binary().
form_urlencoded_object_required_expr(Prefix, Schema_ref, Ctx, Nesting_depth) ->
form_urlencoded_object_constructor_expr(
form_urlencoded_schema_ref_type_name(Schema_ref),
Prefix,
object_properties_from_schema_ref(Schema_ref, Ctx),
Ctx,
Nesting_depth
).
-file("src/oaspec/codegen/server_request_decode.gleam", 603).
-spec form_urlencoded_object_constructor_expr(
binary(),
binary(),
list(deep_object_property()),
oaspec@codegen@context:context(),
integer()
) -> binary().
form_urlencoded_object_constructor_expr(
Type_name,
Prefix,
Properties,
Ctx,
Nesting_depth
) ->
Fields = begin
_pipe = Properties,
_pipe@1 = gleam@list:map(
_pipe,
fun(Prop) ->
Key = form_urlencoded_key(Prefix, erlang:element(2, Prop)),
Value_expr = case {(Nesting_depth < 5) andalso schema_ref_resolves_to_object(
erlang:element(4, Prop),
Ctx
),
erlang:element(5, Prop)} of
{true, true} ->
form_urlencoded_object_required_expr(
Key,
erlang:element(4, Prop),
Ctx,
Nesting_depth + 1
);
{true, false} ->
form_urlencoded_object_optional_expr(
Key,
erlang:element(4, Prop),
Ctx,
Nesting_depth + 1
);
{false, true} ->
form_body_required_expr_with_schema(
Key,
{some, erlang:element(4, Prop)},
Ctx
);
{false, false} ->
form_body_optional_expr_with_schema(
Key,
{some, erlang:element(4, Prop)},
Ctx
)
end,
<<<<(erlang:element(3, Prop))/binary, ": "/utf8>>/binary,
Value_expr/binary>>
end
),
gleam@string:join(_pipe@1, <<", "/utf8>>)
end,
<<<<<<Type_name/binary, "("/utf8>>/binary, Fields/binary>>/binary,
")"/utf8>>.
-file("src/oaspec/codegen/server_request_decode.gleam", 658).
-spec form_urlencoded_object_optional_expr(
binary(),
oaspec@openapi@schema:schema_ref(),
oaspec@codegen@context:context(),
integer()
) -> binary().
form_urlencoded_object_optional_expr(Prefix, Schema_ref, Ctx, Nesting_depth) ->
Props = object_properties_from_schema_ref(Schema_ref, Ctx),
Prop_names = begin
_pipe = Props,
_pipe@1 = gleam@list:map(
_pipe,
fun(Prop) ->
<<<<"\""/utf8, (erlang:element(2, Prop))/binary>>/binary,
"\""/utf8>>
end
),
gleam@string:join(_pipe@1, <<", "/utf8>>)
end,
<<<<<<<<<<<<"case form_object_present(form_body, \""/utf8, Prefix/binary>>/binary,
"\", ["/utf8>>/binary,
Prop_names/binary>>/binary,
"]) { True -> Some("/utf8>>/binary,
(form_urlencoded_object_constructor_expr(
form_urlencoded_schema_ref_type_name(Schema_ref),
Prefix,
Props,
Ctx,
Nesting_depth
))/binary>>/binary,
") False -> None }"/utf8>>.
-file("src/oaspec/codegen/server_request_decode.gleam", 684).
-spec form_urlencoded_body_constructor_expr(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
binary(),
oaspec@codegen@context:context()
) -> binary().
form_urlencoded_body_constructor_expr(Rb, Op_id, Ctx) ->
form_urlencoded_object_constructor_expr(
form_urlencoded_body_type_name(Rb, Op_id),
<<""/utf8>>,
form_urlencoded_body_properties(Rb, Ctx),
Ctx,
0
).
-file("src/oaspec/codegen/server_request_decode.gleam", 70).
-spec body_field_kind_from_object(
oaspec@openapi@schema:schema_object(),
oaspec@codegen@context:context()
) -> body_field_kind().
body_field_kind_from_object(Schema_obj, Ctx) ->
case Schema_obj of
{string_schema, _, _, _, _, _, _} ->
body_field_string;
{integer_schema, _, _, _, _, _, _, _} ->
body_field_int;
{number_schema, _, _, _, _, _, _, _} ->
body_field_float;
{boolean_schema, _} ->
body_field_bool;
{array_schema, _, Items, _, _, _} ->
case body_field_kind(Items, Ctx) of
body_field_string ->
body_field_string_array;
body_field_int ->
body_field_int_array;
body_field_float ->
body_field_float_array;
body_field_bool ->
body_field_bool_array;
_ ->
body_field_unknown
end;
_ ->
body_field_unknown
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 47).
-spec body_field_kind(
oaspec@openapi@schema:schema_ref(),
oaspec@codegen@context:context()
) -> body_field_kind().
body_field_kind(Schema_ref, Ctx) ->
case Schema_ref of
{inline, {string_schema, _, _, _, _, _, _}} ->
body_field_string;
{inline, {integer_schema, _, _, _, _, _, _, _}} ->
body_field_int;
{inline, {number_schema, _, _, _, _, _, _, _}} ->
body_field_float;
{inline, {boolean_schema, _}} ->
body_field_bool;
{inline, {array_schema, _, Items, _, _, _}} ->
case body_field_kind(Items, Ctx) of
body_field_string ->
body_field_string_array;
body_field_int ->
body_field_int_array;
body_field_float ->
body_field_float_array;
body_field_bool ->
body_field_bool_array;
_ ->
body_field_unknown
end;
{reference, _, _} = Schema_ref@1 ->
case oaspec@openapi@resolver:resolve_schema_ref(
Schema_ref@1,
erlang:element(2, Ctx)
) of
{ok, Schema_obj} ->
body_field_kind_from_object(Schema_obj, Ctx);
{error, _} ->
body_field_unknown
end;
_ ->
body_field_unknown
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 37).
-spec schema_ref_body_field_kind(
gleam@option:option(oaspec@openapi@schema:schema_ref()),
oaspec@codegen@context:context()
) -> body_field_kind().
schema_ref_body_field_kind(Schema_ref, Ctx) ->
case Schema_ref of
{some, Schema_ref@1} ->
body_field_kind(Schema_ref@1, Ctx);
none ->
body_field_unknown
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 786).
-spec multipart_body_needs_int(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
multipart_body_needs_int(Rb, Ctx) ->
gleam@list:any(
multipart_body_properties(Rb, Ctx),
fun(Prop) ->
body_field_kind_needs_int(
schema_ref_body_field_kind({some, erlang:element(4, Prop)}, Ctx)
)
end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 798).
-spec multipart_body_needs_float(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
multipart_body_needs_float(Rb, Ctx) ->
gleam@list:any(
multipart_body_properties(Rb, Ctx),
fun(Prop) ->
body_field_kind_needs_float(
schema_ref_body_field_kind({some, erlang:element(4, Prop)}, Ctx)
)
end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 854).
-spec form_urlencoded_properties_need_int(
list(deep_object_property()),
oaspec@codegen@context:context(),
boolean()
) -> boolean().
form_urlencoded_properties_need_int(Props, Ctx, Allow_nested_objects) ->
gleam@list:any(
Props,
fun(Prop) ->
body_field_kind_needs_int(
schema_ref_body_field_kind({some, erlang:element(4, Prop)}, Ctx)
)
orelse case Allow_nested_objects andalso schema_ref_resolves_to_object(
erlang:element(4, Prop),
Ctx
) of
true ->
form_urlencoded_properties_need_int(
object_properties_from_schema_ref(
erlang:element(4, Prop),
Ctx
),
Ctx,
false
);
false ->
false
end
end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 720).
-spec form_urlencoded_body_needs_int(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
form_urlencoded_body_needs_int(Rb, Ctx) ->
form_urlencoded_properties_need_int(
form_urlencoded_body_properties(Rb, Ctx),
Ctx,
true
).
-file("src/oaspec/codegen/server_request_decode.gleam", 879).
-spec form_urlencoded_properties_need_float(
list(deep_object_property()),
oaspec@codegen@context:context(),
boolean()
) -> boolean().
form_urlencoded_properties_need_float(Props, Ctx, Allow_nested_objects) ->
gleam@list:any(
Props,
fun(Prop) ->
body_field_kind_needs_float(
schema_ref_body_field_kind({some, erlang:element(4, Prop)}, Ctx)
)
orelse case Allow_nested_objects andalso schema_ref_resolves_to_object(
erlang:element(4, Prop),
Ctx
) of
true ->
form_urlencoded_properties_need_float(
object_properties_from_schema_ref(
erlang:element(4, Prop),
Ctx
),
Ctx,
false
);
false ->
false
end
end
).
-file("src/oaspec/codegen/server_request_decode.gleam", 731).
-spec form_urlencoded_body_needs_float(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
oaspec@codegen@context:context()
) -> boolean().
form_urlencoded_body_needs_float(Rb, Ctx) ->
form_urlencoded_properties_need_float(
form_urlencoded_body_properties(Rb, Ctx),
Ctx,
true
).
-file("src/oaspec/codegen/server_request_decode.gleam", 930).
-spec form_body_required_expr_with_schema(
binary(),
gleam@option:option(oaspec@openapi@schema:schema_ref()),
oaspec@codegen@context:context()
) -> binary().
form_body_required_expr_with_schema(Key, Schema_ref, Ctx) ->
Base = <<<<"{ let assert Ok([v, ..]) = dict.get(form_body, \""/utf8,
Key/binary>>/binary,
"\") v }"/utf8>>,
case schema_ref_body_field_kind(Schema_ref, Ctx) of
body_field_string_array ->
<<<<"{ let assert Ok(vs) = dict.get(form_body, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { string.trim(item) }) }"/utf8>>;
body_field_int_array ->
<<<<"{ let assert Ok(vs) = dict.get(form_body, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n }) }"/utf8>>;
body_field_float_array ->
<<<<"{ let assert Ok(vs) = dict.get(form_body, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n }) }"/utf8>>;
body_field_bool_array ->
<<<<<<<<"{ let assert Ok(vs) = dict.get(form_body, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { let v = string.trim(item) "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }) }"/utf8>>;
body_field_int ->
<<<<"{ let assert Ok([v, ..]) = dict.get(form_body, \""/utf8,
Key/binary>>/binary,
"\") let assert Ok(n) = int.parse(v) n }"/utf8>>;
body_field_float ->
<<<<"{ let assert Ok([v, ..]) = dict.get(form_body, \""/utf8,
Key/binary>>/binary,
"\") let assert Ok(n) = float.parse(v) n }"/utf8>>;
body_field_bool ->
<<<<<<<<"{ let assert Ok([v, ..]) = dict.get(form_body, \""/utf8,
Key/binary>>/binary,
"\") "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }"/utf8>>;
_ ->
Base
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 974).
-spec form_body_optional_expr_with_schema(
binary(),
gleam@option:option(oaspec@openapi@schema:schema_ref()),
oaspec@codegen@context:context()
) -> binary().
form_body_optional_expr_with_schema(Key, Schema_ref, Ctx) ->
case schema_ref_body_field_kind(Schema_ref, Ctx) of
body_field_string_array ->
<<<<"case dict.get(form_body, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { string.trim(item) })) _ -> None }"/utf8>>;
body_field_int_array ->
<<<<"case dict.get(form_body, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n })) _ -> None }"/utf8>>;
body_field_float_array ->
<<<<"case dict.get(form_body, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n })) _ -> None }"/utf8>>;
body_field_bool_array ->
<<<<<<<<"case dict.get(form_body, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { let v = string.trim(item) "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" })) _ -> None }"/utf8>>;
body_field_int ->
<<<<"case dict.get(form_body, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> { case int.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>;
body_field_float ->
<<<<"case dict.get(form_body, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> { case float.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>;
body_field_bool ->
<<<<<<<<"case dict.get(form_body, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some("/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
") _ -> None }"/utf8>>;
_ ->
<<<<"case dict.get(form_body, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some(v) _ -> None }"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 1019).
-spec multipart_body_required_expr_with_schema(
binary(),
gleam@option:option(oaspec@openapi@schema:schema_ref()),
oaspec@codegen@context:context()
) -> binary().
multipart_body_required_expr_with_schema(Key, Schema_ref, Ctx) ->
Base = <<<<"{ let assert Ok([v, ..]) = dict.get(multipart_body, \""/utf8,
Key/binary>>/binary,
"\") v }"/utf8>>,
case schema_ref_body_field_kind(Schema_ref, Ctx) of
body_field_int ->
<<<<"{ let assert Ok([v, ..]) = dict.get(multipart_body, \""/utf8,
Key/binary>>/binary,
"\") let assert Ok(n) = int.parse(v) n }"/utf8>>;
body_field_float ->
<<<<"{ let assert Ok([v, ..]) = dict.get(multipart_body, \""/utf8,
Key/binary>>/binary,
"\") let assert Ok(n) = float.parse(v) n }"/utf8>>;
body_field_bool ->
<<<<<<<<"{ let assert Ok([v, ..]) = dict.get(multipart_body, \""/utf8,
Key/binary>>/binary,
"\") "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }"/utf8>>;
body_field_string_array ->
<<<<"{ let assert Ok(vs) = dict.get(multipart_body, \""/utf8,
Key/binary>>/binary,
"\") vs }"/utf8>>;
body_field_int_array ->
<<<<"{ let assert Ok(vs) = dict.get(multipart_body, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { let assert Ok(n) = int.parse(item) n }) }"/utf8>>;
body_field_float_array ->
<<<<"{ let assert Ok(vs) = dict.get(multipart_body, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { let assert Ok(n) = float.parse(item) n }) }"/utf8>>;
body_field_bool_array ->
<<<<<<<<"{ let assert Ok(vs) = dict.get(multipart_body, \""/utf8,
Key/binary>>/binary,
"\") list.map(vs, fn(item) { let v = item "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" }) }"/utf8>>;
_ ->
Base
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 1061).
-spec multipart_body_optional_expr_with_schema(
binary(),
gleam@option:option(oaspec@openapi@schema:schema_ref()),
oaspec@codegen@context:context()
) -> binary().
multipart_body_optional_expr_with_schema(Key, Schema_ref, Ctx) ->
case schema_ref_body_field_kind(Schema_ref, Ctx) of
body_field_int ->
<<<<"case dict.get(multipart_body, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> { case int.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>;
body_field_float ->
<<<<"case dict.get(multipart_body, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> { case float.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>;
body_field_bool ->
<<<<<<<<"case dict.get(multipart_body, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some("/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
") _ -> None }"/utf8>>;
body_field_string_array ->
<<<<"case dict.get(multipart_body, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(vs) _ -> None }"/utf8>>;
body_field_int_array ->
<<<<"case dict.get(multipart_body, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { let assert Ok(n) = int.parse(item) n })) _ -> None }"/utf8>>;
body_field_float_array ->
<<<<"case dict.get(multipart_body, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { let assert Ok(n) = float.parse(item) n })) _ -> None }"/utf8>>;
body_field_bool_array ->
<<<<<<<<"case dict.get(multipart_body, \""/utf8, Key/binary>>/binary,
"\") { Ok(vs) -> Some(list.map(vs, fn(item) { let v = item "/utf8>>/binary,
"case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary,
" })) _ -> None }"/utf8>>;
_ ->
<<<<"case dict.get(multipart_body, \""/utf8, Key/binary>>/binary,
"\") { Ok([v, ..]) -> Some(v) _ -> None }"/utf8>>
end.
-file("src/oaspec/codegen/server_request_decode.gleam", 751).
-spec multipart_body_constructor_expr(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
binary(),
oaspec@codegen@context:context()
) -> binary().
multipart_body_constructor_expr(Rb, Op_id, Ctx) ->
Fields = begin
_pipe = multipart_body_properties(Rb, Ctx),
_pipe@1 = gleam@list:map(
_pipe,
fun(Prop) ->
Value_expr = case erlang:element(5, Prop) of
true ->
multipart_body_required_expr_with_schema(
erlang:element(2, Prop),
{some, erlang:element(4, Prop)},
Ctx
);
false ->
multipart_body_optional_expr_with_schema(
erlang:element(2, Prop),
{some, erlang:element(4, Prop)},
Ctx
)
end,
<<<<(erlang:element(3, Prop))/binary, ": "/utf8>>/binary,
Value_expr/binary>>
end
),
gleam@string:join(_pipe@1, <<", "/utf8>>)
end,
<<<<<<(multipart_body_type_name(Rb, Op_id))/binary, "("/utf8>>/binary,
Fields/binary>>/binary,
")"/utf8>>.
-file("src/oaspec/codegen/server_request_decode.gleam", 1243).
?DOC(" Generate the body decode expression for a request body.\n").
-spec generate_body_decode_expr(
oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()),
binary(),
oaspec@codegen@context:context()
) -> binary().
generate_body_decode_expr(Rb, Op_id, Ctx) ->
Content_entries = maps:to_list(erlang:element(3, Rb)),
case Content_entries of
[{<<"application/json"/utf8>>, Media_type}] ->
Decode_fn = case erlang:element(2, Media_type) of
{some, {reference, _, Name}} ->
<<<<"decode.decode_"/utf8,
(oaspec@util@naming:to_snake_case(Name))/binary>>/binary,
"(body)"/utf8>>;
_ ->
<<<<"decode.decode_"/utf8,
(oaspec@util@naming:to_snake_case(Op_id))/binary>>/binary,
"_request_body(body)"/utf8>>
end,
case erlang:element(4, Rb) of
true ->
<<<<"{ let assert Ok(decoded) = "/utf8, Decode_fn/binary>>/binary,
" decoded }"/utf8>>;
false ->
<<<<"case body { \"\" -> None _ -> { case "/utf8,
Decode_fn/binary>>/binary,
" { Ok(decoded) -> Some(decoded) _ -> None } } }"/utf8>>
end;
[{<<"application/x-www-form-urlencoded"/utf8>>, _}] ->
Body_expr = form_urlencoded_body_constructor_expr(Rb, Op_id, Ctx),
case erlang:element(4, Rb) of
true ->
Body_expr;
false ->
<<<<"case body { \"\" -> None _ -> Some("/utf8,
Body_expr/binary>>/binary,
") }"/utf8>>
end;
[{<<"multipart/form-data"/utf8>>, _}] ->
Body_expr@1 = multipart_body_constructor_expr(Rb, Op_id, Ctx),
case erlang:element(4, Rb) of
true ->
Body_expr@1;
false ->
<<<<"case body { \"\" -> None _ -> Some("/utf8,
Body_expr@1/binary>>/binary,
") }"/utf8>>
end;
_ ->
case erlang:element(4, Rb) of
true ->
<<"body"/utf8>>;
false ->
<<"case body { \"\" -> None _ -> Some(body) }"/utf8>>
end
end.