-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 -> <<<<<>/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 -> <> 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 = <<<>/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 = <<<>/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, <<<<<>/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 -> <<<<<>/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 -> <> 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 -> <<<<<>/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 -> <> 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 = < \"[\" <> 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>>, <>, 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 = < \"[\" <> 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 -> <> 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 = <<<>/binary, Prop_field/binary>>, Prop_required = gleam@list:contains(Required, Prop_name), Sub_key_quoted = <<<<< \"["/utf8>>/binary, Prop_name/binary>>/binary, "]\""/utf8>>, Nested_parent = <<<>/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 = <<<>/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 = <<<>/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, <<<<<>/binary, Sub_name/binary>>/binary, "]"/utf8>>, Sub_accessor, Sub_ref, Sub_required, Indent_base, Parts_var, <<<>/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, <<<>/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 -> <<<<<>/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 -> <> 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>>, <<<>/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 -> <<<<<>/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 -> <> 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>> ).