-module(oaspec@internal@codegen@client_ir). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/oaspec/internal/codegen/client_ir.gleam"). -export([imports/2, analyze/1]). -export_type([client_requirements/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 client_requirements() :: {client_requirements, boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean(), boolean()}. -file("src/oaspec/internal/codegen/client_ir.gleam", 603). ?DOC(false). -spec resolve_to_object( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> gleam@option:option(oaspec@internal@openapi@schema:schema_object()). resolve_to_object(Ref, Ctx) -> case Ref of {inline, S} -> {some, S}; {reference, _, _} -> case oaspec@internal@codegen@context:resolve_schema_ref(Ref, Ctx) of {ok, S@1} -> {some, S@1}; {error, _} -> none end end. -file("src/oaspec/internal/codegen/client_ir.gleam", 695). ?DOC(false). -spec items_resolve_primitive_local( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). items_resolve_primitive_local(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_ir.gleam", 743). ?DOC(false). -spec ref_contains_primitive( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context(), fun((oaspec@internal@openapi@schema:schema_object()) -> boolean()) ) -> boolean(). ref_contains_primitive(Ref, Ctx, Pred) -> case resolve_to_object(Ref, Ctx) of {some, S} -> case Pred(S) of true -> true; false -> case S of {array_schema, _, Items, _, _, _} -> ref_contains_primitive(Items, Ctx, Pred); {object_schema, _, Properties, _, _, _, _} -> _pipe = maps:to_list(Properties), gleam@list:any( _pipe, fun(Entry) -> {_, Child} = Entry, ref_contains_primitive(Child, Ctx, Pred) end ); _ -> false end end; none -> false end. -file("src/oaspec/internal/codegen/client_ir.gleam", 769). ?DOC(false). -spec ref_contains_composite( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). ref_contains_composite(Ref, Ctx) -> case resolve_to_object(Ref, Ctx) of {some, {one_of_schema, _, _, _}} -> true; {some, {any_of_schema, _, _, _}} -> true; {some, {all_of_schema, _, _}} -> true; {some, {array_schema, _, Items, _, _, _}} -> ref_contains_composite(Items, Ctx); {some, {object_schema, _, Properties, _, _, _, _}} -> _pipe = maps:to_list(Properties), gleam@list:any( _pipe, fun(Entry) -> {_, Child_schema} = Entry, ref_contains_composite(Child_schema, Ctx) end ); _ -> false end. -file("src/oaspec/internal/codegen/client_ir.gleam", 825). ?DOC(false). -spec object_properties_match( oaspec@internal@openapi@schema:schema_object(), oaspec@internal@codegen@context:context(), fun((oaspec@internal@openapi@schema:schema_object()) -> boolean()) ) -> boolean(). object_properties_match(Obj, Ctx, Pred) -> case Obj of {object_schema, _, Properties, _, _, _, _} -> gleam@list:any( maps:to_list(Properties), fun(Entry) -> {_, Prop_ref} = Entry, case resolve_to_object(Prop_ref, Ctx) of {some, Prop_schema} -> Pred(Prop_schema) orelse object_properties_match( Prop_schema, Ctx, Pred ); none -> false end end ); _ -> false end. -file("src/oaspec/internal/codegen/client_ir.gleam", 792). ?DOC(false). -spec deep_object_param_has_property( list({binary(), oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()), binary(), oaspec@internal@openapi@spec:http_method()}), oaspec@internal@codegen@context:context(), fun((oaspec@internal@openapi@schema:schema_object()) -> boolean()) ) -> boolean(). deep_object_param_has_property(Operations, Ctx, Pred) -> gleam@list:any( Operations, fun(Op) -> {_, Operation, _, _} = Op, gleam@list:any(erlang:element(6, Operation), fun(Rp) -> case Rp of {value, P} -> case oaspec@internal@codegen@operation_ir:is_deep_object_param( P, Ctx ) of false -> false; true -> case oaspec@internal@openapi@spec:parameter_schema( P ) of {some, Ref} -> case resolve_to_object(Ref, Ctx) of {some, Obj} -> object_properties_match( Obj, Ctx, Pred ); none -> false end; none -> false end end; _ -> false end end) end ). -file("src/oaspec/internal/codegen/client_ir.gleam", 844). ?DOC(false). -spec option_or_none( gleam@option:option(oaspec@internal@openapi@schema:schema_ref()) ) -> oaspec@internal@openapi@schema:schema_ref(). option_or_none(Ref) -> case Ref of {some, R} -> R; none -> {inline, {object_schema, oaspec@internal@openapi@schema:default_metadata(), maps:new(), [], unspecified, none, none}} end. -file("src/oaspec/internal/codegen/client_ir.gleam", 560). ?DOC(false). -spec multipart_has_optional_complex_field( list({binary(), oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()), binary(), oaspec@internal@openapi@spec:http_method()}), oaspec@internal@codegen@context:context() ) -> boolean(). multipart_has_optional_complex_field(Operations, Ctx) -> gleam@list:any( Operations, fun(Op) -> {_, Operation, _, _} = Op, case erlang:element(7, Operation) of {some, {value, Rb}} -> case gleam_stdlib:map_get( erlang:element(3, Rb), <<"multipart/form-data"/utf8>> ) of {ok, Media_type} -> case resolve_to_object( option_or_none(erlang:element(2, Media_type)), Ctx ) of {some, {object_schema, _, Properties, Required, _, _, _}} -> _pipe = maps:to_list(Properties), gleam@list:any( _pipe, fun(Entry) -> {Name, Prop_ref} = Entry, Is_optional = not gleam@list:contains( Required, Name ), Is_optional andalso case resolve_to_object( Prop_ref, Ctx ) of {some, {array_schema, _, _, _, _, _}} -> true; {some, {object_schema, _, _, _, _, _, _}} -> true; _ -> false end end ); _ -> false end; {error, _} -> false end; _ -> false end end ). -file("src/oaspec/internal/codegen/client_ir.gleam", 593). ?DOC(false). -spec multipart_object_props( gleam@option:option(oaspec@internal@openapi@schema:schema_ref()), oaspec@internal@codegen@context:context() ) -> list({binary(), oaspec@internal@openapi@schema:schema_ref()}). multipart_object_props(Media_schema, Ctx) -> case resolve_to_object(option_or_none(Media_schema), Ctx) of {some, {object_schema, _, Properties, _, _, _, _}} -> maps:to_list(Properties); _ -> [] end. -file("src/oaspec/internal/codegen/client_ir.gleam", 533). ?DOC(false). -spec multipart_has_field( list({binary(), oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()), binary(), oaspec@internal@openapi@spec:http_method()}), oaspec@internal@codegen@context:context(), fun((oaspec@internal@openapi@schema:schema_object()) -> boolean()) ) -> boolean(). multipart_has_field(Operations, Ctx, Pred) -> gleam@list:any( Operations, fun(Op) -> {_, Operation, _, _} = Op, case erlang:element(7, Operation) of {some, {value, Rb}} -> case gleam_stdlib:map_get( erlang:element(3, Rb), <<"multipart/form-data"/utf8>> ) of {ok, Media_type} -> _pipe = multipart_object_props( erlang:element(2, Media_type), Ctx ), gleam@list:any( _pipe, fun(Entry) -> {_, Prop_ref} = Entry, case resolve_to_object(Prop_ref, Ctx) of {some, S} -> Pred(S); none -> false end end ); {error, _} -> false end; _ -> false end end ). -file("src/oaspec/internal/codegen/client_ir.gleam", 625). ?DOC(false). -spec form_body_uses_json_escape( oaspec@internal@openapi@spec:media_type(), oaspec@internal@codegen@context:context() ) -> boolean(). form_body_uses_json_escape(Mt, Ctx) -> Explicit = gleam@list:any( maps:to_list(erlang:element(5, Mt)), fun(Entry) -> {_, Enc} = Entry, case erlang:element(2, Enc) of {some, Value} -> case oaspec@internal@util@content_type:from_string(Value) of application_json -> true; _ -> false end; none -> false end end ), Composite = case resolve_to_object( option_or_none(erlang:element(2, Mt)), Ctx ) of {some, {object_schema, _, Properties, _, _, _, _}} -> _pipe = maps:to_list(Properties), gleam@list:any( _pipe, fun(Entry@1) -> {_, Child_schema} = Entry@1, ref_contains_composite(Child_schema, Ctx) end ); _ -> false end, Explicit orelse Composite. -file("src/oaspec/internal/codegen/client_ir.gleam", 654). ?DOC(false). -spec param_uses_json_escape( oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()), oaspec@internal@codegen@context:context() ) -> boolean(). param_uses_json_escape(Param, Ctx) -> In_query = case erlang:element(3, Param) of in_query -> true; _ -> false end, Array_items = 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, Array_with_non_primitive_items = case {In_query, Array_items} of {true, {some, Items@2}} -> not items_resolve_primitive_local(Items@2, Ctx); {_, _} -> false end, Deep_object_composite = case oaspec@internal@codegen@operation_ir:is_deep_object_param( Param, Ctx ) of true -> case resolve_to_object( option_or_none( oaspec@internal@openapi@spec:parameter_schema(Param) ), Ctx ) of {some, {object_schema, _, Properties, _, _, _, _}} -> _pipe = maps:to_list(Properties), gleam@list:any( _pipe, fun(Entry) -> {_, Child_schema} = Entry, ref_contains_composite(Child_schema, Ctx) end ); _ -> false end; false -> false end, Array_with_non_primitive_items orelse Deep_object_composite. -file("src/oaspec/internal/codegen/client_ir.gleam", 718). ?DOC(false). -spec form_body_has_primitive( list({binary(), oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()), binary(), oaspec@internal@openapi@spec:http_method()}), oaspec@internal@codegen@context:context(), fun((oaspec@internal@openapi@schema:schema_object()) -> boolean()) ) -> boolean(). form_body_has_primitive(Operations, Ctx, Pred) -> gleam@list:any( Operations, fun(Op) -> {_, Operation, _, _} = Op, case erlang:element(7, Operation) of {some, {value, Rb}} -> gleam@list:any( maps:to_list(erlang:element(3, Rb)), fun(Ce) -> {Ct_name, Mt} = Ce, case oaspec@internal@util@content_type:from_string( Ct_name ) of form_url_encoded -> case resolve_to_object( option_or_none(erlang:element(2, Mt)), Ctx ) of {some, S} -> ref_contains_primitive( {inline, S}, Ctx, Pred ); none -> false end; _ -> false end end ); _ -> false end end ). -file("src/oaspec/internal/codegen/client_ir.gleam", 860). ?DOC(false). -spec option_import(client_requirements()) -> gleam@option:option(binary()). option_import(Requirements) -> case {erlang:element(12, Requirements), erlang:element(13, Requirements), erlang:element(14, Requirements)} of {true, _, _} -> {some, <<"gleam/option.{type Option, None, Some}"/utf8>>}; {false, true, true} -> {some, <<"gleam/option.{None, Some}"/utf8>>}; {false, true, false} -> {some, <<"gleam/option.{Some}"/utf8>>}; {false, false, true} -> {some, <<"gleam/option.{None}"/utf8>>}; {false, false, false} -> none end. -file("src/oaspec/internal/codegen/client_ir.gleam", 875). ?DOC(false). -spec imports(client_requirements(), oaspec@internal@codegen@context:context()) -> list(binary()). imports(Requirements, Ctx) -> Base_imports = [<<"gleam/result"/utf8>>, <<"oaspec/transport"/utf8>>, <<(oaspec@config:package(oaspec@internal@codegen@context:config(Ctx)))/binary, "/decode"/utf8>>, <<(oaspec@config:package(oaspec@internal@codegen@context:config(Ctx)))/binary, "/response_types"/utf8>>], Base_imports@1 = case erlang:element(15, Requirements) of true -> [<<"gleam/int"/utf8>> | Base_imports]; false -> Base_imports end, Base_imports@2 = case option_import(Requirements) of {some, Import_line} -> [Import_line | Base_imports@1]; none -> Base_imports@1 end, Base_imports@3 = case erlang:element(11, Requirements) of true -> lists:append( [<<(oaspec@config:package( oaspec@internal@codegen@context:config(Ctx) ))/binary, "/types"/utf8>>, <<(oaspec@config:package( oaspec@internal@codegen@context:config(Ctx) ))/binary, "/encode"/utf8>>], Base_imports@2 ); false -> Base_imports@2 end, Base_imports@4 = [<<(oaspec@config:package( oaspec@internal@codegen@context:config(Ctx) ))/binary, "/request_types"/utf8>> | Base_imports@3], Base_imports@5 = case erlang:element(10, Requirements) of true -> [<<"gleam/string"/utf8>> | Base_imports@4]; false -> Base_imports@4 end, Imports = case erlang:element(8, Requirements) of true -> [<<"gleam/dynamic/decode as dyn_decode"/utf8>> | Base_imports@5]; false -> Base_imports@5 end, Imports@1 = case erlang:element(9, Requirements) of true -> [<<"gleam/json"/utf8>> | Imports]; false -> Imports end, Imports@2 = case erlang:element(2, Requirements) of true -> [<<"gleam/bool"/utf8>> | Imports@1]; false -> Imports@1 end, Imports@3 = case erlang:element(3, Requirements) of true -> [<<"gleam/float"/utf8>> | Imports@2]; false -> Imports@2 end, Imports@4 = case erlang:element(7, Requirements) of true -> [<<"gleam/list"/utf8>> | Imports@3]; false -> Imports@3 end, Imports@5 = case erlang:element(18, Requirements) of true -> [<<"gleam/uri"/utf8>> | Imports@4]; false -> Imports@4 end, case erlang:element(19, Requirements) of true -> [<<(oaspec@config:package( oaspec@internal@codegen@context:config(Ctx) ))/binary, "/guards"/utf8>> | Imports@5]; false -> Imports@5 end. -file("src/oaspec/internal/codegen/client_ir.gleam", 939). ?DOC(false). -spec any_operation_has_server(oaspec@internal@codegen@context:context()) -> boolean(). any_operation_has_server(Ctx) -> gleam@list:any( oaspec@internal@codegen@context:operations(Ctx), fun(Op) -> {_, Operation, _, _} = Op, case erlang:element(12, Operation) of [] -> case erlang:element( 6, oaspec@internal@codegen@context:spec(Ctx) ) of [] -> false; _ -> true end; _ -> true end end ). -file("src/oaspec/internal/codegen/client_ir.gleam", 953). ?DOC(false). -spec any_operation_has_no_server(oaspec@internal@codegen@context:context()) -> boolean(). any_operation_has_no_server(Ctx) -> gleam@list:any( oaspec@internal@codegen@context:operations(Ctx), fun(Op) -> {_, Operation, _, _} = Op, case erlang:element(12, Operation) of [] -> case erlang:element( 6, oaspec@internal@codegen@context:spec(Ctx) ) of [] -> true; _ -> false end; _ -> false end end ). -file("src/oaspec/internal/codegen/client_ir.gleam", 38). ?DOC(false). -spec analyze(oaspec@internal@codegen@context:context()) -> client_requirements(). analyze(Ctx) -> Operations = oaspec@internal@codegen@context:operations(Ctx), All_params = gleam@list:flat_map( Operations, fun(Op) -> {_, Operation, _, _} = Op, gleam@list:filter_map( erlang:element(6, Operation), fun(Ref_p) -> case Ref_p of {value, P} -> {ok, P}; _ -> {error, nil} end end ) end ), Needs_bool = gleam@list:any( All_params, fun(P@1) -> case erlang:element(6, P@1) of {parameter_schema, {inline, {boolean_schema, _}}} -> true; _ -> false end end ) orelse deep_object_param_has_property(Operations, Ctx, fun(S) -> case S of {boolean_schema, _} -> true; _ -> false end end), Needs_float_param = gleam@list:any( All_params, fun(P@2) -> case erlang:element(6, P@2) of {parameter_schema, {inline, {number_schema, _, _, _, _, _, _, _}}} -> true; _ -> false end end ) orelse deep_object_param_has_property( Operations, Ctx, fun(S@1) -> case S@1 of {number_schema, _, _, _, _, _, _, _} -> true; _ -> false end end ), Has_multi_content_response = gleam@list:any( Operations, fun(Op@1) -> {_, Operation@1, _, _} = Op@1, gleam@list:any( maps:to_list(erlang:element(8, Operation@1)), fun(Entry) -> {_, Ref_or} = Entry, case Ref_or of {value, Response} -> erlang:length( maps:to_list(erlang:element(3, Response)) ) > 1; _ -> false end end ) end ), Has_form_urlencoded = gleam@list:any( Operations, fun(Op@2) -> {_, Operation@2, _, _} = Op@2, case erlang:element(7, Operation@2) of {some, {value, Rb}} -> gleam@list:any( maps:to_list(erlang:element(3, Rb)), fun(Ce) -> {Key, _} = Ce, Key =:= <<"application/x-www-form-urlencoded"/utf8>> end ); _ -> false end end ), Has_multipart = gleam@list:any( Operations, fun(Op@3) -> {_, Operation@3, _, _} = Op@3, case erlang:element(7, Operation@3) of {some, {value, Rb@1}} -> gleam@list:any( maps:to_list(erlang:element(3, Rb@1)), fun(Ce@1) -> {Key@1, _} = Ce@1, Key@1 =:= <<"multipart/form-data"/utf8>> end ); _ -> false end end ), Has_multipart_array_field = multipart_has_field( Operations, Ctx, fun(S@2) -> case S@2 of {array_schema, _, _, _, _, _} -> true; _ -> false end end ), Has_multipart_object_field = multipart_has_field( Operations, Ctx, fun(S@3) -> case S@3 of {object_schema, _, _, _, _, _, _} -> true; _ -> false end end ), Has_multipart_optional_complex_field = multipart_has_optional_complex_field( Operations, Ctx ), Has_deep_object_param = gleam@list:any( Operations, fun(Op@4) -> {_, Operation@4, _, _} = Op@4, gleam@list:any(erlang:element(6, Operation@4), fun(Rp) -> case Rp of {value, P@3} -> oaspec@internal@codegen@operation_ir:is_deep_object_param( P@3, Ctx ); _ -> false end end) end ), Has_response_headers = gleam@list:any( Operations, fun(Op@5) -> {_, Operation@5, _, _} = Op@5, gleam@list:any( maps:to_list(erlang:element(8, Operation@5)), fun(Entry@1) -> {_, Ref_or@1} = Entry@1, case Ref_or@1 of {value, Response@1} -> maps:size(erlang:element(4, Response@1)) > 0; _ -> false end end ) end ), Has_optional_response_headers = gleam@list:any( Operations, fun(Op@6) -> {_, Operation@6, _, _} = Op@6, gleam@list:any( maps:to_list(erlang:element(8, Operation@6)), fun(Entry@2) -> {_, Ref_or@2} = Entry@2, case Ref_or@2 of {value, Response@2} -> gleam@list:any( maps:to_list(erlang:element(4, Response@2)), fun(H_entry) -> {_, Header} = H_entry, not erlang:element(3, Header) end ); _ -> false end end ) end ), Needs_list = ((((((Has_form_urlencoded orelse Has_multi_content_response) orelse Has_response_headers) orelse Has_multipart_array_field) orelse gleam@list:any( All_params, fun(P@4) -> erlang:element(3, P@4) =:= in_query end )) orelse gleam@list:any( All_params, fun(P@5) -> erlang:element(3, P@5) =:= in_cookie end )) orelse gleam@list:any( All_params, fun(P@6) -> erlang:element(3, P@6) =:= in_header end )) orelse gleam@list:any(All_params, fun(P@7) -> case erlang:element(6, P@7) 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 end), Needs_dyn_decode = gleam@list:any( Operations, fun(Op@7) -> {_, Operation@7, _, _} = Op@7, gleam@list:any( maps:to_list(erlang:element(8, Operation@7)), fun(Entry@3) -> {_, Ref_or@3} = Entry@3, case Ref_or@3 of {value, Response@3} -> gleam@list:any( maps:to_list(erlang:element(3, Response@3)), fun(Ce@2) -> {Media_type_name, Mt} = Ce@2, case oaspec@internal@util@content_type:from_string( Media_type_name ) of text_plain -> false; application_octet_stream -> false; wildcard -> false; _ -> case erlang:element(2, Mt) of {some, {inline, {array_schema, _, _, _, _, _}}} -> true; {some, {inline, {string_schema, _, _, _, _, _, _}}} -> true; {some, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> true; {some, {inline, {number_schema, _, _, _, _, _, _, _}}} -> true; {some, {inline, {boolean_schema, _}}} -> true; _ -> false end end end ); _ -> false end end ) end ), Has_form_urlencoded_json_escape = gleam@list:any( Operations, fun(Op@8) -> {_, Operation@8, _, _} = Op@8, case erlang:element(7, Operation@8) of {some, {value, Rb@2}} -> gleam@list:any( maps:to_list(erlang:element(3, Rb@2)), fun(Ce@3) -> {Ct_name, Mt@1} = Ce@3, case oaspec@internal@util@content_type:from_string( Ct_name ) of form_url_encoded -> form_body_uses_json_escape(Mt@1, Ctx); _ -> false end end ); _ -> false end end ), Has_param_json_escape = gleam@list:any( All_params, fun(P@8) -> param_uses_json_escape(P@8, Ctx) end ), Needs_json = (((Needs_dyn_decode orelse Has_multipart_object_field) orelse Has_form_urlencoded_json_escape) orelse Has_param_json_escape) orelse gleam@list:any( Operations, fun(Op@9) -> {_, Operation@9, _, _} = Op@9, case erlang:element(7, Operation@9) of {some, {value, Rb@3}} -> gleam@list:any( maps:to_list(erlang:element(3, Rb@3)), fun(Ce@4) -> {Ct_name@1, Mt@2} = Ce@4, case oaspec@internal@util@content_type:from_string( Ct_name@1 ) of application_octet_stream -> false; wildcard -> false; _ -> case erlang:element(2, Mt@2) of {some, {inline, {string_schema, _, _, _, _, _, _}}} -> true; {some, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> true; {some, {inline, {number_schema, _, _, _, _, _, _, _}}} -> true; {some, {inline, {boolean_schema, _}}} -> true; _ -> false end end end ); _ -> false end end ), Needs_string = ((Has_multi_content_response orelse Has_form_urlencoded) orelse Has_multipart) orelse gleam@list:any( All_params, fun(P@9) -> (erlang:element(3, P@9) =:= in_path) orelse (erlang:element(3, P@9) =:= in_cookie) end ), Needs_typed_schemas = oaspec@internal@codegen@import_analysis:operations_need_typed_schemas( Operations ), Needs_option_type = oaspec@internal@codegen@import_analysis:operations_have_optional_params( Operations ) orelse oaspec@internal@codegen@import_analysis:operations_have_optional_body( Operations ), Needs_some_ctor = (((Needs_option_type orelse Has_optional_response_headers) orelse any_operation_has_server(Ctx)) orelse Has_multipart_optional_complex_field) orelse Has_deep_object_param, Needs_none_ctor = (((Needs_option_type orelse Has_optional_response_headers) orelse any_operation_has_no_server(Ctx)) orelse Has_multipart_optional_complex_field) orelse Has_deep_object_param, Has_int_response_header = gleam@list:any( Operations, fun(Op@10) -> {_, Operation@10, _, _} = Op@10, gleam@list:any( maps:to_list(erlang:element(8, Operation@10)), fun(Entry@4) -> {_, Ref_or@4} = Entry@4, case Ref_or@4 of {value, Response@4} -> gleam@list:any( maps:to_list(erlang:element(4, Response@4)), fun(H_entry@1) -> {_, Header@1} = H_entry@1, case erlang:element(4, Header@1) of {some, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> true; _ -> false end end ); _ -> false end end ) end ), Has_float_response_header = gleam@list:any( Operations, fun(Op@11) -> {_, Operation@11, _, _} = Op@11, gleam@list:any( maps:to_list(erlang:element(8, Operation@11)), fun(Entry@5) -> {_, Ref_or@5} = Entry@5, case Ref_or@5 of {value, Response@5} -> gleam@list:any( maps:to_list(erlang:element(4, Response@5)), fun(H_entry@2) -> {_, Header@2} = H_entry@2, case erlang:element(4, Header@2) of {some, {inline, {number_schema, _, _, _, _, _, _, _}}} -> true; _ -> false end end ); _ -> false end end ) end ), Has_form_urlencoded_int = form_body_has_primitive( Operations, Ctx, fun(S@4) -> case S@4 of {integer_schema, _, _, _, _, _, _, _} -> true; _ -> false end end ), Has_form_urlencoded_float = form_body_has_primitive( Operations, Ctx, fun(S@5) -> case S@5 of {number_schema, _, _, _, _, _, _, _} -> true; _ -> false end end ), Has_form_urlencoded_bool = form_body_has_primitive( Operations, Ctx, fun(S@6) -> case S@6 of {boolean_schema, _} -> true; _ -> false end end ), Needs_bool@1 = Needs_bool orelse Has_form_urlencoded_bool, Needs_int = ((Has_int_response_header orelse Has_form_urlencoded_int) orelse gleam@list:any( All_params, fun(P@10) -> case erlang:element(6, P@10) of {parameter_schema, {inline, {integer_schema, _, _, _, _, _, _, _}}} -> true; {parameter_schema, {inline, {array_schema, _, {inline, {integer_schema, _, _, _, _, _, _, _}}, _, _, _}}} -> true; {parameter_schema, {reference, _, _} = Sr@1} -> case oaspec@internal@codegen@context:resolve_schema_ref( Sr@1, Ctx ) of {ok, {integer_schema, _, _, _, _, _, _, _}} -> true; {ok, {array_schema, _, {inline, {integer_schema, _, _, _, _, _, _, _}}, _, _, _}} -> true; _ -> false end; _ -> false end end )) orelse deep_object_param_has_property( Operations, Ctx, fun(S@7) -> case S@7 of {integer_schema, _, _, _, _, _, _, _} -> true; _ -> false end end ), Needs_float = (Needs_float_param orelse Has_float_response_header) orelse Has_form_urlencoded_float, Needs_bytes_helper = gleam@list:any( Operations, fun(Op@12) -> {_, Operation@12, _, _} = Op@12, gleam@list:any( maps:to_list(erlang:element(8, Operation@12)), fun(Entry@6) -> {_, Ref_or@6} = Entry@6, case Ref_or@6 of {value, Response@6} -> gleam@list:any( maps:to_list(erlang:element(3, Response@6)), fun(Ce@5) -> {Name, Mt@3} = Ce@5, case {oaspec@internal@util@content_type:from_string( Name ), erlang:element(2, Mt@3)} of {application_octet_stream, {some, _}} -> true; {wildcard, {some, _}} -> true; {_, _} -> false end end ); _ -> false end end ) end ), Needs_text_helper = gleam@list:any( Operations, fun(Op@13) -> {_, Operation@13, _, _} = Op@13, gleam@list:any( maps:to_list(erlang:element(8, Operation@13)), fun(Entry@7) -> {_, Ref_or@7} = Entry@7, case Ref_or@7 of {value, Response@7} -> gleam@list:any( maps:to_list(erlang:element(3, Response@7)), fun(Ce@6) -> {_, Mt@4} = Ce@6, case erlang:element(2, Mt@4) of {some, _} -> true; none -> false end end ); _ -> false end end ) end ), Needs_uri = Has_form_urlencoded orelse gleam@list:any( All_params, fun(P@11) -> (erlang:element(3, P@11) =:= in_path) orelse (erlang:element( 3, P@11 ) =:= in_cookie) end ), Needs_guards = oaspec@config:validate( oaspec@internal@codegen@context:config(Ctx) ) andalso gleam@list:any( Operations, fun(Op@14) -> {_, Operation@14, _, _} = Op@14, case erlang:element(7, Operation@14) of {some, {value, Rb@4}} -> Content_entries = maps:to_list(erlang:element(3, Rb@4)), case Content_entries of [{_, Mt@5}] -> case erlang:element(2, Mt@5) of {some, {reference, _, Name@1}} -> oaspec@internal@codegen@guards:schema_has_validator( Name@1, Ctx ); _ -> false end; _ -> false end; _ -> false end end ), {client_requirements, Needs_bool@1, Needs_float, Has_multi_content_response, Has_form_urlencoded, Has_multipart, Needs_list, Needs_dyn_decode, Needs_json, Needs_string, Needs_typed_schemas, Needs_option_type, Needs_some_ctor, Needs_none_ctor, Needs_int, Needs_bytes_helper, Needs_text_helper, Needs_uri, Needs_guards}.