Packages
oaspec
0.61.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@codegen@client_request.erl
-module(oaspec@internal@codegen@client_request).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/internal/codegen/client_request.gleam").
-export([build_param_field_names/1, field_name_for/2, build_request_object_call_args/5, param_to_string_expr/3, to_str_for_optional_value/2, get_body_type/2, build_param_list/7, get_body_encode_expr/3, multipart_field_is_binary/2, generate_multipart_body/4, is_exploded_array_param/2, is_delimited_array_param/2, is_deep_object_param/2, generate_delimited_array_query_param/5, generate_exploded_array_query_param/4, generate_form_urlencoded_body/4]).
-export_type([multipart_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.
?MODULEDOC(false).
-type multipart_field_kind() :: multipart_scalar_kind |
multipart_binary_kind |
{multipart_array_kind, oaspec@internal@openapi@schema:schema_ref()} |
multipart_object_kind.
-file("src/oaspec/internal/codegen/client_request.gleam", 29).
?DOC(false).
-spec build_param_field_names(
oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved())
) -> gleam@dict:dict({binary(), oaspec@internal@openapi@spec:parameter_in()}, binary()).
build_param_field_names(Operation) ->
Resolved = gleam@list:filter_map(
erlang:element(6, Operation),
fun(R) -> case R of
{value, P} ->
{ok, P};
_ ->
{error, nil}
end end
),
Deduped = oaspec@internal@openapi@dedup:dedup_param_field_names(Resolved),
_pipe = gleam@list:zip(Resolved, Deduped),
gleam@list:fold(
_pipe,
maps:new(),
fun(Acc, Pair) ->
{Param, Name} = Pair,
gleam@dict:insert(
Acc,
{erlang:element(2, Param), erlang:element(3, Param)},
Name
)
end
).
-file("src/oaspec/internal/codegen/client_request.gleam", 51).
?DOC(false).
-spec field_name_for(
gleam@dict:dict({binary(), oaspec@internal@openapi@spec:parameter_in()}, binary()),
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved())
) -> binary().
field_name_for(Map, Param) ->
case gleam_stdlib:map_get(
Map,
{erlang:element(2, Param), erlang:element(3, Param)}
) of
{ok, Name} ->
Name;
{error, _} ->
oaspec@internal@util@naming:to_snake_case(erlang:element(2, Param))
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 67).
?DOC(false).
-spec build_request_object_call_args(
list(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved())),
list(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved())),
list(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved())),
list(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved())),
oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved())
) -> gleam@option:option(binary()).
build_request_object_call_args(
Path_params,
Query_params,
Header_params,
Cookie_params,
Operation
) ->
All_params = begin
_pipe = lists:append(Path_params, Query_params),
_pipe@1 = lists:append(_pipe, Header_params),
lists:append(_pipe@1, Cookie_params)
end,
Has_body = case erlang:element(7, Operation) of
{some, _} ->
true;
none ->
false
end,
case {gleam@list:is_empty(All_params), Has_body} of
{true, false} ->
none;
{_, _} ->
Field_names = build_param_field_names(Operation),
Param_refs = gleam@list:map(
All_params,
fun(P) ->
<<"req."/utf8, (field_name_for(Field_names, P))/binary>>
end
),
case erlang:element(7, Operation) of
{some, {value, Rb}} ->
Content_entries = oaspec@internal@codegen@ir_build:sorted_entries(
erlang:element(3, Rb)
),
case Content_entries of
[_, _ | _] ->
none;
_ ->
{some,
gleam@string:join(
lists:append(
Param_refs,
[<<"req.body"/utf8>>]
),
<<", "/utf8>>
)}
end;
_ ->
{some, gleam@string:join(Param_refs, <<", "/utf8>>)}
end
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 151).
?DOC(false).
-spec param_to_type(
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
oaspec@internal@codegen@context:context()
) -> binary().
param_to_type(Param, Ctx) ->
Base = oaspec@internal@codegen@schema_dispatch:resolve_param_type(
oaspec@internal@openapi@spec:parameter_schema(Param),
Ctx
),
case erlang:element(5, Param) of
true ->
Base;
false ->
<<<<"Option("/utf8, Base/binary>>/binary, ")"/utf8>>
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 161).
?DOC(false).
-spec param_to_string_expr(
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@codegen@context:context()
) -> binary().
param_to_string_expr(Param, Param_name, Ctx) ->
case erlang:element(6, Param) of
{parameter_schema, {inline, {array_schema, _, Items, _, _, _}}} ->
Item_to_str = oaspec@internal@codegen@schema_dispatch:to_string_fn(
Items,
Ctx
),
<<<<<<<<"string.join(list.map("/utf8, Param_name/binary>>/binary,
", "/utf8>>/binary,
Item_to_str/binary>>/binary,
"), \",\")"/utf8>>;
{parameter_schema, {inline, S}} ->
oaspec@internal@codegen@schema_dispatch:to_string_expr(
S,
Param_name
);
{parameter_schema, {reference, _, _} = Schema_ref} ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
) of
{ok, {array_schema, _, Items@1, _, _, _}} ->
Item_to_str@1 = oaspec@internal@codegen@schema_dispatch:to_string_fn(
Items@1,
Ctx
),
<<<<<<<<"string.join(list.map("/utf8, Param_name/binary>>/binary,
", "/utf8>>/binary,
Item_to_str@1/binary>>/binary,
"), \",\")"/utf8>>;
_ ->
oaspec@internal@codegen@schema_dispatch:schema_ref_to_string_expr(
Schema_ref,
Param_name,
Ctx
)
end;
_ ->
Param_name
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 196).
?DOC(false).
-spec to_str_for_optional_value(
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
oaspec@internal@codegen@context:context()
) -> binary().
to_str_for_optional_value(Param, Ctx) ->
case erlang:element(6, Param) of
{parameter_schema, {inline, {array_schema, _, Items, _, _, _}}} ->
Item_to_str = oaspec@internal@codegen@schema_dispatch:to_string_fn(
Items,
Ctx
),
<<<<"string.join(list.map(v, "/utf8, Item_to_str/binary>>/binary,
"), \",\")"/utf8>>;
{parameter_schema, {inline, S}} ->
oaspec@internal@codegen@schema_dispatch:to_string_expr(
S,
<<"v"/utf8>>
);
{parameter_schema, {reference, _, _} = Schema_ref} ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
) of
{ok, {array_schema, _, Items@1, _, _, _}} ->
Item_to_str@1 = oaspec@internal@codegen@schema_dispatch:to_string_fn(
Items@1,
Ctx
),
<<<<"string.join(list.map(v, "/utf8, Item_to_str@1/binary>>/binary,
"), \",\")"/utf8>>;
_ ->
oaspec@internal@codegen@schema_dispatch:schema_ref_to_string_expr(
Schema_ref,
<<"v"/utf8>>,
Ctx
)
end;
_ ->
<<"v"/utf8>>
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 227).
?DOC(false).
-spec get_body_type(
oaspec@internal@openapi@spec:request_body(oaspec@internal@openapi@spec:resolved()),
binary()
) -> binary().
get_body_type(Rb, Op_id) ->
Content_entries = oaspec@internal@codegen@ir_build:sorted_entries(
erlang:element(3, Rb)
),
case Content_entries of
[_, _ | _] ->
<<"String"/utf8>>;
[{Media_type_name, Media_type}] ->
case oaspec@internal@util@content_type:from_string(Media_type_name) of
application_octet_stream ->
<<"BitArray"/utf8>>;
wildcard ->
<<"BitArray"/utf8>>;
_ ->
case erlang:element(2, Media_type) of
{some, {reference, _, Name}} ->
<<"types."/utf8,
(oaspec@internal@util@naming:schema_to_type_name(
Name
))/binary>>;
{some, {inline, {string_schema, _, _, _, _, _, _}}} ->
<<"String"/utf8>>;
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
<<"Int"/utf8>>;
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
<<"Float"/utf8>>;
{some, {inline, {boolean_schema, _}}} ->
<<"Bool"/utf8>>;
{some, {inline, _}} ->
<<<<"types."/utf8,
(oaspec@internal@util@naming:schema_to_type_name(
Op_id
))/binary>>/binary,
"RequestBody"/utf8>>;
_ ->
<<"String"/utf8>>
end
end;
[] ->
<<"String"/utf8>>
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 105).
?DOC(false).
-spec build_param_list(
list(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved())),
list(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved())),
list(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved())),
list(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved())),
oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@codegen@context:context()
) -> binary().
build_param_list(
Path_params,
Query_params,
Header_params,
Cookie_params,
Operation,
Op_id,
Ctx
) ->
All_params = begin
_pipe = lists:append(Path_params, Query_params),
_pipe@1 = lists:append(_pipe, Header_params),
lists:append(_pipe@1, Cookie_params)
end,
Field_names = build_param_field_names(Operation),
Param_strs = gleam@list:map(
All_params,
fun(P) ->
Param_name = field_name_for(Field_names, P),
Param_type = param_to_type(P, Ctx),
<<<<<<<<<<", "/utf8, Param_name/binary>>/binary, " "/utf8>>/binary,
Param_name/binary>>/binary,
": "/utf8>>/binary,
Param_type/binary>>
end
),
Body_param = case erlang:element(7, Operation) of
{some, {value, Rb}} ->
Body_type = get_body_type(Rb, Op_id),
Wrapped_type = case erlang:element(4, Rb) of
true ->
Body_type;
false ->
<<<<"Option("/utf8, Body_type/binary>>/binary, ")"/utf8>>
end,
Content_entries = oaspec@internal@codegen@ir_build:sorted_entries(
erlang:element(3, Rb)
),
case Content_entries of
[_, _ | _] ->
[<<", content_type content_type: String"/utf8>>,
<<", body body: "/utf8, Wrapped_type/binary>>];
_ ->
[<<", body body: "/utf8, Wrapped_type/binary>>]
end;
_ ->
[]
end,
gleam@string:join(lists:append(Param_strs, Body_param), <<""/utf8>>).
-file("src/oaspec/internal/codegen/client_request.gleam", 254).
?DOC(false).
-spec get_body_encode_expr(
oaspec@internal@openapi@spec:request_body(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@codegen@context:context()
) -> binary().
get_body_encode_expr(Rb, Op_id, _) ->
Content_entries = oaspec@internal@codegen@ir_build:sorted_entries(
erlang:element(3, Rb)
),
case Content_entries of
[{_, Media_type} | _] ->
case erlang:element(2, Media_type) of
{some, {reference, _, Name}} ->
<<<<"encode.encode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Name))/binary>>/binary,
"(body)"/utf8>>;
{some, {inline, {string_schema, _, _, _, _, _, _}}} ->
<<"json.to_string(json.string(body))"/utf8>>;
{some, {inline, {integer_schema, _, _, _, _, _, _, _}}} ->
<<"json.to_string(json.int(body))"/utf8>>;
{some, {inline, {number_schema, _, _, _, _, _, _, _}}} ->
<<"json.to_string(json.float(body))"/utf8>>;
{some, {inline, {boolean_schema, _}}} ->
<<"json.to_string(json.bool(body))"/utf8>>;
{some, {inline, _}} ->
Fn_name = <<<<"encode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Op_id))/binary>>/binary,
"_request_body"/utf8>>,
<<<<"encode."/utf8, Fn_name/binary>>/binary, "(body)"/utf8>>;
_ ->
<<"body"/utf8>>
end;
[] ->
<<"body"/utf8>>
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 377).
?DOC(false).
-spec multipart_field_is_binary(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> boolean().
multipart_field_is_binary(Field_schema, Ctx) ->
case Field_schema of
{inline, {string_schema, _, {some, <<"binary"/utf8>>}, _, _, _, _}} ->
true;
{reference, _, _} = Schema_ref ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
) of
{ok, {string_schema, _, {some, <<"binary"/utf8>>}, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 403).
?DOC(false).
-spec multipart_field_kind(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> multipart_field_kind().
multipart_field_kind(Field_schema, Ctx) ->
gleam@bool:guard(
multipart_field_is_binary(Field_schema, Ctx),
multipart_binary_kind,
fun() -> case Field_schema of
{inline, {array_schema, _, Items, _, _, _}} ->
{multipart_array_kind, Items};
{inline, {object_schema, _, _, _, _, _, _}} ->
multipart_object_kind;
{reference, _, _} = Schema_ref ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
) of
{ok, {array_schema, _, Items@1, _, _, _}} ->
{multipart_array_kind, Items@1};
{ok, {object_schema, _, _, _, _, _, _}} ->
multipart_object_kind;
_ ->
multipart_scalar_kind
end;
_ ->
multipart_scalar_kind
end end
).
-file("src/oaspec/internal/codegen/client_request.gleam", 429).
?DOC(false).
-spec emit_multipart_simple_field(
gleam@string_tree:string_tree(),
binary(),
binary(),
binary(),
boolean(),
boolean()
) -> gleam@string_tree:string_tree().
emit_multipart_simple_field(
Sb,
Field_name,
Gleam_field,
To_string_fn,
Is_binary,
Is_required
) ->
Part_header_binary = <<<<<<<<"\"--\" <> boundary <> \"\\r\\nContent-Disposition: form-data; name=\\\""/utf8,
Field_name/binary>>/binary,
"\\\"; filename=\\\""/utf8>>/binary,
Field_name/binary>>/binary,
"\\\"\\r\\nContent-Type: application/octet-stream\\r\\n\\r\\n\""/utf8>>,
Part_header_text = <<<<"\"--\" <> boundary <> \"\\r\\nContent-Disposition: form-data; name=\\\""/utf8,
Field_name/binary>>/binary,
"\\\"\\r\\n\\r\\n\""/utf8>>,
Part_header = case Is_binary of
true ->
Part_header_binary;
false ->
Part_header_text
end,
case Is_required of
true ->
Value_expr = case To_string_fn of
<<""/utf8>> ->
<<"body."/utf8, Gleam_field/binary>>;
Fn_name ->
<<<<<<Fn_name/binary, "(body."/utf8>>/binary,
Gleam_field/binary>>/binary,
")"/utf8>>
end,
_pipe = Sb,
oaspec@internal@util@string_extra:indent(
_pipe,
1,
<<<<<<<<"let parts = ["/utf8, Part_header/binary>>/binary,
" <> "/utf8>>/binary,
Value_expr/binary>>/binary,
" <> \"\\r\\n\", ..parts]"/utf8>>
);
false ->
Value_expr@1 = case To_string_fn of
<<""/utf8>> ->
<<"v"/utf8>>;
Fn_name@1 ->
<<Fn_name@1/binary, "(v)"/utf8>>
end,
_pipe@1 = Sb,
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
1,
<<<<"let parts = case body."/utf8, Gleam_field/binary>>/binary,
" {"/utf8>>
),
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
2,
<<<<<<<<"Some(v) -> ["/utf8, Part_header/binary>>/binary,
" <> "/utf8>>/binary,
Value_expr@1/binary>>/binary,
" <> \"\\r\\n\", ..parts]"/utf8>>
),
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
2,
<<"None -> parts"/utf8>>
),
oaspec@internal@util@string_extra:indent(_pipe@4, 1, <<"}"/utf8>>)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 493).
?DOC(false).
-spec emit_multipart_array_field(
gleam@string_tree:string_tree(),
binary(),
binary(),
oaspec@internal@openapi@schema:schema_ref(),
boolean(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
emit_multipart_array_field(Sb, Field_name, Gleam_field, Items, Is_required, Ctx) ->
Part_header = <<<<"\"--\" <> boundary <> \"\\r\\nContent-Disposition: form-data; name=\\\""/utf8,
Field_name/binary>>/binary,
"\\\"\\r\\n\\r\\n\""/utf8>>,
Item_to_string = oaspec@internal@codegen@schema_dispatch:schema_ref_to_string_expr(
Items,
<<"item"/utf8>>,
Ctx
),
Fold_expr = fun(List_expr) ->
<<<<<<<<<<<<"list.fold("/utf8, List_expr/binary>>/binary,
", parts, fn(acc, item) { ["/utf8>>/binary,
Part_header/binary>>/binary,
" <> "/utf8>>/binary,
Item_to_string/binary>>/binary,
" <> \"\\r\\n\", ..acc] })"/utf8>>
end,
case Is_required of
true ->
_pipe = Sb,
oaspec@internal@util@string_extra:indent(
_pipe,
1,
<<"let parts = "/utf8,
(Fold_expr(<<"body."/utf8, Gleam_field/binary>>))/binary>>
);
false ->
_pipe@1 = Sb,
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
1,
<<<<"let parts = case body."/utf8, Gleam_field/binary>>/binary,
" {"/utf8>>
),
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
2,
<<"Some(v) -> "/utf8, (Fold_expr(<<"v"/utf8>>))/binary>>
),
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
2,
<<"None -> parts"/utf8>>
),
oaspec@internal@util@string_extra:indent(_pipe@4, 1, <<"}"/utf8>>)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 578).
?DOC(false).
-spec multipart_object_encode_expr(
oaspec@internal@openapi@schema:schema_ref(),
binary(),
oaspec@internal@codegen@context:context()
) -> binary().
multipart_object_encode_expr(Field_schema, Input_expr, _) ->
case Field_schema of
{reference, _, Name} ->
<<<<<<<<"json.to_string(encode.encode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Name))/binary>>/binary,
"_json("/utf8>>/binary,
Input_expr/binary>>/binary,
"))"/utf8>>;
_ ->
<<<<"string.inspect("/utf8, Input_expr/binary>>/binary, ")"/utf8>>
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 536).
?DOC(false).
-spec emit_multipart_object_field(
gleam@string_tree:string_tree(),
binary(),
binary(),
oaspec@internal@openapi@schema:schema_ref(),
boolean(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
emit_multipart_object_field(
Sb,
Field_name,
Gleam_field,
Field_schema,
Is_required,
Ctx
) ->
Part_header = <<<<"\"--\" <> boundary <> \"\\r\\nContent-Disposition: form-data; name=\\\""/utf8,
Field_name/binary>>/binary,
"\\\"\\r\\nContent-Type: application/json\\r\\n\\r\\n\""/utf8>>,
Encoded_value = fun(Input_expr) ->
multipart_object_encode_expr(Field_schema, Input_expr, Ctx)
end,
case Is_required of
true ->
_pipe = Sb,
oaspec@internal@util@string_extra:indent(
_pipe,
1,
<<<<<<<<"let parts = ["/utf8, Part_header/binary>>/binary,
" <> "/utf8>>/binary,
(Encoded_value(<<"body."/utf8, Gleam_field/binary>>))/binary>>/binary,
" <> \"\\r\\n\", ..parts]"/utf8>>
);
false ->
_pipe@1 = Sb,
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
1,
<<<<"let parts = case body."/utf8, Gleam_field/binary>>/binary,
" {"/utf8>>
),
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
2,
<<<<<<<<"Some(v) -> ["/utf8, Part_header/binary>>/binary,
" <> "/utf8>>/binary,
(Encoded_value(<<"v"/utf8>>))/binary>>/binary,
" <> \"\\r\\n\", ..parts]"/utf8>>
),
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
2,
<<"None -> parts"/utf8>>
),
oaspec@internal@util@string_extra:indent(_pipe@4, 1, <<"}"/utf8>>)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 604).
?DOC(false).
-spec multipart_field_to_string_fn(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> binary().
multipart_field_to_string_fn(Field_schema, Ctx) ->
Result = oaspec@internal@codegen@schema_dispatch:to_string_fn(
Field_schema,
Ctx
),
case Result of
<<"fn(x) { x }"/utf8>> ->
<<""/utf8>>;
_ ->
Result
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 622).
?DOC(false).
-spec form_field_to_string_fn(
oaspec@internal@openapi@schema:schema_ref(),
binary(),
binary(),
oaspec@internal@codegen@context:context()
) -> binary().
form_field_to_string_fn(Field_schema, Field_name, Parent_name, Ctx) ->
case Field_schema of
{inline, {string_schema, _, _, Enum_values, _, _, _}} when Enum_values =/= [] ->
Enum_type_name = oaspec@internal@codegen@ir_build:inline_enum_type_name_for(
Parent_name,
Field_name,
Ctx
),
<<<<"encode.encode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Enum_type_name))/binary>>/binary,
"_to_string"/utf8>>;
_ ->
multipart_field_to_string_fn(Field_schema, Ctx)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 286).
?DOC(false).
-spec generate_multipart_body(
gleam@string_tree:string_tree(),
oaspec@internal@openapi@spec:request_body(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
generate_multipart_body(Sb, Rb, Op_id, Ctx) ->
Parent_name = <<(oaspec@internal@util@naming:to_snake_case(Op_id))/binary,
"_request"/utf8>>,
Boundary = <<"----oaspec-boundary"/utf8>>,
Content_entries = oaspec@internal@codegen@ir_build:sorted_entries(
erlang:element(3, Rb)
),
{Properties@2, Required_fields} = case Content_entries of
[{_, Media_type} | _] ->
case erlang:element(2, Media_type) of
{some,
{inline, {object_schema, _, Properties, Required, _, _, _}}} ->
{oaspec@internal@codegen@ir_build:sorted_entries(Properties),
Required};
{some, {reference, _, _} = Schema_ref} ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
) of
{ok,
{object_schema,
_,
Properties@1,
Required@1,
_,
_,
_}} ->
{oaspec@internal@codegen@ir_build:sorted_entries(
Properties@1
),
Required@1};
_ ->
{[], []}
end;
_ ->
{[], []}
end;
_ ->
{[], []}
end,
Sb@1 = begin
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
1,
<<<<"let boundary = \""/utf8, Boundary/binary>>/binary, "\""/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@1,
1,
<<"let parts = []"/utf8>>
)
end,
Sb@3 = gleam@list:fold(
Properties@2,
Sb@1,
fun(Sb@2, Prop) ->
{Field_name, Field_schema} = Prop,
Gleam_field = oaspec@internal@util@naming:to_snake_case(Field_name),
Is_required = gleam@list:contains(Required_fields, Field_name),
case multipart_field_kind(Field_schema, Ctx) of
{multipart_array_kind, Items} ->
emit_multipart_array_field(
Sb@2,
Field_name,
Gleam_field,
Items,
Is_required,
Ctx
);
multipart_object_kind ->
emit_multipart_object_field(
Sb@2,
Field_name,
Gleam_field,
Field_schema,
Is_required,
Ctx
);
multipart_binary_kind ->
emit_multipart_simple_field(
Sb@2,
Field_name,
Gleam_field,
<<""/utf8>>,
true,
Is_required
);
multipart_scalar_kind ->
emit_multipart_simple_field(
Sb@2,
Field_name,
Gleam_field,
form_field_to_string_fn(
Field_schema,
Field_name,
Parent_name,
Ctx
),
false,
Is_required
)
end
end
),
_pipe@2 = Sb@3,
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
1,
<<"let body_str = string.join(parts, \"\") <> \"--\" <> boundary <> \"--\\r\\n\""/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@3,
1,
<<"let body_content_type = \"multipart/form-data; boundary=\" <> boundary"/utf8>>
).
-file("src/oaspec/internal/codegen/client_request.gleam", 640).
?DOC(false).
-spec form_array_item_to_string(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> binary().
form_array_item_to_string(Field_schema, Ctx) ->
case Field_schema of
{inline, {array_schema, _, Items, _, _, _}} ->
oaspec@internal@codegen@schema_dispatch:schema_ref_to_string_expr(
Items,
<<"item"/utf8>>,
Ctx
);
_ ->
<<"item"/utf8>>
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 654).
?DOC(false).
-spec schema_resolves_to_object(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> boolean().
schema_resolves_to_object(Schema_ref, Ctx) ->
case Schema_ref of
{inline, {object_schema, _, _, _, _, _, _}} ->
true;
{reference, _, _} ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
) of
{ok, {object_schema, _, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 667).
?DOC(false).
-spec schema_resolves_to_array(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> boolean().
schema_resolves_to_array(Schema_ref, Ctx) ->
case Schema_ref of
{inline, {array_schema, _, _, _, _, _}} ->
true;
{reference, _, _} ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
) of
{ok, {array_schema, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 681).
?DOC(false).
-spec array_items_of(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> gleam@option:option(oaspec@internal@openapi@schema:schema_ref()).
array_items_of(Schema_ref, Ctx) ->
case Schema_ref of
{inline, {array_schema, _, Items, _, _, _}} ->
{some, Items};
{reference, _, _} ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
) of
{ok, {array_schema, _, Items@1, _, _, _}} ->
{some, Items@1};
_ ->
none
end;
_ ->
none
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1512).
?DOC(false).
-spec form_field_json_encoder_fn(oaspec@internal@openapi@schema:schema_ref()) -> binary().
form_field_json_encoder_fn(Ref) ->
case Ref of
{inline, {string_schema, _, _, _, _, _, _}} ->
<<"json.string"/utf8>>;
{inline, {integer_schema, _, _, _, _, _, _, _}} ->
<<"json.int"/utf8>>;
{inline, {number_schema, _, _, _, _, _, _, _}} ->
<<"json.float"/utf8>>;
{inline, {boolean_schema, _}} ->
<<"json.bool"/utf8>>;
{inline, {array_schema, _, Items, _, _, _}} ->
<<<<"fn(xs) { json.array(xs, "/utf8,
(form_field_json_encoder_fn(Items))/binary>>/binary,
") }"/utf8>>;
{reference, _, Name} ->
<<<<"encode.encode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Name))/binary>>/binary,
"_json"/utf8>>;
_ ->
oaspec@internal@codegen@schema_dispatch:json_encoder_fn(Ref)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1489).
?DOC(false).
-spec form_field_json_encoder_expr(
oaspec@internal@openapi@schema:schema_ref(),
binary(),
oaspec@internal@codegen@context:context()
) -> binary().
form_field_json_encoder_expr(Ref, Value, _) ->
case Ref of
{inline, {string_schema, _, _, _, _, _, _}} ->
<<<<"json.string("/utf8, Value/binary>>/binary, ")"/utf8>>;
{inline, {integer_schema, _, _, _, _, _, _, _}} ->
<<<<"json.int("/utf8, Value/binary>>/binary, ")"/utf8>>;
{inline, {number_schema, _, _, _, _, _, _, _}} ->
<<<<"json.float("/utf8, Value/binary>>/binary, ")"/utf8>>;
{inline, {boolean_schema, _}} ->
<<<<"json.bool("/utf8, Value/binary>>/binary, ")"/utf8>>;
{inline, {array_schema, _, Items, _, _, _}} ->
<<<<<<<<"json.array("/utf8, Value/binary>>/binary, ", "/utf8>>/binary,
(form_field_json_encoder_fn(Items))/binary>>/binary,
")"/utf8>>;
{reference, _, Name} ->
<<<<<<<<"encode.encode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Name))/binary>>/binary,
"_json("/utf8>>/binary,
Value/binary>>/binary,
")"/utf8>>;
_ ->
oaspec@internal@codegen@schema_dispatch:json_encoder_expr(
Ref,
Value
)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1559).
?DOC(false).
-spec resolve_schema_object(
gleam@option:option(oaspec@internal@openapi@schema:schema_ref()),
oaspec@internal@codegen@context:context()
) -> gleam@option:option(oaspec@internal@openapi@schema:schema_object()).
resolve_schema_object(Schema_ref, Ctx) ->
case Schema_ref of
{some, {inline, S}} ->
{some, S};
{some, {reference, _, _} = Ref} ->
case oaspec@internal@codegen@context:resolve_schema_ref(Ref, Ctx) of
{ok, S@1} ->
{some, S@1};
{error, _} ->
none
end;
none ->
none
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1542).
?DOC(false).
-spec field_resolves_to_composite(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> boolean().
field_resolves_to_composite(Ref, Ctx) ->
case resolve_schema_object({some, Ref}, Ctx) of
{some, {one_of_schema, _, _, _}} ->
true;
{some, {any_of_schema, _, _, _}} ->
true;
{some, {all_of_schema, _, _}} ->
true;
{some, {array_schema, _, Items, _, _, _}} ->
field_resolves_to_composite(Items, Ctx);
{some, {object_schema, _, Properties, _, _, _, _}} ->
_pipe = maps:to_list(Properties),
gleam@list:any(
_pipe,
fun(Entry) ->
{_, Child_schema} = Entry,
field_resolves_to_composite(Child_schema, Ctx)
end
);
_ ->
false
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1579).
?DOC(false).
-spec form_encoding_is_json(
gleam@dict:dict(binary(), oaspec@internal@openapi@spec:encoding()),
binary()
) -> boolean().
form_encoding_is_json(Encoding, Field_name) ->
case gleam_stdlib:map_get(Encoding, Field_name) of
{ok, {encoding, {some, Ct}, _, _}} ->
case oaspec@internal@util@content_type:from_string(Ct) of
application_json ->
true;
_ ->
false
end;
_ ->
false
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1887).
?DOC(false).
-spec is_exploded_array_param(
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
oaspec@internal@codegen@context:context()
) -> boolean().
is_exploded_array_param(Param, Ctx) ->
Is_array = case erlang:element(6, Param) of
{parameter_schema, {inline, {array_schema, _, _, _, _, _}}} ->
true;
{parameter_schema, {reference, _, _} = Sr} ->
case oaspec@internal@codegen@context:resolve_schema_ref(Sr, Ctx) of
{ok, {array_schema, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end,
case Is_array of
false ->
false;
true ->
oaspec@internal@codegen@operation_ir:effective_explode(Param)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1909).
?DOC(false).
-spec is_delimited_array_param(
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
oaspec@internal@codegen@context:context()
) -> gleam@option:option(binary()).
is_delimited_array_param(Param, Ctx) ->
Is_array = case erlang:element(6, Param) of
{parameter_schema, {inline, {array_schema, _, _, _, _, _}}} ->
true;
{parameter_schema, {reference, _, _} = Sr} ->
case oaspec@internal@codegen@context:resolve_schema_ref(Sr, Ctx) of
{ok, {array_schema, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end,
Is_non_exploded = not oaspec@internal@codegen@operation_ir:effective_explode(
Param
),
case {Is_array, Is_non_exploded, erlang:element(7, Param)} of
{true, true, {some, pipe_delimited_style}} ->
{some,
oaspec@internal@codegen@operation_ir:delimiter_for_style(
erlang:element(7, Param)
)};
{true, true, {some, space_delimited_style}} ->
{some,
oaspec@internal@codegen@operation_ir:delimiter_for_style(
erlang:element(7, Param)
)};
{_, _, _} ->
none
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 2040).
?DOC(false).
-spec array_items_ref(
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
oaspec@internal@codegen@context:context()
) -> gleam@option:option(oaspec@internal@openapi@schema:schema_ref()).
array_items_ref(Param, Ctx) ->
case erlang:element(6, Param) of
{parameter_schema, {inline, {array_schema, _, Items, _, _, _}}} ->
{some, Items};
{parameter_schema, {reference, _, _} = Sr} ->
case oaspec@internal@codegen@context:resolve_schema_ref(Sr, Ctx) of
{ok, {array_schema, _, Items@1, _, _, _}} ->
{some, Items@1};
_ ->
none
end;
_ ->
none
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 2055).
?DOC(false).
-spec items_resolve_primitive(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> boolean().
items_resolve_primitive(Items, Ctx) ->
case Items of
{inline, {string_schema, _, _, _, _, _, _}} ->
true;
{inline, {integer_schema, _, _, _, _, _, _, _}} ->
true;
{inline, {number_schema, _, _, _, _, _, _, _}} ->
true;
{inline, {boolean_schema, _}} ->
true;
{reference, _, _} ->
case oaspec@internal@codegen@context:resolve_schema_ref(Items, Ctx) of
{ok, {string_schema, _, _, _, _, _, _}} ->
true;
{ok, {integer_schema, _, _, _, _, _, _, _}} ->
true;
{ok, {number_schema, _, _, _, _, _, _, _}} ->
true;
{ok, {boolean_schema, _}} ->
true;
_ ->
false
end;
_ ->
false
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 2079).
?DOC(false).
-spec emit_json_array_query_param(
gleam@string_tree:string_tree(),
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@openapi@schema:schema_ref()
) -> gleam@string_tree:string_tree().
emit_json_array_query_param(Sb, Param, Param_name, Items) ->
Item_encoder = case Items of
{reference, _, Name} ->
<<<<"encode.encode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Name))/binary>>/binary,
"_json"/utf8>>;
_ ->
oaspec@internal@codegen@schema_dispatch:json_encoder_fn(Items)
end,
case erlang:element(5, Param) of
true ->
_pipe = Sb,
oaspec@internal@util@string_extra:indent(
_pipe,
1,
<<<<<<<<<<<<"let query = [#(\""/utf8,
(erlang:element(2, Param))/binary>>/binary,
"\", json.to_string(json.array("/utf8>>/binary,
Param_name/binary>>/binary,
", "/utf8>>/binary,
Item_encoder/binary>>/binary,
"))), ..query]"/utf8>>
);
false ->
_pipe@1 = Sb,
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
1,
<<<<"let query = case "/utf8, Param_name/binary>>/binary,
" {"/utf8>>
),
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
2,
<<<<<<<<"Some(items) -> [#(\""/utf8,
(erlang:element(2, Param))/binary>>/binary,
"\", json.to_string(json.array(items, "/utf8>>/binary,
Item_encoder/binary>>/binary,
"))), ..query]"/utf8>>
),
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
2,
<<"None -> query"/utf8>>
),
oaspec@internal@util@string_extra:indent(_pipe@4, 1, <<"}"/utf8>>)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 2120).
?DOC(false).
-spec is_deep_object_param(
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
oaspec@internal@codegen@context:context()
) -> boolean().
is_deep_object_param(Param, Ctx) ->
oaspec@internal@codegen@operation_ir:is_deep_object_param(Param, Ctx).
-file("src/oaspec/internal/codegen/client_request.gleam", 2129).
?DOC(false).
-spec array_item_to_string_fn(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> binary().
array_item_to_string_fn(Items, Ctx) ->
oaspec@internal@codegen@schema_dispatch:to_string_fn(Items, Ctx).
-file("src/oaspec/internal/codegen/client_request.gleam", 1935).
?DOC(false).
-spec generate_delimited_array_query_param(
gleam@string_tree:string_tree(),
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
binary(),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
generate_delimited_array_query_param(Sb, Param, Param_name, Joiner, Ctx) ->
Item_to_str = case erlang:element(6, Param) of
{parameter_schema, {inline, {array_schema, _, Items, _, _, _}}} ->
array_item_to_string_fn(Items, Ctx);
{parameter_schema, {reference, _, _} = Sr} ->
case oaspec@internal@codegen@context:resolve_schema_ref(Sr, Ctx) of
{ok, {array_schema, _, Items@1, _, _, _}} ->
array_item_to_string_fn(Items@1, Ctx);
_ ->
<<"fn(x) { x }"/utf8>>
end;
_ ->
<<"fn(x) { x }"/utf8>>
end,
case erlang:element(5, Param) of
true ->
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
1,
<<<<"let query = case "/utf8, Param_name/binary>>/binary,
" {"/utf8>>
),
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
2,
<<"[] -> query"/utf8>>
),
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
2,
<<"items -> {"/utf8>>
),
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
3,
<<<<<<<<"let joined = string.join(list.map(items, "/utf8,
Item_to_str/binary>>/binary,
"), \""/utf8>>/binary,
Joiner/binary>>/binary,
"\")"/utf8>>
),
_pipe@5 = oaspec@internal@util@string_extra:indent(
_pipe@4,
3,
<<<<"[#(\""/utf8, (erlang:element(2, Param))/binary>>/binary,
"\", joined), ..query]"/utf8>>
),
_pipe@6 = oaspec@internal@util@string_extra:indent(
_pipe@5,
2,
<<"}"/utf8>>
),
oaspec@internal@util@string_extra:indent(_pipe@6, 1, <<"}"/utf8>>);
false ->
_pipe@7 = Sb,
_pipe@8 = oaspec@internal@util@string_extra:indent(
_pipe@7,
1,
<<<<"let query = case "/utf8, Param_name/binary>>/binary,
" {"/utf8>>
),
_pipe@9 = oaspec@internal@util@string_extra:indent(
_pipe@8,
2,
<<"Some([]) -> query"/utf8>>
),
_pipe@10 = oaspec@internal@util@string_extra:indent(
_pipe@9,
2,
<<"Some(items) -> {"/utf8>>
),
_pipe@11 = oaspec@internal@util@string_extra:indent(
_pipe@10,
3,
<<<<<<<<"let joined = string.join(list.map(items, "/utf8,
Item_to_str/binary>>/binary,
"), \""/utf8>>/binary,
Joiner/binary>>/binary,
"\")"/utf8>>
),
_pipe@12 = oaspec@internal@util@string_extra:indent(
_pipe@11,
3,
<<<<"[#(\""/utf8, (erlang:element(2, Param))/binary>>/binary,
"\", joined), ..query]"/utf8>>
),
_pipe@13 = oaspec@internal@util@string_extra:indent(
_pipe@12,
2,
<<"}"/utf8>>
),
_pipe@14 = oaspec@internal@util@string_extra:indent(
_pipe@13,
2,
<<"None -> query"/utf8>>
),
oaspec@internal@util@string_extra:indent(_pipe@14, 1, <<"}"/utf8>>)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1992).
?DOC(false).
-spec generate_exploded_array_query_param(
gleam@string_tree:string_tree(),
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
generate_exploded_array_query_param(Sb, Param, Param_name, Ctx) ->
Items_ref = array_items_ref(Param, Ctx),
Json_escape = case Items_ref of
{some, Items} ->
not items_resolve_primitive(Items, Ctx);
none ->
false
end,
gleam@bool:lazy_guard(Json_escape, fun() -> case Items_ref of
{some, Items@1} ->
emit_json_array_query_param(Sb, Param, Param_name, Items@1);
none ->
Sb
end end, fun() ->
Item_to_str = case Items_ref of
{some, Items@2} ->
array_item_to_string_fn(Items@2, Ctx);
none ->
<<"fn(x) { x }"/utf8>>
end,
case erlang:element(5, Param) of
true ->
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
1,
<<<<"let query = list.fold("/utf8, Param_name/binary>>/binary,
", query, fn(acc, item) {"/utf8>>
),
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
2,
<<<<<<<<"[#(\""/utf8,
(erlang:element(2, Param))/binary>>/binary,
"\", "/utf8>>/binary,
Item_to_str/binary>>/binary,
"(item)), ..acc]"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@2,
1,
<<"})"/utf8>>
);
false ->
_pipe@3 = Sb,
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
1,
<<<<"let query = case "/utf8, Param_name/binary>>/binary,
" {"/utf8>>
),
_pipe@5 = oaspec@internal@util@string_extra:indent(
_pipe@4,
2,
<<"Some(items) -> list.fold(items, query, fn(acc, item) {"/utf8>>
),
_pipe@6 = oaspec@internal@util@string_extra:indent(
_pipe@5,
3,
<<<<<<<<"[#(\""/utf8,
(erlang:element(2, Param))/binary>>/binary,
"\", "/utf8>>/binary,
Item_to_str/binary>>/binary,
"(item)), ..acc]"/utf8>>
),
_pipe@7 = oaspec@internal@util@string_extra:indent(
_pipe@6,
2,
<<"})"/utf8>>
),
_pipe@8 = oaspec@internal@util@string_extra:indent(
_pipe@7,
2,
<<"None -> query"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@8,
1,
<<"}"/utf8>>
)
end
end).
-file("src/oaspec/internal/codegen/client_request.gleam", 1333).
?DOC(false).
-spec emit_bracket_props(
gleam@string_tree:string_tree(),
binary(),
binary(),
oaspec@internal@openapi@schema:schema_ref(),
integer(),
binary(),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
emit_bracket_props(
Sb,
Key_prefix,
Accessor_prefix,
Field_schema,
Indent_base,
Parts_var,
Parent_path,
Ctx
) ->
Resolved = oaspec@internal@codegen@context:resolve_schema_ref(
Field_schema,
Ctx
),
case Resolved of
{ok, {object_schema, _, Properties, Required, _, _, _}} ->
Props = oaspec@internal@codegen@ir_build:sorted_entries(Properties),
gleam@list:fold(
Props,
Sb,
fun(Sb@1, Entry) ->
{Prop_name, Prop_ref} = Entry,
Prop_field = oaspec@internal@util@naming:to_snake_case(
Prop_name
),
Prop_accessor = <<<<Accessor_prefix/binary, "."/utf8>>/binary,
Prop_field/binary>>,
Prop_required = gleam@list:contains(Required, Prop_name),
Is_obj = case Prop_ref of
{inline, {object_schema, _, _, _, _, _, _}} ->
true;
{reference, _, _} = Sr ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Sr,
Ctx
) of
{ok, {object_schema, _, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end,
Is_arr = case Prop_ref of
{inline, {array_schema, _, _, _, _, _}} ->
true;
{reference, _, _} = Sr@1 ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Sr@1,
Ctx
) of
{ok, {array_schema, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end,
Nested_parent = <<<<Parent_path/binary, "_"/utf8>>/binary,
Prop_field/binary>>,
Constant_value = oaspec@internal@codegen@schema_utils:constant_property_value(
Prop_ref,
Prop_name,
Required
),
case Constant_value of
{some, Constant} ->
_pipe = Sb@1,
oaspec@internal@util@string_extra:indent(
_pipe,
Indent_base,
<<<<<<<<<<<<<<<<<<<<"let "/utf8,
Parts_var/binary>>/binary,
" = [\""/utf8>>/binary,
Key_prefix/binary>>/binary,
"["/utf8>>/binary,
Prop_name/binary>>/binary,
"]=\" <> uri.percent_encode(\""/utf8>>/binary,
Constant/binary>>/binary,
"\"), .."/utf8>>/binary,
Parts_var/binary>>/binary,
"]"/utf8>>
);
none ->
case {Is_obj, Is_arr} of
{true, _} ->
generate_form_bracket_fields(
Sb@1,
<<<<<<Key_prefix/binary, "["/utf8>>/binary,
Prop_name/binary>>/binary,
"]"/utf8>>,
Prop_accessor,
Prop_ref,
Prop_required,
Indent_base,
Parts_var,
Nested_parent,
Ctx
);
{_, true} ->
case array_items_of(Prop_ref, Ctx) of
{some, Items_schema} ->
generate_form_indexed_array(
Sb@1,
<<<<<<<<"\""/utf8,
Key_prefix/binary>>/binary,
"["/utf8>>/binary,
Prop_name/binary>>/binary,
"]\""/utf8>>,
Prop_accessor,
Items_schema,
Prop_required,
Indent_base,
Parts_var,
Nested_parent,
Ctx
);
none ->
Sb@1
end;
{false, false} ->
To_str = form_field_to_string_fn(
Prop_ref,
Prop_name,
Parent_path,
Ctx
),
case Prop_required of
true ->
Value_expr = case To_str of
<<""/utf8>> ->
Prop_accessor;
Fn_name ->
<<<<<<Fn_name/binary,
"("/utf8>>/binary,
Prop_accessor/binary>>/binary,
")"/utf8>>
end,
_pipe@1 = Sb@1,
oaspec@internal@util@string_extra:indent(
_pipe@1,
Indent_base,
<<<<<<<<<<<<<<<<<<<<"let "/utf8,
Parts_var/binary>>/binary,
" = [\""/utf8>>/binary,
Key_prefix/binary>>/binary,
"["/utf8>>/binary,
Prop_name/binary>>/binary,
"]=\" <> uri.percent_encode("/utf8>>/binary,
Value_expr/binary>>/binary,
"), .."/utf8>>/binary,
Parts_var/binary>>/binary,
"]"/utf8>>
);
false ->
_pipe@2 = Sb@1,
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
Indent_base,
<<<<<<<<"let "/utf8,
Parts_var/binary>>/binary,
" = case "/utf8>>/binary,
Prop_accessor/binary>>/binary,
" {"/utf8>>
),
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
Indent_base + 1,
<<<<<<<<<<<<<<<<"Some(v) -> [\""/utf8,
Key_prefix/binary>>/binary,
"["/utf8>>/binary,
Prop_name/binary>>/binary,
"]=\" <> uri.percent_encode("/utf8>>/binary,
((case To_str of
<<""/utf8>> ->
<<"v"/utf8>>;
Fn_name@1 ->
<<Fn_name@1/binary,
"(v)"/utf8>>
end))/binary>>/binary,
"), .."/utf8>>/binary,
Parts_var/binary>>/binary,
"]"/utf8>>
),
_pipe@5 = oaspec@internal@util@string_extra:indent(
_pipe@4,
Indent_base + 1,
<<"None -> "/utf8,
Parts_var/binary>>
),
oaspec@internal@util@string_extra:indent(
_pipe@5,
Indent_base,
<<"}"/utf8>>
)
end
end
end
end
);
_ ->
Sb
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1274).
?DOC(false).
-spec generate_form_bracket_fields(
gleam@string_tree:string_tree(),
binary(),
binary(),
oaspec@internal@openapi@schema:schema_ref(),
boolean(),
integer(),
binary(),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
generate_form_bracket_fields(
Sb,
Key_prefix,
Accessor_prefix,
Field_schema,
Is_required,
Indent_base,
Parts_var,
Parent_path,
Ctx
) ->
case Is_required of
false ->
Inner_accessor = <<"v_"/utf8,
(erlang:integer_to_binary(Indent_base))/binary>>,
Sb@1 = begin
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
Indent_base,
<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = case "/utf8>>/binary,
Accessor_prefix/binary>>/binary,
" {"/utf8>>
),
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
Indent_base + 1,
<<<<"Some("/utf8, Inner_accessor/binary>>/binary,
") -> {"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@2,
Indent_base + 2,
<<"let inner = "/utf8, Parts_var/binary>>
)
end,
Sb@2 = emit_bracket_props(
Sb@1,
Key_prefix,
Inner_accessor,
Field_schema,
Indent_base + 2,
<<"inner"/utf8>>,
Parent_path,
Ctx
),
_pipe@3 = Sb@2,
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
Indent_base + 2,
<<"inner"/utf8>>
),
_pipe@5 = oaspec@internal@util@string_extra:indent(
_pipe@4,
Indent_base + 1,
<<"}"/utf8>>
),
_pipe@6 = oaspec@internal@util@string_extra:indent(
_pipe@5,
Indent_base + 1,
<<"None -> "/utf8, Parts_var/binary>>
),
oaspec@internal@util@string_extra:indent(
_pipe@6,
Indent_base,
<<"}"/utf8>>
);
true ->
emit_bracket_props(
Sb,
Key_prefix,
Accessor_prefix,
Field_schema,
Indent_base,
Parts_var,
Parent_path,
Ctx
)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 945).
?DOC(false).
-spec emit_form_field(
gleam@string_tree:string_tree(),
binary(),
binary(),
oaspec@internal@openapi@schema:schema_ref(),
boolean(),
integer(),
binary(),
binary(),
binary(),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
emit_form_field(
Sb,
Key_prefix_quoted,
Accessor,
Schema_ref,
Is_required,
Indent_base,
Parts_var,
Prop_name,
Parent_path,
Nested_parent,
Ctx
) ->
case {schema_resolves_to_object(Schema_ref, Ctx),
schema_resolves_to_array(Schema_ref, Ctx)} of
{true, _} ->
case Is_required of
true ->
emit_form_object_recurse(
Sb,
Key_prefix_quoted,
Accessor,
Schema_ref,
true,
Indent_base,
Parts_var,
Nested_parent,
Ctx
);
false ->
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
Indent_base,
<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = case "/utf8>>/binary,
Accessor/binary>>/binary,
" {"/utf8>>
),
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
Indent_base + 1,
<<"Some(obj) -> {"/utf8>>
),
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
Indent_base + 2,
<<"let acc2 = "/utf8, Parts_var/binary>>
),
_pipe@4 = emit_form_object_recurse(
_pipe@3,
Key_prefix_quoted,
<<"obj"/utf8>>,
Schema_ref,
true,
Indent_base + 2,
<<"acc2"/utf8>>,
Nested_parent,
Ctx
),
_pipe@5 = oaspec@internal@util@string_extra:indent(
_pipe@4,
Indent_base + 2,
<<"acc2"/utf8>>
),
_pipe@6 = oaspec@internal@util@string_extra:indent(
_pipe@5,
Indent_base + 1,
<<"}"/utf8>>
),
_pipe@7 = oaspec@internal@util@string_extra:indent(
_pipe@6,
Indent_base + 1,
<<"None -> "/utf8, Parts_var/binary>>
),
oaspec@internal@util@string_extra:indent(
_pipe@7,
Indent_base,
<<"}"/utf8>>
)
end;
{_, true} ->
case array_items_of(Schema_ref, Ctx) of
{some, Items} ->
generate_form_indexed_array(
Sb,
Key_prefix_quoted,
Accessor,
Items,
Is_required,
Indent_base,
Parts_var,
Nested_parent,
Ctx
);
none ->
Sb
end;
{false, false} ->
To_str = form_field_to_string_fn(
Schema_ref,
Prop_name,
Parent_path,
Ctx
),
case Is_required of
true ->
Value_expr = case To_str of
<<""/utf8>> ->
Accessor;
Fn_name ->
<<<<<<Fn_name/binary, "("/utf8>>/binary,
Accessor/binary>>/binary,
")"/utf8>>
end,
_pipe@8 = Sb,
oaspec@internal@util@string_extra:indent(
_pipe@8,
Indent_base,
<<<<<<<<<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = ["/utf8>>/binary,
Key_prefix_quoted/binary>>/binary,
" <> \"=\" <> uri.percent_encode("/utf8>>/binary,
Value_expr/binary>>/binary,
"), .."/utf8>>/binary,
Parts_var/binary>>/binary,
"]"/utf8>>
);
false ->
Some_value_expr = case To_str of
<<""/utf8>> ->
<<"v"/utf8>>;
Fn_name@1 ->
<<Fn_name@1/binary, "(v)"/utf8>>
end,
_pipe@9 = Sb,
_pipe@10 = oaspec@internal@util@string_extra:indent(
_pipe@9,
Indent_base,
<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = case "/utf8>>/binary,
Accessor/binary>>/binary,
" {"/utf8>>
),
_pipe@11 = oaspec@internal@util@string_extra:indent(
_pipe@10,
Indent_base + 1,
<<<<<<<<<<<<"Some(v) -> ["/utf8,
Key_prefix_quoted/binary>>/binary,
" <> \"=\" <> uri.percent_encode("/utf8>>/binary,
Some_value_expr/binary>>/binary,
"), .."/utf8>>/binary,
Parts_var/binary>>/binary,
"]"/utf8>>
),
_pipe@12 = oaspec@internal@util@string_extra:indent(
_pipe@11,
Indent_base + 1,
<<"None -> "/utf8, Parts_var/binary>>
),
oaspec@internal@util@string_extra:indent(
_pipe@12,
Indent_base,
<<"}"/utf8>>
)
end
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 712).
?DOC(false).
-spec generate_form_indexed_array(
gleam@string_tree:string_tree(),
binary(),
binary(),
oaspec@internal@openapi@schema:schema_ref(),
boolean(),
integer(),
binary(),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
generate_form_indexed_array(
Sb,
Key_prefix_quoted,
Accessor,
Items_schema,
Is_required,
Indent_base,
Parts_var,
Parent_path,
Ctx
) ->
case Is_required of
true ->
emit_array_fold(
Sb,
Key_prefix_quoted,
Accessor,
Items_schema,
Indent_base,
Parts_var,
Parent_path,
Ctx
);
false ->
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
Indent_base,
<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = case "/utf8>>/binary,
Accessor/binary>>/binary,
" {"/utf8>>
),
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
Indent_base + 1,
<<"Some(items) -> {"/utf8>>
),
_pipe@3 = emit_array_fold(
_pipe@2,
Key_prefix_quoted,
<<"items"/utf8>>,
Items_schema,
Indent_base + 2,
Parts_var,
Parent_path,
Ctx
),
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
Indent_base + 1,
<<"}"/utf8>>
),
_pipe@5 = oaspec@internal@util@string_extra:indent(
_pipe@4,
Indent_base + 1,
<<"None -> "/utf8, Parts_var/binary>>
),
oaspec@internal@util@string_extra:indent(
_pipe@5,
Indent_base,
<<"}"/utf8>>
)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 757).
?DOC(false).
-spec emit_array_fold(
gleam@string_tree:string_tree(),
binary(),
binary(),
oaspec@internal@openapi@schema:schema_ref(),
integer(),
binary(),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
emit_array_fold(
Sb,
Key_prefix_quoted,
List_expr,
Items_schema,
Indent_base,
Parts_var,
Parent_path,
Ctx
) ->
case {schema_resolves_to_object(Items_schema, Ctx),
schema_resolves_to_array(Items_schema, Ctx)} of
{true, _} ->
Element_key_expr = <<Key_prefix_quoted/binary,
" <> \"[\" <> int.to_string(idx) <> \"]\""/utf8>>,
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
Indent_base,
<<<<<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = list.index_fold("/utf8>>/binary,
List_expr/binary>>/binary,
", "/utf8>>/binary,
Parts_var/binary>>/binary,
", fn(acc, item, idx) {"/utf8>>
),
_pipe@2 = emit_form_object_recurse(
_pipe@1,
Element_key_expr,
<<"item"/utf8>>,
Items_schema,
true,
Indent_base + 1,
<<"acc"/utf8>>,
<<Parent_path/binary, "_item"/utf8>>,
Ctx
),
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
Indent_base + 1,
<<"acc"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@3,
Indent_base,
<<"})"/utf8>>
);
{_, true} ->
Element_key_expr@1 = <<Key_prefix_quoted/binary,
" <> \"[\" <> int.to_string(idx) <> \"]\""/utf8>>,
case array_items_of(Items_schema, Ctx) of
{some, Inner_items} ->
_pipe@4 = Sb,
_pipe@5 = oaspec@internal@util@string_extra:indent(
_pipe@4,
Indent_base,
<<<<<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = list.index_fold("/utf8>>/binary,
List_expr/binary>>/binary,
", "/utf8>>/binary,
Parts_var/binary>>/binary,
", fn(acc, item, idx) {"/utf8>>
),
_pipe@6 = emit_array_fold(
_pipe@5,
Element_key_expr@1,
<<"item"/utf8>>,
Inner_items,
Indent_base + 1,
<<"acc"/utf8>>,
Parent_path,
Ctx
),
_pipe@7 = oaspec@internal@util@string_extra:indent(
_pipe@6,
Indent_base + 1,
<<"acc"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@7,
Indent_base,
<<"})"/utf8>>
);
none ->
Sb
end;
{false, false} ->
Item_value_expr = case oaspec@internal@codegen@schema_dispatch:to_string_fn(
Items_schema,
Ctx
) of
<<"fn(x) { x }"/utf8>> ->
<<"item"/utf8>>;
Fn_name ->
<<Fn_name/binary, "(item)"/utf8>>
end,
_pipe@8 = Sb,
_pipe@9 = oaspec@internal@util@string_extra:indent(
_pipe@8,
Indent_base,
<<<<<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = list.fold("/utf8>>/binary,
List_expr/binary>>/binary,
", "/utf8>>/binary,
Parts_var/binary>>/binary,
", fn(acc, item) {"/utf8>>
),
_pipe@10 = oaspec@internal@util@string_extra:indent(
_pipe@9,
Indent_base + 1,
<<<<<<<<"["/utf8, Key_prefix_quoted/binary>>/binary,
" <> \"=\" <> uri.percent_encode("/utf8>>/binary,
Item_value_expr/binary>>/binary,
"), ..acc]"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@10,
Indent_base,
<<"})"/utf8>>
)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 874).
?DOC(false).
-spec emit_form_object_recurse(
gleam@string_tree:string_tree(),
binary(),
binary(),
oaspec@internal@openapi@schema:schema_ref(),
boolean(),
integer(),
binary(),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
emit_form_object_recurse(
Sb,
Key_prefix_quoted,
Accessor,
Schema_ref,
_,
Indent_base,
Parts_var,
Parent_path,
Ctx
) ->
Resolved = oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
),
case Resolved of
{ok, {object_schema, _, Properties, Required, _, _, _}} ->
Props = oaspec@internal@codegen@ir_build:sorted_entries(Properties),
gleam@list:fold(
Props,
Sb,
fun(Sb@1, Entry) ->
{Prop_name, Prop_ref} = Entry,
Prop_field = oaspec@internal@util@naming:to_snake_case(
Prop_name
),
Prop_accessor = <<<<Accessor/binary, "."/utf8>>/binary,
Prop_field/binary>>,
Prop_required = gleam@list:contains(Required, Prop_name),
Sub_key_quoted = <<<<<<Key_prefix_quoted/binary,
" <> \"["/utf8>>/binary,
Prop_name/binary>>/binary,
"]\""/utf8>>,
Nested_parent = <<<<Parent_path/binary, "_"/utf8>>/binary,
Prop_field/binary>>,
case oaspec@internal@codegen@schema_utils:constant_property_value(
Prop_ref,
Prop_name,
Required
) of
{some, Constant} ->
_pipe = Sb@1,
oaspec@internal@util@string_extra:indent(
_pipe,
Indent_base,
<<<<<<<<<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = ["/utf8>>/binary,
Sub_key_quoted/binary>>/binary,
" <> \"=\" <> uri.percent_encode(\""/utf8>>/binary,
Constant/binary>>/binary,
"\"), .."/utf8>>/binary,
Parts_var/binary>>/binary,
"]"/utf8>>
);
none ->
emit_form_field(
Sb@1,
Sub_key_quoted,
Prop_accessor,
Prop_ref,
Prop_required,
Indent_base,
Parts_var,
Prop_name,
Parent_path,
Nested_parent,
Ctx
)
end
end
);
_ ->
Sb
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1071).
?DOC(false).
-spec generate_form_nested_object(
gleam@string_tree:string_tree(),
binary(),
binary(),
oaspec@internal@openapi@schema:schema_ref(),
boolean(),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
generate_form_nested_object(
Sb,
Field_name,
Gleam_field,
Field_schema,
Is_required,
Parent_path,
Ctx
) ->
Nested_parent = <<<<Parent_path/binary, "_"/utf8>>/binary,
Gleam_field/binary>>,
Resolved = oaspec@internal@codegen@context:resolve_schema_ref(
Field_schema,
Ctx
),
Sub_props = case Resolved of
{ok, {object_schema, _, Properties, Required, _, _, _}} ->
{oaspec@internal@codegen@ir_build:sorted_entries(Properties),
Required};
_ ->
{[], []}
end,
{Props, Required_fields} = Sub_props,
Accessor_prefix = case Is_required of
true ->
<<"body."/utf8, Gleam_field/binary>>;
false ->
<<"obj"/utf8>>
end,
Sb@1 = case Is_required of
true ->
Sb;
false ->
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
1,
<<<<"let form_parts = case body."/utf8, Gleam_field/binary>>/binary,
" {"/utf8>>
),
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
2,
<<"Some(obj) -> {"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@2,
3,
<<"let fp = form_parts"/utf8>>
)
end,
Indent_base = case Is_required of
true ->
1;
false ->
3
end,
Parts_var = case Is_required of
true ->
<<"form_parts"/utf8>>;
false ->
<<"fp"/utf8>>
end,
Sb@3 = gleam@list:fold(
Props,
Sb@1,
fun(Sb@2, Entry) ->
{Sub_name, Sub_ref} = Entry,
Sub_field = oaspec@internal@util@naming:to_snake_case(Sub_name),
Sub_accessor = <<<<Accessor_prefix/binary, "."/utf8>>/binary,
Sub_field/binary>>,
Sub_required = gleam@list:contains(Required_fields, Sub_name),
Is_sub_object = case Sub_ref of
{inline, {object_schema, _, _, _, _, _, _}} ->
true;
{reference, _, _} = Sr ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Sr,
Ctx
) of
{ok, {object_schema, _, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end,
Is_sub_array = case Sub_ref of
{inline, {array_schema, _, _, _, _, _}} ->
true;
{reference, _, _} = Sr@1 ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Sr@1,
Ctx
) of
{ok, {array_schema, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end,
Sub_constant = oaspec@internal@codegen@schema_utils:constant_property_value(
Sub_ref,
Sub_name,
Required_fields
),
gleam@bool:lazy_guard(case Sub_constant of
{some, _} ->
true;
none ->
false
end, fun() -> case Sub_constant of
{some, Constant} ->
_pipe@3 = Sb@2,
oaspec@internal@util@string_extra:indent(
_pipe@3,
Indent_base,
<<<<<<<<<<<<<<<<<<<<"let "/utf8,
Parts_var/binary>>/binary,
" = [\""/utf8>>/binary,
Field_name/binary>>/binary,
"["/utf8>>/binary,
Sub_name/binary>>/binary,
"]=\" <> uri.percent_encode(\""/utf8>>/binary,
Constant/binary>>/binary,
"\"), .."/utf8>>/binary,
Parts_var/binary>>/binary,
"]"/utf8>>
);
none ->
Sb@2
end end, fun() -> case {Is_sub_object, Is_sub_array} of
{true, _} ->
generate_form_bracket_fields(
Sb@2,
<<<<<<Field_name/binary, "["/utf8>>/binary,
Sub_name/binary>>/binary,
"]"/utf8>>,
Sub_accessor,
Sub_ref,
Sub_required,
Indent_base,
Parts_var,
<<<<Nested_parent/binary, "_"/utf8>>/binary,
Sub_field/binary>>,
Ctx
);
{_, true} ->
case array_items_of(Sub_ref, Ctx) of
{some, Items_schema} ->
generate_form_indexed_array(
Sb@2,
<<<<<<<<"\""/utf8, Field_name/binary>>/binary,
"["/utf8>>/binary,
Sub_name/binary>>/binary,
"]\""/utf8>>,
Sub_accessor,
Items_schema,
Sub_required,
Indent_base,
Parts_var,
<<<<Nested_parent/binary, "_"/utf8>>/binary,
Sub_field/binary>>,
Ctx
);
none ->
Sb@2
end;
{false, false} ->
To_str = form_field_to_string_fn(
Sub_ref,
Sub_name,
Nested_parent,
Ctx
),
case Sub_required of
true ->
Value_expr = case To_str of
<<""/utf8>> ->
Sub_accessor;
Fn_name ->
<<<<<<Fn_name/binary, "("/utf8>>/binary,
Sub_accessor/binary>>/binary,
")"/utf8>>
end,
_pipe@4 = Sb@2,
oaspec@internal@util@string_extra:indent(
_pipe@4,
Indent_base,
<<<<<<<<<<<<<<<<<<<<"let "/utf8,
Parts_var/binary>>/binary,
" = [\""/utf8>>/binary,
Field_name/binary>>/binary,
"["/utf8>>/binary,
Sub_name/binary>>/binary,
"]=\" <> uri.percent_encode("/utf8>>/binary,
Value_expr/binary>>/binary,
"), .."/utf8>>/binary,
Parts_var/binary>>/binary,
"]"/utf8>>
);
false ->
_pipe@5 = Sb@2,
_pipe@6 = oaspec@internal@util@string_extra:indent(
_pipe@5,
Indent_base,
<<<<<<<<"let "/utf8, Parts_var/binary>>/binary,
" = case "/utf8>>/binary,
Sub_accessor/binary>>/binary,
" {"/utf8>>
),
_pipe@7 = oaspec@internal@util@string_extra:indent(
_pipe@6,
Indent_base + 1,
<<<<<<<<<<<<<<<<"Some(v) -> [\""/utf8,
Field_name/binary>>/binary,
"["/utf8>>/binary,
Sub_name/binary>>/binary,
"]=\" <> uri.percent_encode("/utf8>>/binary,
((case To_str of
<<""/utf8>> ->
<<"v"/utf8>>;
Fn_name@1 ->
<<Fn_name@1/binary,
"(v)"/utf8>>
end))/binary>>/binary,
"), .."/utf8>>/binary,
Parts_var/binary>>/binary,
"]"/utf8>>
),
_pipe@8 = oaspec@internal@util@string_extra:indent(
_pipe@7,
Indent_base + 1,
<<"None -> "/utf8, Parts_var/binary>>
),
oaspec@internal@util@string_extra:indent(
_pipe@8,
Indent_base,
<<"}"/utf8>>
)
end
end end)
end
),
case Is_required of
true ->
Sb@3;
false ->
_pipe@9 = Sb@3,
_pipe@10 = oaspec@internal@util@string_extra:indent(
_pipe@9,
3,
<<"fp"/utf8>>
),
_pipe@11 = oaspec@internal@util@string_extra:indent(
_pipe@10,
2,
<<"}"/utf8>>
),
_pipe@12 = oaspec@internal@util@string_extra:indent(
_pipe@11,
2,
<<"None -> form_parts"/utf8>>
),
oaspec@internal@util@string_extra:indent(_pipe@12, 1, <<"}"/utf8>>)
end.
-file("src/oaspec/internal/codegen/client_request.gleam", 1594).
?DOC(false).
-spec generate_form_urlencoded_body(
gleam@string_tree:string_tree(),
oaspec@internal@openapi@spec:request_body(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
generate_form_urlencoded_body(Sb, Rb, Op_id, Ctx) ->
Parent_name = <<(oaspec@internal@util@naming:to_snake_case(Op_id))/binary,
"_request"/utf8>>,
Content_entries = oaspec@internal@codegen@ir_build:sorted_entries(
erlang:element(3, Rb)
),
{Properties@2, Required_fields, Encoding} = case Content_entries of
[{_, Media_type} | _] ->
case erlang:element(2, Media_type) of
{some,
{inline, {object_schema, _, Properties, Required, _, _, _}}} ->
{oaspec@internal@codegen@ir_build:sorted_entries(Properties),
Required,
erlang:element(5, Media_type)};
{some, {reference, _, _} = Schema_ref} ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Schema_ref,
Ctx
) of
{ok,
{object_schema,
_,
Properties@1,
Required@1,
_,
_,
_}} ->
{oaspec@internal@codegen@ir_build:sorted_entries(
Properties@1
),
Required@1,
erlang:element(5, Media_type)};
_ ->
{[], [], maps:new()}
end;
_ ->
{[], [], maps:new()}
end;
_ ->
{[], [], maps:new()}
end,
Sb@1 = begin
_pipe = Sb,
oaspec@internal@util@string_extra:indent(
_pipe,
1,
<<"let form_parts = []"/utf8>>
)
end,
Sb@3 = gleam@list:fold(
Properties@2,
Sb@1,
fun(Sb@2, Prop) ->
{Field_name, Field_schema} = Prop,
Gleam_field = oaspec@internal@util@naming:to_snake_case(Field_name),
Is_required = gleam@list:contains(Required_fields, Field_name),
gleam@bool:lazy_guard(
(case oaspec@internal@codegen@schema_utils:constant_property_value(
Field_schema,
Field_name,
Required_fields
) of
{some, _} ->
true;
none ->
false
end),
fun() ->
case oaspec@internal@codegen@schema_utils:constant_property_value(
Field_schema,
Field_name,
Required_fields
) of
{some, Constant} ->
_pipe@1 = Sb@2,
oaspec@internal@util@string_extra:indent(
_pipe@1,
1,
<<<<<<<<"let form_parts = [\""/utf8,
Field_name/binary>>/binary,
"=\" <> uri.percent_encode(\""/utf8>>/binary,
Constant/binary>>/binary,
"\"), ..form_parts]"/utf8>>
);
none ->
Sb@2
end
end,
fun() ->
Is_array = case Field_schema of
{inline, {array_schema, _, _, _, _, _}} ->
true;
{reference, _, _} = Sr ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Sr,
Ctx
) of
{ok, {array_schema, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end,
Is_object = case Field_schema of
{inline, {object_schema, _, _, _, _, _, _}} ->
true;
{reference, _, _} = Sr@1 ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Sr@1,
Ctx
) of
{ok, {object_schema, _, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end,
Array_items = case Is_array of
true ->
array_items_of(Field_schema, Ctx);
false ->
none
end,
Is_array_of_object = case Array_items of
{some, Items} ->
schema_resolves_to_object(Items, Ctx);
none ->
false
end,
Is_composite = field_resolves_to_composite(
Field_schema,
Ctx
),
Json_escape_hatch = form_encoding_is_json(
Encoding,
Field_name
)
orelse Is_composite,
gleam@bool:lazy_guard(
Json_escape_hatch,
fun() ->
Value_expr = <<"body."/utf8, Gleam_field/binary>>,
case Is_required of
true ->
Inner = form_field_json_encoder_expr(
Field_schema,
Value_expr,
Ctx
),
_pipe@2 = Sb@2,
oaspec@internal@util@string_extra:indent(
_pipe@2,
1,
<<<<<<<<"let form_parts = [\""/utf8,
Field_name/binary>>/binary,
"=\" <> uri.percent_encode(json.to_string("/utf8>>/binary,
Inner/binary>>/binary,
")), ..form_parts]"/utf8>>
);
false ->
Inner@1 = form_field_json_encoder_expr(
Field_schema,
<<"v"/utf8>>,
Ctx
),
_pipe@3 = Sb@2,
_pipe@4 = oaspec@internal@util@string_extra:indent(
_pipe@3,
1,
<<<<"let form_parts = case body."/utf8,
Gleam_field/binary>>/binary,
" {"/utf8>>
),
_pipe@5 = oaspec@internal@util@string_extra:indent(
_pipe@4,
2,
<<<<<<<<"Some(v) -> [\""/utf8,
Field_name/binary>>/binary,
"=\" <> uri.percent_encode(json.to_string("/utf8>>/binary,
Inner@1/binary>>/binary,
")), ..form_parts]"/utf8>>
),
_pipe@6 = oaspec@internal@util@string_extra:indent(
_pipe@5,
2,
<<"None -> form_parts"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@6,
1,
<<"}"/utf8>>
)
end
end,
fun() -> case {Is_object, Is_array_of_object} of
{true, _} ->
generate_form_nested_object(
Sb@2,
Field_name,
Gleam_field,
Field_schema,
Is_required,
Parent_name,
Ctx
);
{_, true} ->
case Array_items of
{some, Items_schema} ->
generate_form_indexed_array(
Sb@2,
<<<<"\""/utf8,
Field_name/binary>>/binary,
"\""/utf8>>,
<<"body."/utf8,
Gleam_field/binary>>,
Items_schema,
Is_required,
1,
<<"form_parts"/utf8>>,
<<<<Parent_name/binary,
"_"/utf8>>/binary,
Gleam_field/binary>>,
Ctx
);
none ->
Sb@2
end;
{false, false} ->
case Is_array of
true ->
case Is_required of
true ->
_pipe@7 = Sb@2,
_pipe@8 = oaspec@internal@util@string_extra:indent(
_pipe@7,
1,
<<<<"let form_parts = list.fold(body."/utf8,
Gleam_field/binary>>/binary,
", form_parts, fn(acc, item) {"/utf8>>
),
_pipe@9 = oaspec@internal@util@string_extra:indent(
_pipe@8,
2,
<<<<<<<<"[\""/utf8,
Field_name/binary>>/binary,
"=\" <> uri.percent_encode("/utf8>>/binary,
(form_array_item_to_string(
Field_schema,
Ctx
))/binary>>/binary,
"), ..acc]"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@9,
1,
<<"})"/utf8>>
);
false ->
_pipe@10 = Sb@2,
_pipe@11 = oaspec@internal@util@string_extra:indent(
_pipe@10,
1,
<<<<"let form_parts = case body."/utf8,
Gleam_field/binary>>/binary,
" {"/utf8>>
),
_pipe@12 = oaspec@internal@util@string_extra:indent(
_pipe@11,
2,
<<"Some(items) -> list.fold(items, form_parts, fn(acc, item) {"/utf8>>
),
_pipe@13 = oaspec@internal@util@string_extra:indent(
_pipe@12,
3,
<<<<<<<<"[\""/utf8,
Field_name/binary>>/binary,
"=\" <> uri.percent_encode("/utf8>>/binary,
(form_array_item_to_string(
Field_schema,
Ctx
))/binary>>/binary,
"), ..acc]"/utf8>>
),
_pipe@14 = oaspec@internal@util@string_extra:indent(
_pipe@13,
2,
<<"})"/utf8>>
),
_pipe@15 = oaspec@internal@util@string_extra:indent(
_pipe@14,
2,
<<"None -> form_parts"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@15,
1,
<<"}"/utf8>>
)
end;
false ->
To_str = form_field_to_string_fn(
Field_schema,
Field_name,
Parent_name,
Ctx
),
case Is_required of
true ->
Value_expr@1 = case To_str of
<<""/utf8>> ->
<<"body."/utf8,
Gleam_field/binary>>;
Fn_name ->
<<<<<<Fn_name/binary,
"(body."/utf8>>/binary,
Gleam_field/binary>>/binary,
")"/utf8>>
end,
_pipe@16 = Sb@2,
oaspec@internal@util@string_extra:indent(
_pipe@16,
1,
<<<<<<<<"let form_parts = [\""/utf8,
Field_name/binary>>/binary,
"=\" <> uri.percent_encode("/utf8>>/binary,
Value_expr@1/binary>>/binary,
"), ..form_parts]"/utf8>>
);
false ->
_pipe@17 = Sb@2,
_pipe@18 = oaspec@internal@util@string_extra:indent(
_pipe@17,
1,
<<<<"let form_parts = case body."/utf8,
Gleam_field/binary>>/binary,
" {"/utf8>>
),
_pipe@19 = oaspec@internal@util@string_extra:indent(
_pipe@18,
2,
<<<<<<<<"Some(v) -> [\""/utf8,
Field_name/binary>>/binary,
"=\" <> uri.percent_encode("/utf8>>/binary,
((case To_str of
<<""/utf8>> ->
<<"v"/utf8>>;
Fn_name@1 ->
<<Fn_name@1/binary,
"(v)"/utf8>>
end))/binary>>/binary,
"), ..form_parts]"/utf8>>
),
_pipe@20 = oaspec@internal@util@string_extra:indent(
_pipe@19,
2,
<<"None -> form_parts"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@20,
1,
<<"}"/utf8>>
)
end
end
end end
)
end
)
end
),
_pipe@21 = Sb@3,
_pipe@22 = oaspec@internal@util@string_extra:indent(
_pipe@21,
1,
<<"let body_str = string.join(form_parts, \"&\")"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@22,
1,
<<"let body_content_type = \"application/x-www-form-urlencoded\""/utf8>>
).