-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, generate_form_urlencoded_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]). -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). -file("src/oaspec/internal/codegen/client_request.gleam", 25). ?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", 47). ?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", 63). ?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", 147). ?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", 157). ?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", 192). ?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", 216). ?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}] -> 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; [] -> <<"String"/utf8>> end. -file("src/oaspec/internal/codegen/client_request.gleam", 101). ?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", 238). ?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", 376). ?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", 391). ?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", 270). ?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, _, Ctx) -> 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), Is_binary = multipart_field_is_binary(Field_schema, Ctx), To_string_fn = case Is_binary of true -> <<""/utf8>>; false -> multipart_field_to_string_fn(Field_schema, Ctx) end, 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@2 = Sb@2, oaspec@internal@util@string_extra:indent( _pipe@2, 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@3 = Sb@2, _pipe@4 = oaspec@internal@util@string_extra:indent( _pipe@3, 1, <<<<"let parts = case body."/utf8, Gleam_field/binary>>/binary, " {"/utf8>> ), _pipe@5 = oaspec@internal@util@string_extra:indent( _pipe@4, 2, <<<<<<<<"Some(v) -> ["/utf8, Part_header/binary>>/binary, " <> "/utf8>>/binary, Value_expr@1/binary>>/binary, " <> \"\\r\\n\", ..parts]"/utf8>> ), _pipe@6 = oaspec@internal@util@string_extra:indent( _pipe@5, 2, <<"None -> parts"/utf8>> ), oaspec@internal@util@string_extra:indent( _pipe@6, 1, <<"}"/utf8>> ) end end ), _pipe@7 = Sb@3, _pipe@8 = oaspec@internal@util@string_extra:indent( _pipe@7, 1, <<"let body_str = string.join(parts, \"\") <> \"--\" <> boundary <> \"--\\r\\n\""/utf8>> ), oaspec@internal@util@string_extra:indent( _pipe@8, 1, <<"let body_content_type = \"multipart/form-data; boundary=\" <> boundary"/utf8>> ). -file("src/oaspec/internal/codegen/client_request.gleam", 405). ?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 ); _ -> <<"string.inspect(item)"/utf8>> end. -file("src/oaspec/internal/codegen/client_request.gleam", 551). ?DOC(false). -spec generate_form_bracket_fields( gleam@string_tree:string_tree(), binary(), binary(), oaspec@internal@openapi@schema:schema_ref(), boolean(), integer(), binary(), oaspec@internal@codegen@context:context() ) -> gleam@string_tree:string_tree(). generate_form_bracket_fields( Sb, Key_prefix, Accessor_prefix, Field_schema, _, Indent_base, Parts_var, 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, case Is_obj of true -> generate_form_bracket_fields( Sb@1, <<<<<>/binary, Prop_name/binary>>/binary, "]"/utf8>>, Prop_accessor, Prop_ref, Prop_required, Indent_base, Parts_var, Ctx ); false -> To_str = multipart_field_to_string_fn(Prop_ref, 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 = 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, Value_expr/binary>>/binary, "), .."/utf8>>/binary, Parts_var/binary>>/binary, "]"/utf8>> ); false -> _pipe@1 = Sb@1, _pipe@2 = oaspec@internal@util@string_extra:indent( _pipe@1, Indent_base, <<<<<<<<"let "/utf8, Parts_var/binary>>/binary, " = case "/utf8>>/binary, Prop_accessor/binary>>/binary, " {"/utf8>> ), _pipe@3 = oaspec@internal@util@string_extra:indent( _pipe@2, 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@4 = oaspec@internal@util@string_extra:indent( _pipe@3, Indent_base + 1, <<"None -> "/utf8, Parts_var/binary>> ), oaspec@internal@util@string_extra:indent( _pipe@4, Indent_base, <<"}"/utf8>> ) end end end ); _ -> Sb end. -file("src/oaspec/internal/codegen/client_request.gleam", 418). ?DOC(false). -spec generate_form_nested_object( gleam@string_tree:string_tree(), binary(), binary(), oaspec@internal@openapi@schema:schema_ref(), boolean(), oaspec@internal@codegen@context:context() ) -> gleam@string_tree:string_tree(). generate_form_nested_object( Sb, Field_name, Gleam_field, Field_schema, Is_required, Ctx ) -> 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, case Is_sub_object of true -> generate_form_bracket_fields( Sb@2, <<<<<>/binary, Sub_name/binary>>/binary, "]"/utf8>>, Sub_accessor, Sub_ref, Sub_required, Indent_base, Parts_var, Ctx ); false -> To_str = multipart_field_to_string_fn(Sub_ref, 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@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, Value_expr/binary>>/binary, "), .."/utf8>>/binary, Parts_var/binary>>/binary, "]"/utf8>> ); false -> _pipe@4 = Sb@2, _pipe@5 = oaspec@internal@util@string_extra:indent( _pipe@4, Indent_base, <<<<<<<<"let "/utf8, Parts_var/binary>>/binary, " = case "/utf8>>/binary, Sub_accessor/binary>>/binary, " {"/utf8>> ), _pipe@6 = oaspec@internal@util@string_extra:indent( _pipe@5, 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@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 end end ), case Is_required of true -> Sb@3; false -> _pipe@8 = Sb@3, _pipe@9 = oaspec@internal@util@string_extra:indent( _pipe@8, 3, <<"fp"/utf8>> ), _pipe@10 = oaspec@internal@util@string_extra:indent( _pipe@9, 2, <<"}"/utf8>> ), _pipe@11 = oaspec@internal@util@string_extra:indent( _pipe@10, 2, <<"None -> form_parts"/utf8>> ), oaspec@internal@util@string_extra:indent(_pipe@11, 1, <<"}"/utf8>>) end. -file("src/oaspec/internal/codegen/client_request.gleam", 650). ?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, _, Ctx) -> 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, 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), 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, case Is_object of true -> generate_form_nested_object( Sb@2, Field_name, Gleam_field, Field_schema, Is_required, Ctx ); false -> case Is_array of true -> case Is_required of true -> _pipe@1 = Sb@2, _pipe@2 = oaspec@internal@util@string_extra:indent( _pipe@1, 1, <<<<"let form_parts = list.fold(body."/utf8, Gleam_field/binary>>/binary, ", form_parts, fn(acc, item) {"/utf8>> ), _pipe@3 = oaspec@internal@util@string_extra:indent( _pipe@2, 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@3, 1, <<"})"/utf8>> ); false -> _pipe@4 = Sb@2, _pipe@5 = oaspec@internal@util@string_extra:indent( _pipe@4, 1, <<<<"let form_parts = case body."/utf8, Gleam_field/binary>>/binary, " {"/utf8>> ), _pipe@6 = oaspec@internal@util@string_extra:indent( _pipe@5, 2, <<"Some(items) -> list.fold(items, form_parts, fn(acc, item) {"/utf8>> ), _pipe@7 = oaspec@internal@util@string_extra:indent( _pipe@6, 3, <<<<<<<<"[\""/utf8, Field_name/binary>>/binary, "=\" <> uri.percent_encode("/utf8>>/binary, (form_array_item_to_string( Field_schema, Ctx ))/binary>>/binary, "), ..acc]"/utf8>> ), _pipe@8 = oaspec@internal@util@string_extra:indent( _pipe@7, 2, <<"})"/utf8>> ), _pipe@9 = oaspec@internal@util@string_extra:indent( _pipe@8, 2, <<"None -> form_parts"/utf8>> ), oaspec@internal@util@string_extra:indent( _pipe@9, 1, <<"}"/utf8>> ) end; false -> To_str = multipart_field_to_string_fn( Field_schema, Ctx ), case Is_required of true -> Value_expr = case To_str of <<""/utf8>> -> <<"body."/utf8, Gleam_field/binary>>; Fn_name -> <<<<<>/binary, Gleam_field/binary>>/binary, ")"/utf8>> end, _pipe@10 = Sb@2, oaspec@internal@util@string_extra:indent( _pipe@10, 1, <<<<<<<<"let form_parts = [\""/utf8, Field_name/binary>>/binary, "=\" <> uri.percent_encode("/utf8>>/binary, Value_expr/binary>>/binary, "), ..form_parts]"/utf8>> ); false -> _pipe@11 = Sb@2, _pipe@12 = oaspec@internal@util@string_extra:indent( _pipe@11, 1, <<<<"let form_parts = case body."/utf8, Gleam_field/binary>>/binary, " {"/utf8>> ), _pipe@13 = oaspec@internal@util@string_extra:indent( _pipe@12, 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@14 = oaspec@internal@util@string_extra:indent( _pipe@13, 2, <<"None -> form_parts"/utf8>> ), oaspec@internal@util@string_extra:indent( _pipe@14, 1, <<"}"/utf8>> ) end end end end ), _pipe@15 = Sb@3, _pipe@16 = oaspec@internal@util@string_extra:indent( _pipe@15, 1, <<"let body_str = string.join(form_parts, \"&\")"/utf8>> ), oaspec@internal@util@string_extra:indent( _pipe@16, 1, <<"let body_content_type = \"application/x-www-form-urlencoded\""/utf8>> ). -file("src/oaspec/internal/codegen/client_request.gleam", 810). ?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", 832). ?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", 959). ?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", 968). ?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", 858). ?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", 915). ?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) -> 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 = 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.