-module(oaspec@codegen@server_request_decode). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/oaspec/codegen/server_request_decode.gleam"). -export([body_field_kind_needs_int/1, body_field_kind_needs_float/1, is_deep_object_param/2, deep_object_has_additional_properties/2, deep_object_param_has_optional_fields/2, request_body_uses_form_urlencoded/1, request_body_uses_multipart/1, operation_uses_form_urlencoded_body/1, operation_uses_multipart_body/1, object_properties_from_schema_ref/2, deep_object_has_untyped_additional_properties/2, form_urlencoded_body_has_nested_object/2, multipart_body_has_optional_fields/2, form_urlencoded_body_has_optional_fields/2, query_schema_needs_string/1, deep_object_param_needs_string/2, form_urlencoded_body_needs_string/2, query_schema_needs_int/1, deep_object_param_needs_int/2, query_schema_needs_float/1, deep_object_param_needs_float/2, param_parse_expr/2, query_required_expr_with_schema/3, query_required_expr/2, query_optional_expr_with_schema/3, query_optional_expr/2, deep_object_required_expr/4, deep_object_optional_expr/4, header_required_expr/2, cookie_required_expr/2, header_optional_expr/2, cookie_optional_expr/2, form_urlencoded_body_constructor_expr/3, body_field_kind/2, schema_ref_body_field_kind/2, multipart_body_needs_int/2, multipart_body_needs_float/2, form_urlencoded_body_needs_int/2, form_urlencoded_body_needs_float/2, multipart_body_constructor_expr/3, generate_body_decode_expr/3]). -export_type([deep_object_property/0, body_field_kind/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -type deep_object_property() :: {deep_object_property, binary(), binary(), oaspec@openapi@schema:schema_ref(), boolean()}. -type body_field_kind() :: body_field_unknown | body_field_string | body_field_int | body_field_float | body_field_bool | body_field_string_array | body_field_int_array | body_field_float_array | body_field_bool_array. -file("src/oaspec/codegen/server_request_decode.gleam", 92). -spec body_field_kind_needs_int(body_field_kind()) -> boolean(). body_field_kind_needs_int(Kind) -> case Kind of body_field_int -> true; body_field_int_array -> true; _ -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 99). -spec body_field_kind_needs_float(body_field_kind()) -> boolean(). body_field_kind_needs_float(Kind) -> case Kind of body_field_float -> true; body_field_float_array -> true; _ -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 298). -spec is_deep_object_param( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). is_deep_object_param(Param, Ctx) -> case {erlang:element(3, Param), erlang:element(7, Param), oaspec@openapi@spec:parameter_schema(Param)} of {in_query, {some, deep_object_style}, {some, {reference, _, _} = Schema_ref}} -> case oaspec@openapi@resolver:resolve_schema_ref( Schema_ref, erlang:element(2, Ctx) ) of {ok, {object_schema, _, _, _, _, _, _}} -> true; _ -> false end; {in_query, {some, deep_object_style}, {some, {inline, {object_schema, _, _, _, _, _, _}}}} -> true; {_, _, _} -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 314). -spec deep_object_properties( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> list(deep_object_property()). deep_object_properties(Param, Ctx) -> Details = case oaspec@openapi@spec:parameter_schema(Param) of {some, {reference, _, _} = Schema_ref} -> case oaspec@openapi@resolver:resolve_schema_ref( Schema_ref, erlang:element(2, Ctx) ) of {ok, {object_schema, _, Properties, Required, _, _, _}} -> {Properties, Required}; _ -> {maps:new(), []} end; {some, {inline, {object_schema, _, Properties@1, Required@1, _, _, _}}} -> {Properties@1, Required@1}; _ -> {maps:new(), []} end, {Properties@2, Required_fields} = Details, _pipe = oaspec@codegen@ir_build:sorted_entries(Properties@2), gleam@list:map( _pipe, fun(Entry) -> {Prop_name, Prop_ref} = Entry, {deep_object_property, Prop_name, oaspec@util@naming:to_snake_case(Prop_name), Prop_ref, gleam@list:contains(Required_fields, Prop_name)} end ). -file("src/oaspec/codegen/server_request_decode.gleam", 343). -spec deep_object_type_name( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), binary() ) -> binary(). deep_object_type_name(Param, Op_id) -> case oaspec@openapi@spec:parameter_schema(Param) of {some, {reference, _, Name}} -> <<"types."/utf8, (oaspec@util@naming:schema_to_type_name(Name))/binary>>; _ -> <<<<<<"types."/utf8, (oaspec@util@naming:schema_to_type_name(Op_id))/binary>>/binary, "Param"/utf8>>/binary, (oaspec@util@naming:to_pascal_case(erlang:element(2, Param)))/binary>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 448). -spec deep_object_has_additional_properties( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). deep_object_has_additional_properties(Param, Ctx) -> case oaspec@openapi@spec:parameter_schema(Param) of {some, {reference, _, _} = Schema_ref} -> case oaspec@openapi@resolver:resolve_schema_ref( Schema_ref, erlang:element(2, Ctx) ) of {ok, {object_schema, _, _, _, {typed, _}, _, _}} -> true; {ok, {object_schema, _, _, _, untyped, _, _}} -> true; _ -> false end; {some, {inline, {object_schema, _, _, _, {typed, _}, _, _}}} -> true; {some, {inline, {object_schema, _, _, _, untyped, _, _}}} -> true; _ -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 481). -spec deep_object_param_has_optional_fields( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). deep_object_param_has_optional_fields(Param, Ctx) -> case is_deep_object_param(Param, Ctx) of true -> gleam@list:any( deep_object_properties(Param, Ctx), fun(Prop) -> not erlang:element(5, Prop) end ); false -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 519). -spec deep_object_param_needs( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context(), fun((deep_object_property()) -> boolean()) ) -> boolean(). deep_object_param_needs(Param, Ctx, Predicate) -> case is_deep_object_param(Param, Ctx) of true -> gleam@list:any(deep_object_properties(Param, Ctx), Predicate); false -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 530). -spec request_body_uses_form_urlencoded( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()) ) -> boolean(). request_body_uses_form_urlencoded(Rb) -> gleam@dict:has_key( erlang:element(3, Rb), <<"application/x-www-form-urlencoded"/utf8>> ). -file("src/oaspec/codegen/server_request_decode.gleam", 534). -spec request_body_uses_multipart( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()) ) -> boolean(). request_body_uses_multipart(Rb) -> gleam@dict:has_key(erlang:element(3, Rb), <<"multipart/form-data"/utf8>>). -file("src/oaspec/codegen/server_request_decode.gleam", 538). -spec operation_uses_form_urlencoded_body( oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved()) ) -> boolean(). operation_uses_form_urlencoded_body(Operation) -> case erlang:element(7, Operation) of {some, {value, Rb}} -> request_body_uses_form_urlencoded(Rb); _ -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 547). -spec operation_uses_multipart_body( oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved()) ) -> boolean(). operation_uses_multipart_body(Operation) -> case erlang:element(7, Operation) of {some, {value, Rb}} -> request_body_uses_multipart(Rb); _ -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 556). -spec object_properties_from_schema_ref( oaspec@openapi@schema:schema_ref(), oaspec@codegen@context:context() ) -> list(deep_object_property()). object_properties_from_schema_ref(Schema_ref, Ctx) -> Details = case Schema_ref of {reference, _, _} = Schema_ref@1 -> case oaspec@openapi@resolver:resolve_schema_ref( Schema_ref@1, erlang:element(2, Ctx) ) of {ok, {object_schema, _, Properties, Required, _, _, _}} -> {Properties, Required}; _ -> {maps:new(), []} end; {inline, {object_schema, _, Properties@1, Required@1, _, _, _}} -> {Properties@1, Required@1}; _ -> {maps:new(), []} end, {Properties@2, Required_fields} = Details, _pipe = oaspec@codegen@ir_build:sorted_entries(Properties@2), gleam@list:map( _pipe, fun(Entry) -> {Prop_name, Prop_ref} = Entry, {deep_object_property, Prop_name, oaspec@util@naming:to_snake_case(Prop_name), Prop_ref, gleam@list:contains(Required_fields, Prop_name)} end ). -file("src/oaspec/codegen/server_request_decode.gleam", 582). -spec form_urlencoded_body_properties( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> list(deep_object_property()). form_urlencoded_body_properties(Rb, Ctx) -> case gleam_stdlib:map_get( erlang:element(3, Rb), <<"application/x-www-form-urlencoded"/utf8>> ) of {ok, Media_type} -> case erlang:element(2, Media_type) of {some, Schema_ref} -> object_properties_from_schema_ref(Schema_ref, Ctx); none -> [] end; {error, _} -> [] end. -file("src/oaspec/codegen/server_request_decode.gleam", 597). -spec multipart_body_properties( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> list(deep_object_property()). multipart_body_properties(Rb, Ctx) -> case gleam_stdlib:map_get( erlang:element(3, Rb), <<"multipart/form-data"/utf8>> ) of {ok, Media_type} -> case erlang:element(2, Media_type) of {some, Schema_ref} -> object_properties_from_schema_ref(Schema_ref, Ctx); none -> [] end; {error, _} -> [] end. -file("src/oaspec/codegen/server_request_decode.gleam", 611). -spec schema_ref_resolves_to_object( oaspec@openapi@schema:schema_ref(), oaspec@codegen@context:context() ) -> boolean(). schema_ref_resolves_to_object(Schema_ref, Ctx) -> case Schema_ref of {inline, {object_schema, _, _, _, _, _, _}} -> true; {reference, _, _} = Schema_ref@1 -> case oaspec@openapi@resolver:resolve_schema_ref( Schema_ref@1, erlang:element(2, Ctx) ) of {ok, {object_schema, _, _, _, _, _, _}} -> true; _ -> false end; _ -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 623). -spec schema_ref_additional_properties( oaspec@openapi@schema:schema_ref(), oaspec@codegen@context:context() ) -> oaspec@openapi@schema:additional_properties(). schema_ref_additional_properties(Schema_ref, Ctx) -> case Schema_ref of {inline, {object_schema, _, _, _, Additional_properties, _, _}} -> Additional_properties; {reference, _, _} = Schema_ref@1 -> case oaspec@openapi@resolver:resolve_schema_ref( Schema_ref@1, erlang:element(2, Ctx) ) of {ok, {object_schema, _, _, _, Additional_properties@1, _, _}} -> Additional_properties@1; _ -> forbidden end; _ -> forbidden end. -file("src/oaspec/codegen/server_request_decode.gleam", 467). -spec deep_object_has_untyped_additional_properties( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). deep_object_has_untyped_additional_properties(Param, Ctx) -> case oaspec@openapi@spec:parameter_schema(Param) of {some, Schema_ref} -> case schema_ref_additional_properties(Schema_ref, Ctx) of untyped -> true; _ -> false end; none -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 638). -spec body_additional_properties( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), binary(), oaspec@codegen@context:context() ) -> oaspec@openapi@schema:additional_properties(). body_additional_properties(Rb, Content_type, Ctx) -> case gleam_stdlib:map_get(erlang:element(3, Rb), Content_type) of {ok, Media_type} -> case erlang:element(2, Media_type) of {some, Schema_ref} -> schema_ref_additional_properties(Schema_ref, Ctx); none -> forbidden end; {error, _} -> forbidden end. -file("src/oaspec/codegen/server_request_decode.gleam", 653). -spec form_urlencoded_schema_ref_type_name(oaspec@openapi@schema:schema_ref()) -> binary(). form_urlencoded_schema_ref_type_name(Schema_ref) -> case Schema_ref of {reference, _, Name} -> <<"types."/utf8, (oaspec@util@naming:schema_to_type_name(Name))/binary>>; _ -> <<"String"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 660). -spec form_urlencoded_body_type_name( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), binary() ) -> binary(). form_urlencoded_body_type_name(Rb, Op_id) -> case gleam_stdlib:map_get( erlang:element(3, Rb), <<"application/x-www-form-urlencoded"/utf8>> ) of {ok, Media_type} -> case erlang:element(2, Media_type) of {some, {reference, _, Name}} -> <<"types."/utf8, (oaspec@util@naming:schema_to_type_name(Name))/binary>>; {some, {inline, {object_schema, _, _, _, _, _, _}}} -> <<<<"types."/utf8, (oaspec@util@naming:schema_to_type_name(Op_id))/binary>>/binary, "Request"/utf8>>; _ -> <<"String"/utf8>> end; {error, _} -> <<"String"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 677). -spec multipart_body_type_name( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), binary() ) -> binary(). multipart_body_type_name(Rb, Op_id) -> case gleam_stdlib:map_get( erlang:element(3, Rb), <<"multipart/form-data"/utf8>> ) of {ok, Media_type} -> case erlang:element(2, Media_type) of {some, {reference, _, Name}} -> <<"types."/utf8, (oaspec@util@naming:schema_to_type_name(Name))/binary>>; {some, {inline, {object_schema, _, _, _, _, _, _}}} -> <<<<"types."/utf8, (oaspec@util@naming:schema_to_type_name(Op_id))/binary>>/binary, "Request"/utf8>>; _ -> <<"String"/utf8>> end; {error, _} -> <<"String"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 694). -spec form_urlencoded_key(binary(), binary()) -> binary(). form_urlencoded_key(Prefix, Name) -> case Prefix of <<""/utf8>> -> Name; _ -> <<<<<>/binary, Name/binary>>/binary, "]"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 848). -spec form_urlencoded_body_has_nested_object( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). form_urlencoded_body_has_nested_object(Rb, Ctx) -> gleam@list:any( form_urlencoded_body_properties(Rb, Ctx), fun(Prop) -> schema_ref_resolves_to_object(erlang:element(4, Prop), Ctx) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 895). -spec multipart_body_has_optional_fields( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). multipart_body_has_optional_fields(Rb, Ctx) -> gleam@list:any( multipart_body_properties(Rb, Ctx), fun(Prop) -> not erlang:element(5, Prop) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 926). -spec form_urlencoded_properties_have_optional_fields( list(deep_object_property()), oaspec@codegen@context:context(), boolean() ) -> boolean(). form_urlencoded_properties_have_optional_fields( Props, Ctx, Allow_nested_objects ) -> gleam@list:any( Props, fun(Prop) -> not erlang:element(5, Prop) orelse case Allow_nested_objects andalso schema_ref_resolves_to_object( erlang:element(4, Prop), Ctx ) of true -> form_urlencoded_properties_have_optional_fields( object_properties_from_schema_ref( erlang:element(4, Prop), Ctx ), Ctx, false ); false -> false end end ). -file("src/oaspec/codegen/server_request_decode.gleam", 804). -spec form_urlencoded_body_has_optional_fields( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). form_urlencoded_body_has_optional_fields(Rb, Ctx) -> form_urlencoded_properties_have_optional_fields( form_urlencoded_body_properties(Rb, Ctx), Ctx, true ). -file("src/oaspec/codegen/server_request_decode.gleam", 984). -spec form_urlencoded_properties_need( list(deep_object_property()), oaspec@codegen@context:context(), boolean(), fun((deep_object_property()) -> boolean()) ) -> boolean(). form_urlencoded_properties_need(Props, Ctx, Allow_nested_objects, Predicate) -> gleam@list:any( Props, fun(Prop) -> Predicate(Prop) orelse case Allow_nested_objects andalso schema_ref_resolves_to_object( erlang:element(4, Prop), Ctx ) of true -> form_urlencoded_properties_need( object_properties_from_schema_ref( erlang:element(4, Prop), Ctx ), Ctx, false, Predicate ); false -> false end end ). -file("src/oaspec/codegen/server_request_decode.gleam", 1008). -spec query_schema_needs_string( gleam@option:option(oaspec@openapi@schema:schema_ref()) ) -> boolean(). query_schema_needs_string(Schema_ref) -> case Schema_ref of {some, {inline, {array_schema, _, _, _, _, _}}} -> true; {some, {inline, {boolean_schema, _}}} -> true; _ -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 492). -spec deep_object_param_needs_string( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). deep_object_param_needs_string(Param, Ctx) -> deep_object_param_needs( Param, Ctx, fun(Prop) -> query_schema_needs_string({some, erlang:element(4, Prop)}) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 948). -spec form_urlencoded_properties_need_string( list(deep_object_property()), oaspec@codegen@context:context(), boolean() ) -> boolean(). form_urlencoded_properties_need_string(Props, Ctx, Allow_nested_objects) -> form_urlencoded_properties_need( Props, Ctx, Allow_nested_objects, fun(Prop) -> query_schema_needs_string({some, erlang:element(4, Prop)}) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 815). -spec form_urlencoded_body_needs_string( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). form_urlencoded_body_needs_string(Rb, Ctx) -> form_urlencoded_properties_need_string( form_urlencoded_body_properties(Rb, Ctx), Ctx, true ). -file("src/oaspec/codegen/server_request_decode.gleam", 1016). -spec query_schema_needs_int( gleam@option:option(oaspec@openapi@schema:schema_ref()) ) -> boolean(). query_schema_needs_int(Schema_ref) -> case Schema_ref of {some, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> true; {some, {inline, {array_schema, _, {inline, {integer_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> true; _ -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 501). -spec deep_object_param_needs_int( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). deep_object_param_needs_int(Param, Ctx) -> deep_object_param_needs( Param, Ctx, fun(Prop) -> query_schema_needs_int({some, erlang:element(4, Prop)}) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 1025). -spec query_schema_needs_float( gleam@option:option(oaspec@openapi@schema:schema_ref()) ) -> boolean(). query_schema_needs_float(Schema_ref) -> case Schema_ref of {some, {inline, {number_schema, _, _, _, _, _, _, _}}} -> true; {some, {inline, {array_schema, _, {inline, {number_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> true; _ -> false end. -file("src/oaspec/codegen/server_request_decode.gleam", 510). -spec deep_object_param_needs_float( oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). deep_object_param_needs_float(Param, Ctx) -> deep_object_param_needs( Param, Ctx, fun(Prop) -> query_schema_needs_float({some, erlang:element(4, Prop)}) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 1192). ?DOC(" Parse expression for array items: int, with optional trimming.\n"). -spec array_item_int_parse(boolean()) -> binary(). array_item_int_parse(Trim) -> case Trim of true -> <<"let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n"/utf8>>; false -> <<"let assert Ok(n) = int.parse(item) n"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 1201). ?DOC(" Parse expression for array items: float, with optional trimming.\n"). -spec array_item_float_parse(boolean()) -> binary(). array_item_float_parse(Trim) -> case Trim of true -> <<"let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n"/utf8>>; false -> <<"let assert Ok(n) = float.parse(item) n"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 107). ?DOC(" Generate parse expression for a path parameter (already bound as String).\n"). -spec param_parse_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()) ) -> binary(). param_parse_expr(Var_name, Param) -> case oaspec@openapi@spec:parameter_schema(Param) of {some, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> <<<<"{ let assert Ok(v) = int.parse("/utf8, Var_name/binary>>/binary, ") v }"/utf8>>; {some, {inline, {number_schema, _, _, _, _, _, _, _}}} -> <<<<"{ let assert Ok(v) = float.parse("/utf8, Var_name/binary>>/binary, ") v }"/utf8>>; {some, {inline, {boolean_schema, _}}} -> <<<<<<<<"{ let v = "/utf8, Var_name/binary>>/binary, " "/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, " }"/utf8>>; _ -> Var_name end. -file("src/oaspec/codegen/server_request_decode.gleam", 138). -spec query_required_expr_with_schema( binary(), gleam@option:option(oaspec@openapi@schema:schema_ref()), gleam@option:option(boolean()) ) -> binary(). query_required_expr_with_schema(Key, Schema_ref, Explode) -> Base = <<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") v }"/utf8>>, case Schema_ref of {some, {inline, {array_schema, _, {inline, {string_schema, _, _, _, _, _, _}}, _, _, _}}} -> case Explode of {some, false} -> <<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") list.map(string.split(v, \",\"), fn(item) { string.trim(item) }) }"/utf8>>; _ -> <<<<"{ let assert Ok(vs) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") list.map(vs, fn(item) { string.trim(item) }) }"/utf8>> end; {some, {inline, {array_schema, _, {inline, {integer_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> case Explode of {some, false} -> <<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n }) }"/utf8>>; _ -> <<<<"{ let assert Ok(vs) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n }) }"/utf8>> end; {some, {inline, {array_schema, _, {inline, {number_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> case Explode of {some, false} -> <<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n }) }"/utf8>>; _ -> <<<<"{ let assert Ok(vs) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n }) }"/utf8>> end; {some, {inline, {array_schema, _, {inline, {boolean_schema, _}}, _, _, _}}} -> case Explode of {some, false} -> <<<<<<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") list.map(string.split(v, \",\"), fn(item) { let v = string.trim(item) "/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, " }) }"/utf8>>; _ -> <<<<<<<<"{ let assert Ok(vs) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") list.map(vs, fn(item) { let v = string.trim(item) "/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, " }) }"/utf8>> end; {some, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> <<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") let assert Ok(n) = int.parse(v) n }"/utf8>>; {some, {inline, {number_schema, _, _, _, _, _, _, _}}} -> <<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") let assert Ok(n) = float.parse(v) n }"/utf8>>; {some, {inline, {boolean_schema, _}}} -> <<<<<<<<"{ let assert Ok([v, ..]) = dict.get(query, \""/utf8, Key/binary>>/binary, "\") "/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, " }"/utf8>>; _ -> Base end. -file("src/oaspec/codegen/server_request_decode.gleam", 127). ?DOC(" Generate expression for a required query parameter.\n"). -spec query_required_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()) ) -> binary(). query_required_expr(Key, Param) -> query_required_expr_with_schema( Key, oaspec@openapi@spec:parameter_schema(Param), erlang:element(8, Param) ). -file("src/oaspec/codegen/server_request_decode.gleam", 223). -spec query_optional_expr_with_schema( binary(), gleam@option:option(oaspec@openapi@schema:schema_ref()), gleam@option:option(boolean()) ) -> binary(). query_optional_expr_with_schema(Key, Schema_ref, Explode) -> case Schema_ref of {some, {inline, {array_schema, _, {inline, {string_schema, _, _, _, _, _, _}}, _, _, _}}} -> case Explode of {some, false} -> <<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok([v, ..]) -> Some(list.map(string.split(v, \",\"), fn(item) { string.trim(item) })) _ -> None }"/utf8>>; _ -> <<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok(vs) -> Some(list.map(vs, fn(item) { string.trim(item) })) _ -> None }"/utf8>> end; {some, {inline, {array_schema, _, {inline, {integer_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> case Explode of {some, false} -> <<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok([v, ..]) -> Some(list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n })) _ -> None }"/utf8>>; _ -> <<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok(vs) -> Some(list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = int.parse(trimmed) n })) _ -> None }"/utf8>> end; {some, {inline, {array_schema, _, {inline, {number_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> case Explode of {some, false} -> <<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok([v, ..]) -> Some(list.map(string.split(v, \",\"), fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n })) _ -> None }"/utf8>>; _ -> <<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok(vs) -> Some(list.map(vs, fn(item) { let trimmed = string.trim(item) let assert Ok(n) = float.parse(trimmed) n })) _ -> None }"/utf8>> end; {some, {inline, {array_schema, _, {inline, {boolean_schema, _}}, _, _, _}}} -> case Explode of {some, false} -> <<<<<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok([v, ..]) -> Some(list.map(string.split(v, \",\"), fn(item) { let v = string.trim(item) "/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, " })) _ -> None }"/utf8>>; _ -> <<<<<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok(vs) -> Some(list.map(vs, fn(item) { let v = string.trim(item) "/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, " })) _ -> None }"/utf8>> end; {some, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> <<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok([v, ..]) -> { case int.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>; {some, {inline, {number_schema, _, _, _, _, _, _, _}}} -> <<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok([v, ..]) -> { case float.parse(v) { Ok(n) -> Some(n) _ -> None } } _ -> None }"/utf8>>; {some, {inline, {boolean_schema, _}}} -> <<<<<<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok([v, ..]) -> Some("/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, ") _ -> None }"/utf8>>; _ -> <<<<"case dict.get(query, \""/utf8, Key/binary>>/binary, "\") { Ok([v, ..]) -> Some(v) _ -> None }"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 212). ?DOC(" Generate expression for an optional query parameter.\n"). -spec query_optional_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()) ) -> binary(). query_optional_expr(Key, Param) -> query_optional_expr_with_schema( Key, oaspec@openapi@spec:parameter_schema(Param), erlang:element(8, Param) ). -file("src/oaspec/codegen/server_request_decode.gleam", 390). -spec deep_object_constructor_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), binary(), oaspec@codegen@context:context() ) -> binary(). deep_object_constructor_expr(Key, Param, Op_id, Ctx) -> Fields = begin _pipe = deep_object_properties(Param, Ctx), gleam@list:map( _pipe, fun(Prop) -> Prop_key = <<<<<>/binary, (erlang:element(2, Prop))/binary>>/binary, "]"/utf8>>, Value_expr = case erlang:element(5, Prop) of true -> query_required_expr_with_schema( Prop_key, {some, erlang:element(4, Prop)}, {some, true} ); false -> query_optional_expr_with_schema( Prop_key, {some, erlang:element(4, Prop)}, {some, true} ) end, <<<<(erlang:element(3, Prop))/binary, ": "/utf8>>/binary, Value_expr/binary>> end ) end, Ap_kind = case oaspec@openapi@spec:parameter_schema(Param) of {some, Schema_ref} -> schema_ref_additional_properties(Schema_ref, Ctx); none -> forbidden end, Fields@1 = case Ap_kind of forbidden -> Fields; untyped -> Prop_names = begin _pipe@1 = deep_object_properties(Param, Ctx), _pipe@2 = gleam@list:map( _pipe@1, fun(Prop@1) -> <<<<"\""/utf8, (erlang:element(2, Prop@1))/binary>>/binary, "\""/utf8>> end ), gleam@string:join(_pipe@2, <<", "/utf8>>) end, Expr = <<<<<<<<"coerce_dict(deep_object_additional_properties(query, \""/utf8, Key/binary>>/binary, "\", ["/utf8>>/binary, Prop_names/binary>>/binary, "]))"/utf8>>, lists:append( Fields, [<<"additional_properties: "/utf8, Expr/binary>>] ); _ -> lists:append(Fields, [<<"additional_properties: dict.new()"/utf8>>]) end, Fields_str = gleam@string:join(Fields@1, <<", "/utf8>>), <<<<<<(deep_object_type_name(Param, Op_id))/binary, "("/utf8>>/binary, Fields_str/binary>>/binary, ")"/utf8>>. -file("src/oaspec/codegen/server_request_decode.gleam", 357). -spec deep_object_required_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), binary(), oaspec@codegen@context:context() ) -> binary(). deep_object_required_expr(Key, Param, Op_id, Ctx) -> deep_object_constructor_expr(Key, Param, Op_id, Ctx). -file("src/oaspec/codegen/server_request_decode.gleam", 366). -spec deep_object_optional_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()), binary(), oaspec@codegen@context:context() ) -> binary(). deep_object_optional_expr(Key, Param, Op_id, Ctx) -> Props = deep_object_properties(Param, Ctx), Prop_names = begin _pipe = Props, _pipe@1 = gleam@list:map( _pipe, fun(Prop) -> <<<<"\""/utf8, (erlang:element(2, Prop))/binary>>/binary, "\""/utf8>> end ), gleam@string:join(_pipe@1, <<", "/utf8>>) end, Has_untyped_ap = deep_object_has_untyped_additional_properties(Param, Ctx), Presence_check = case Has_untyped_ap of true -> <<<<"deep_object_present_any(query, \""/utf8, Key/binary>>/binary, "\")"/utf8>>; false -> <<<<<<<<"deep_object_present(query, \""/utf8, Key/binary>>/binary, "\", ["/utf8>>/binary, Prop_names/binary>>/binary, "])"/utf8>> end, <<<<<<<<"case "/utf8, Presence_check/binary>>/binary, " { True -> Some("/utf8>>/binary, (deep_object_constructor_expr(Key, Param, Op_id, Ctx))/binary>>/binary, ") False -> None }"/utf8>>. -file("src/oaspec/codegen/server_request_decode.gleam", 1210). ?DOC(" Parse expression for array items: bool, with optional trimming.\n"). -spec array_item_bool_parse(boolean()) -> binary(). array_item_bool_parse(Trim) -> case Trim of true -> <<"let v = string.trim(item) "/utf8, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>; false -> <<"let v = item "/utf8, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 1261). ?DOC( " Generate a required expression for a source that returns a single value.\n" " Used for headers (dict.get returns single string) and cookies.\n" " Header arrays are comma-separated in a single string value.\n" ). -spec single_value_required_expr( binary(), binary(), gleam@option:option(oaspec@openapi@schema:schema_ref()) ) -> binary(). single_value_required_expr(Lookup, Var, Schema_ref) -> Base = <<<<<<<<<<<<"{ let assert Ok("/utf8, Var/binary>>/binary, ") = "/utf8>>/binary, Lookup/binary>>/binary, " "/utf8>>/binary, Var/binary>>/binary, " }"/utf8>>, case Schema_ref of {some, {inline, {array_schema, _, {inline, {string_schema, _, _, _, _, _, _}}, _, _, _}}} -> <<<<<<<<<<<<"{ let assert Ok("/utf8, Var/binary>>/binary, ") = "/utf8>>/binary, Lookup/binary>>/binary, " list.map(string.split("/utf8>>/binary, Var/binary>>/binary, ", \",\"), fn(item) { string.trim(item) }) }"/utf8>>; {some, {inline, {array_schema, _, {inline, {integer_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> <<<<<<<<<<<<<<<<"{ let assert Ok("/utf8, Var/binary>>/binary, ") = "/utf8>>/binary, Lookup/binary>>/binary, " list.map(string.split("/utf8>>/binary, Var/binary>>/binary, ", \",\"), fn(item) { "/utf8>>/binary, (array_item_int_parse(true))/binary>>/binary, " }) }"/utf8>>; {some, {inline, {array_schema, _, {inline, {number_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> <<<<<<<<<<<<<<<<"{ let assert Ok("/utf8, Var/binary>>/binary, ") = "/utf8>>/binary, Lookup/binary>>/binary, " list.map(string.split("/utf8>>/binary, Var/binary>>/binary, ", \",\"), fn(item) { "/utf8>>/binary, (array_item_float_parse(true))/binary>>/binary, " }) }"/utf8>>; {some, {inline, {array_schema, _, {inline, {boolean_schema, _}}, _, _, _}}} -> <<<<<<<<<<<<<<<<"{ let assert Ok("/utf8, Var/binary>>/binary, ") = "/utf8>>/binary, Lookup/binary>>/binary, " list.map(string.split("/utf8>>/binary, Var/binary>>/binary, ", \",\"), fn(item) { "/utf8>>/binary, (array_item_bool_parse(true))/binary>>/binary, " }) }"/utf8>>; {some, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> <<<<<<<<<<<<"{ let assert Ok("/utf8, Var/binary>>/binary, ") = "/utf8>>/binary, Lookup/binary>>/binary, " let assert Ok(n) = int.parse("/utf8>>/binary, Var/binary>>/binary, ") n }"/utf8>>; {some, {inline, {number_schema, _, _, _, _, _, _, _}}} -> <<<<<<<<<<<<"{ let assert Ok("/utf8, Var/binary>>/binary, ") = "/utf8>>/binary, Lookup/binary>>/binary, " let assert Ok(n) = float.parse("/utf8>>/binary, Var/binary>>/binary, ") n }"/utf8>>; {some, {inline, {boolean_schema, _}}} -> <<<<<<<<<<<<"{ let assert Ok("/utf8, Var/binary>>/binary, ") = "/utf8>>/binary, Lookup/binary>>/binary, " "/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, " }"/utf8>>; _ -> Base end. -file("src/oaspec/codegen/server_request_decode.gleam", 1218). ?DOC(" Generate expression for a required header parameter.\n"). -spec header_required_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()) ) -> binary(). header_required_expr(Key, Param) -> Lookup = <<<<"dict.get(headers, \""/utf8, Key/binary>>/binary, "\")"/utf8>>, single_value_required_expr( Lookup, <<"v"/utf8>>, oaspec@openapi@spec:parameter_schema(Param) ). -file("src/oaspec/codegen/server_request_decode.gleam", 1236). ?DOC(" Generate expression for a required cookie parameter.\n"). -spec cookie_required_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()) ) -> binary(). cookie_required_expr(Key, Param) -> Lookup = <<<<"cookie_lookup(headers, \""/utf8, Key/binary>>/binary, "\")"/utf8>>, single_value_required_expr( Lookup, <<"v"/utf8>>, oaspec@openapi@spec:parameter_schema(Param) ). -file("src/oaspec/codegen/server_request_decode.gleam", 1335). ?DOC(" Generate an optional expression for a source that returns a single value.\n"). -spec single_value_optional_expr( binary(), binary(), binary(), gleam@option:option(oaspec@openapi@schema:schema_ref()) ) -> binary(). single_value_optional_expr(Lookup, Var, Miss, Schema_ref) -> case Schema_ref of {some, {inline, {array_schema, _, {inline, {string_schema, _, _, _, _, _, _}}, _, _, _}}} -> <<<<<<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok("/utf8>>/binary, Var/binary>>/binary, ") -> Some(list.map(string.split("/utf8>>/binary, Var/binary>>/binary, ", \",\"), fn(item) { string.trim(item) })) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; {some, {inline, {array_schema, _, {inline, {integer_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> <<<<<<<<<<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok("/utf8>>/binary, Var/binary>>/binary, ") -> Some(list.map(string.split("/utf8>>/binary, Var/binary>>/binary, ", \",\"), fn(item) { "/utf8>>/binary, (array_item_int_parse(true))/binary>>/binary, " })) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; {some, {inline, {array_schema, _, {inline, {number_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> <<<<<<<<<<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok("/utf8>>/binary, Var/binary>>/binary, ") -> Some(list.map(string.split("/utf8>>/binary, Var/binary>>/binary, ", \",\"), fn(item) { "/utf8>>/binary, (array_item_float_parse(true))/binary>>/binary, " })) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; {some, {inline, {array_schema, _, {inline, {boolean_schema, _}}, _, _, _}}} -> <<<<<<<<<<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok("/utf8>>/binary, Var/binary>>/binary, ") -> Some(list.map(string.split("/utf8>>/binary, Var/binary>>/binary, ", \",\"), fn(item) { "/utf8>>/binary, (array_item_bool_parse(true))/binary>>/binary, " })) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; {some, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> <<<<<<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok("/utf8>>/binary, Var/binary>>/binary, ") -> { case int.parse("/utf8>>/binary, Var/binary>>/binary, ") { Ok(n) -> Some(n) _ -> None } } "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; {some, {inline, {number_schema, _, _, _, _, _, _, _}}} -> <<<<<<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok("/utf8>>/binary, Var/binary>>/binary, ") -> { case float.parse("/utf8>>/binary, Var/binary>>/binary, ") { Ok(n) -> Some(n) _ -> None } } "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; {some, {inline, {boolean_schema, _}}} -> <<<<<<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok("/utf8>>/binary, Var/binary>>/binary, ") -> Some("/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, ") "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; _ -> <<<<<<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok("/utf8>>/binary, Var/binary>>/binary, ") -> Some("/utf8>>/binary, Var/binary>>/binary, ") "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 1227). ?DOC(" Generate expression for an optional header parameter.\n"). -spec header_optional_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()) ) -> binary(). header_optional_expr(Key, Param) -> Lookup = <<<<"dict.get(headers, \""/utf8, Key/binary>>/binary, "\")"/utf8>>, single_value_optional_expr( Lookup, <<"v"/utf8>>, <<"_"/utf8>>, oaspec@openapi@spec:parameter_schema(Param) ). -file("src/oaspec/codegen/server_request_decode.gleam", 1245). ?DOC(" Generate expression for an optional cookie parameter.\n"). -spec cookie_optional_expr( binary(), oaspec@openapi@spec:parameter(oaspec@openapi@spec:resolved()) ) -> binary(). cookie_optional_expr(Key, Param) -> Lookup = <<<<"cookie_lookup(headers, \""/utf8, Key/binary>>/binary, "\")"/utf8>>, single_value_optional_expr( Lookup, <<"v"/utf8>>, <<"Error(_)"/utf8>>, oaspec@openapi@spec:parameter_schema(Param) ). -file("src/oaspec/codegen/server_request_decode.gleam", 746). -spec form_urlencoded_object_required_expr( binary(), oaspec@openapi@schema:schema_ref(), oaspec@codegen@context:context(), integer() ) -> binary(). form_urlencoded_object_required_expr(Prefix, Schema_ref, Ctx, Nesting_depth) -> form_urlencoded_object_constructor_expr( form_urlencoded_schema_ref_type_name(Schema_ref), Prefix, object_properties_from_schema_ref(Schema_ref, Ctx), schema_ref_additional_properties(Schema_ref, Ctx), Ctx, Nesting_depth ). -file("src/oaspec/codegen/server_request_decode.gleam", 701). -spec form_urlencoded_object_constructor_expr( binary(), binary(), list(deep_object_property()), oaspec@openapi@schema:additional_properties(), oaspec@codegen@context:context(), integer() ) -> binary(). form_urlencoded_object_constructor_expr( Type_name, Prefix, Properties, Additional_properties, Ctx, Nesting_depth ) -> Fields = begin _pipe = Properties, _pipe@1 = gleam@list:map( _pipe, fun(Prop) -> Key = form_urlencoded_key(Prefix, erlang:element(2, Prop)), Value_expr = case {(Nesting_depth < 5) andalso schema_ref_resolves_to_object( erlang:element(4, Prop), Ctx ), erlang:element(5, Prop)} of {true, true} -> form_urlencoded_object_required_expr( Key, erlang:element(4, Prop), Ctx, Nesting_depth + 1 ); {true, false} -> form_urlencoded_object_optional_expr( Key, erlang:element(4, Prop), Ctx, Nesting_depth + 1 ); {false, true} -> form_body_required_expr_with_schema( Key, {some, erlang:element(4, Prop)}, Ctx ); {false, false} -> form_body_optional_expr_with_schema( Key, {some, erlang:element(4, Prop)}, Ctx ) end, <<<<(erlang:element(3, Prop))/binary, ": "/utf8>>/binary, Value_expr/binary>> end ), gleam@string:join(_pipe@1, <<", "/utf8>>) end, Additional_props_suffix = case Additional_properties of forbidden -> <<""/utf8>>; _ -> <<", additional_properties: dict.new()"/utf8>> end, <<<<<<<>/binary, Fields/binary>>/binary, Additional_props_suffix/binary>>/binary, ")"/utf8>>. -file("src/oaspec/codegen/server_request_decode.gleam", 762). -spec form_urlencoded_object_optional_expr( binary(), oaspec@openapi@schema:schema_ref(), oaspec@codegen@context:context(), integer() ) -> binary(). form_urlencoded_object_optional_expr(Prefix, Schema_ref, Ctx, Nesting_depth) -> Props = object_properties_from_schema_ref(Schema_ref, Ctx), Prop_names = begin _pipe = Props, _pipe@1 = gleam@list:map( _pipe, fun(Prop) -> <<<<"\""/utf8, (erlang:element(2, Prop))/binary>>/binary, "\""/utf8>> end ), gleam@string:join(_pipe@1, <<", "/utf8>>) end, <<<<<<<<<<<<"case form_object_present(form_body, \""/utf8, Prefix/binary>>/binary, "\", ["/utf8>>/binary, Prop_names/binary>>/binary, "]) { True -> Some("/utf8>>/binary, (form_urlencoded_object_constructor_expr( form_urlencoded_schema_ref_type_name(Schema_ref), Prefix, Props, schema_ref_additional_properties(Schema_ref, Ctx), Ctx, Nesting_depth ))/binary>>/binary, ") False -> None }"/utf8>>. -file("src/oaspec/codegen/server_request_decode.gleam", 789). -spec form_urlencoded_body_constructor_expr( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), binary(), oaspec@codegen@context:context() ) -> binary(). form_urlencoded_body_constructor_expr(Rb, Op_id, Ctx) -> form_urlencoded_object_constructor_expr( form_urlencoded_body_type_name(Rb, Op_id), <<""/utf8>>, form_urlencoded_body_properties(Rb, Ctx), body_additional_properties( Rb, <<"application/x-www-form-urlencoded"/utf8>>, Ctx ), Ctx, 0 ). -file("src/oaspec/codegen/server_request_decode.gleam", 74). -spec body_field_kind_from_object( oaspec@openapi@schema:schema_object(), oaspec@codegen@context:context() ) -> body_field_kind(). body_field_kind_from_object(Schema_obj, Ctx) -> case Schema_obj of {string_schema, _, _, _, _, _, _} -> body_field_string; {integer_schema, _, _, _, _, _, _, _} -> body_field_int; {number_schema, _, _, _, _, _, _, _} -> body_field_float; {boolean_schema, _} -> body_field_bool; {array_schema, _, Items, _, _, _} -> case body_field_kind(Items, Ctx) of body_field_string -> body_field_string_array; body_field_int -> body_field_int_array; body_field_float -> body_field_float_array; body_field_bool -> body_field_bool_array; _ -> body_field_unknown end; _ -> body_field_unknown end. -file("src/oaspec/codegen/server_request_decode.gleam", 51). -spec body_field_kind( oaspec@openapi@schema:schema_ref(), oaspec@codegen@context:context() ) -> body_field_kind(). body_field_kind(Schema_ref, Ctx) -> case Schema_ref of {inline, {string_schema, _, _, _, _, _, _}} -> body_field_string; {inline, {integer_schema, _, _, _, _, _, _, _}} -> body_field_int; {inline, {number_schema, _, _, _, _, _, _, _}} -> body_field_float; {inline, {boolean_schema, _}} -> body_field_bool; {inline, {array_schema, _, Items, _, _, _}} -> case body_field_kind(Items, Ctx) of body_field_string -> body_field_string_array; body_field_int -> body_field_int_array; body_field_float -> body_field_float_array; body_field_bool -> body_field_bool_array; _ -> body_field_unknown end; {reference, _, _} = Schema_ref@1 -> case oaspec@openapi@resolver:resolve_schema_ref( Schema_ref@1, erlang:element(2, Ctx) ) of {ok, Schema_obj} -> body_field_kind_from_object(Schema_obj, Ctx); {error, _} -> body_field_unknown end; _ -> body_field_unknown end. -file("src/oaspec/codegen/server_request_decode.gleam", 41). -spec schema_ref_body_field_kind( gleam@option:option(oaspec@openapi@schema:schema_ref()), oaspec@codegen@context:context() ) -> body_field_kind(). schema_ref_body_field_kind(Schema_ref, Ctx) -> case Schema_ref of {some, Schema_ref@1} -> body_field_kind(Schema_ref@1, Ctx); none -> body_field_unknown end. -file("src/oaspec/codegen/server_request_decode.gleam", 902). -spec multipart_body_needs_int( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). multipart_body_needs_int(Rb, Ctx) -> gleam@list:any( multipart_body_properties(Rb, Ctx), fun(Prop) -> body_field_kind_needs_int( schema_ref_body_field_kind({some, erlang:element(4, Prop)}, Ctx) ) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 914). -spec multipart_body_needs_float( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). multipart_body_needs_float(Rb, Ctx) -> gleam@list:any( multipart_body_properties(Rb, Ctx), fun(Prop) -> body_field_kind_needs_float( schema_ref_body_field_kind({some, erlang:element(4, Prop)}, Ctx) ) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 958). -spec form_urlencoded_properties_need_int( list(deep_object_property()), oaspec@codegen@context:context(), boolean() ) -> boolean(). form_urlencoded_properties_need_int(Props, Ctx, Allow_nested_objects) -> form_urlencoded_properties_need( Props, Ctx, Allow_nested_objects, fun(Prop) -> body_field_kind_needs_int( schema_ref_body_field_kind({some, erlang:element(4, Prop)}, Ctx) ) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 826). -spec form_urlencoded_body_needs_int( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). form_urlencoded_body_needs_int(Rb, Ctx) -> form_urlencoded_properties_need_int( form_urlencoded_body_properties(Rb, Ctx), Ctx, true ). -file("src/oaspec/codegen/server_request_decode.gleam", 971). -spec form_urlencoded_properties_need_float( list(deep_object_property()), oaspec@codegen@context:context(), boolean() ) -> boolean(). form_urlencoded_properties_need_float(Props, Ctx, Allow_nested_objects) -> form_urlencoded_properties_need( Props, Ctx, Allow_nested_objects, fun(Prop) -> body_field_kind_needs_float( schema_ref_body_field_kind({some, erlang:element(4, Prop)}, Ctx) ) end ). -file("src/oaspec/codegen/server_request_decode.gleam", 837). -spec form_urlencoded_body_needs_float( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), oaspec@codegen@context:context() ) -> boolean(). form_urlencoded_body_needs_float(Rb, Ctx) -> form_urlencoded_properties_need_float( form_urlencoded_body_properties(Rb, Ctx), Ctx, true ). -file("src/oaspec/codegen/server_request_decode.gleam", 1069). ?DOC( " Generate a required body field expression.\n" " `source` is the dict name (e.g., \"form_body\", \"multipart_body\").\n" " `trim_items` controls whether array items are trimmed (form_body) or used raw (multipart).\n" ). -spec body_required_expr( binary(), binary(), boolean(), gleam@option:option(oaspec@openapi@schema:schema_ref()), oaspec@codegen@context:context() ) -> binary(). body_required_expr(Key, Source, Trim_items, Schema_ref, Ctx) -> Lookup = <<<<<<<<"dict.get("/utf8, Source/binary>>/binary, ", \""/utf8>>/binary, Key/binary>>/binary, "\")"/utf8>>, Base = <<<<"{ let assert Ok([v, ..]) = "/utf8, Lookup/binary>>/binary, " v }"/utf8>>, case schema_ref_body_field_kind(Schema_ref, Ctx) of body_field_string_array -> case Trim_items of true -> <<<<"{ let assert Ok(vs) = "/utf8, Lookup/binary>>/binary, " list.map(vs, fn(item) { string.trim(item) }) }"/utf8>>; false -> <<<<"{ let assert Ok(vs) = "/utf8, Lookup/binary>>/binary, " vs }"/utf8>> end; body_field_int_array -> <<<<<<<<"{ let assert Ok(vs) = "/utf8, Lookup/binary>>/binary, " list.map(vs, fn(item) { "/utf8>>/binary, (array_item_int_parse(Trim_items))/binary>>/binary, " }) }"/utf8>>; body_field_float_array -> <<<<<<<<"{ let assert Ok(vs) = "/utf8, Lookup/binary>>/binary, " list.map(vs, fn(item) { "/utf8>>/binary, (array_item_float_parse(Trim_items))/binary>>/binary, " }) }"/utf8>>; body_field_bool_array -> <<<<<<<<"{ let assert Ok(vs) = "/utf8, Lookup/binary>>/binary, " list.map(vs, fn(item) { "/utf8>>/binary, (array_item_bool_parse(Trim_items))/binary>>/binary, " }) }"/utf8>>; body_field_int -> <<<<"{ let assert Ok([v, ..]) = "/utf8, Lookup/binary>>/binary, " let assert Ok(n) = int.parse(v) n }"/utf8>>; body_field_float -> <<<<"{ let assert Ok([v, ..]) = "/utf8, Lookup/binary>>/binary, " let assert Ok(n) = float.parse(v) n }"/utf8>>; body_field_bool -> <<<<<<<<"{ let assert Ok([v, ..]) = "/utf8, Lookup/binary>>/binary, " "/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, " }"/utf8>>; _ -> Base end. -file("src/oaspec/codegen/server_request_decode.gleam", 1034). -spec form_body_required_expr_with_schema( binary(), gleam@option:option(oaspec@openapi@schema:schema_ref()), oaspec@codegen@context:context() ) -> binary(). form_body_required_expr_with_schema(Key, Schema_ref, Ctx) -> body_required_expr(Key, <<"form_body"/utf8>>, true, Schema_ref, Ctx). -file("src/oaspec/codegen/server_request_decode.gleam", 1050). -spec multipart_body_required_expr_with_schema( binary(), gleam@option:option(oaspec@openapi@schema:schema_ref()), oaspec@codegen@context:context() ) -> binary(). multipart_body_required_expr_with_schema(Key, Schema_ref, Ctx) -> body_required_expr(Key, <<"multipart_body"/utf8>>, false, Schema_ref, Ctx). -file("src/oaspec/codegen/server_request_decode.gleam", 1121). ?DOC( " Generate an optional body field expression.\n" " `source` is the dict name, `miss` is the miss pattern (\"_\" or \"Error(_)\").\n" ). -spec body_optional_expr( binary(), binary(), boolean(), binary(), gleam@option:option(oaspec@openapi@schema:schema_ref()), oaspec@codegen@context:context() ) -> binary(). body_optional_expr(Key, Source, Trim_items, Miss, Schema_ref, Ctx) -> Lookup = <<<<<<<<"dict.get("/utf8, Source/binary>>/binary, ", \""/utf8>>/binary, Key/binary>>/binary, "\")"/utf8>>, case schema_ref_body_field_kind(Schema_ref, Ctx) of body_field_string_array -> case Trim_items of true -> <<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok(vs) -> Some(list.map(vs, fn(item) { string.trim(item) })) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; false -> <<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok(vs) -> Some(vs) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>> end; body_field_int_array -> <<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok(vs) -> Some(list.map(vs, fn(item) { "/utf8>>/binary, (array_item_int_parse(Trim_items))/binary>>/binary, " })) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; body_field_float_array -> <<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok(vs) -> Some(list.map(vs, fn(item) { "/utf8>>/binary, (array_item_float_parse(Trim_items))/binary>>/binary, " })) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; body_field_bool_array -> <<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok(vs) -> Some(list.map(vs, fn(item) { "/utf8>>/binary, (array_item_bool_parse(Trim_items))/binary>>/binary, " })) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; body_field_int -> <<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok([v, ..]) -> { case int.parse(v) { Ok(n) -> Some(n) _ -> None } } "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; body_field_float -> <<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok([v, ..]) -> { case float.parse(v) { Ok(n) -> Some(n) _ -> None } } "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; body_field_bool -> <<<<<<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok([v, ..]) -> Some("/utf8>>/binary, "case string.lowercase(v) { \"true\" -> True _ -> False }"/utf8>>/binary, ") "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>>; _ -> <<<<<<<<"case "/utf8, Lookup/binary>>/binary, " { Ok([v, ..]) -> Some(v) "/utf8>>/binary, Miss/binary>>/binary, " -> None }"/utf8>> end. -file("src/oaspec/codegen/server_request_decode.gleam", 1042). -spec form_body_optional_expr_with_schema( binary(), gleam@option:option(oaspec@openapi@schema:schema_ref()), oaspec@codegen@context:context() ) -> binary(). form_body_optional_expr_with_schema(Key, Schema_ref, Ctx) -> body_optional_expr( Key, <<"form_body"/utf8>>, true, <<"_"/utf8>>, Schema_ref, Ctx ). -file("src/oaspec/codegen/server_request_decode.gleam", 1058). -spec multipart_body_optional_expr_with_schema( binary(), gleam@option:option(oaspec@openapi@schema:schema_ref()), oaspec@codegen@context:context() ) -> binary(). multipart_body_optional_expr_with_schema(Key, Schema_ref, Ctx) -> body_optional_expr( Key, <<"multipart_body"/utf8>>, false, <<"_"/utf8>>, Schema_ref, Ctx ). -file("src/oaspec/codegen/server_request_decode.gleam", 857). -spec multipart_body_constructor_expr( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), binary(), oaspec@codegen@context:context() ) -> binary(). multipart_body_constructor_expr(Rb, Op_id, Ctx) -> Fields = begin _pipe = multipart_body_properties(Rb, Ctx), _pipe@1 = gleam@list:map( _pipe, fun(Prop) -> Value_expr = case erlang:element(5, Prop) of true -> multipart_body_required_expr_with_schema( erlang:element(2, Prop), {some, erlang:element(4, Prop)}, Ctx ); false -> multipart_body_optional_expr_with_schema( erlang:element(2, Prop), {some, erlang:element(4, Prop)}, Ctx ) end, <<<<(erlang:element(3, Prop))/binary, ": "/utf8>>/binary, Value_expr/binary>> end ), gleam@string:join(_pipe@1, <<", "/utf8>>) end, Additional_props_suffix = case body_additional_properties( Rb, <<"multipart/form-data"/utf8>>, Ctx ) of forbidden -> <<""/utf8>>; _ -> <<", additional_properties: dict.new()"/utf8>> end, <<<<<<<<(multipart_body_type_name(Rb, Op_id))/binary, "("/utf8>>/binary, Fields/binary>>/binary, Additional_props_suffix/binary>>/binary, ")"/utf8>>. -file("src/oaspec/codegen/server_request_decode.gleam", 1432). ?DOC(" Generate the body decode expression for a request body.\n"). -spec generate_body_decode_expr( oaspec@openapi@spec:request_body(oaspec@openapi@spec:resolved()), binary(), oaspec@codegen@context:context() ) -> binary(). generate_body_decode_expr(Rb, Op_id, Ctx) -> Content_entries = maps:to_list(erlang:element(3, Rb)), case Content_entries of [{<<"application/json"/utf8>>, Media_type}] -> Decode_fn = case erlang:element(2, Media_type) of {some, {reference, _, Name}} -> <<<<"decode.decode_"/utf8, (oaspec@util@naming:to_snake_case(Name))/binary>>/binary, "(body)"/utf8>>; _ -> <<<<"decode.decode_"/utf8, (oaspec@util@naming:to_snake_case(Op_id))/binary>>/binary, "_request_body(body)"/utf8>> end, case erlang:element(4, Rb) of true -> <<<<"{ let assert Ok(decoded) = "/utf8, Decode_fn/binary>>/binary, " decoded }"/utf8>>; false -> <<<<"case body { \"\" -> None _ -> { case "/utf8, Decode_fn/binary>>/binary, " { Ok(decoded) -> Some(decoded) _ -> None } } }"/utf8>> end; [{<<"application/x-www-form-urlencoded"/utf8>>, _}] -> Body_expr = form_urlencoded_body_constructor_expr(Rb, Op_id, Ctx), case erlang:element(4, Rb) of true -> Body_expr; false -> <<<<"case body { \"\" -> None _ -> Some("/utf8, Body_expr/binary>>/binary, ") }"/utf8>> end; [{<<"multipart/form-data"/utf8>>, _}] -> Body_expr@1 = multipart_body_constructor_expr(Rb, Op_id, Ctx), case erlang:element(4, Rb) of true -> Body_expr@1; false -> <<<<"case body { \"\" -> None _ -> Some("/utf8, Body_expr@1/binary>>/binary, ") }"/utf8>> end; _ -> case erlang:element(4, Rb) of true -> <<"body"/utf8>>; false -> <<"case body { \"\" -> None _ -> Some(body) }"/utf8>> end end.