operations

in build_tools/aws-sdk-code-generator/lib/aws-sdk-code-generator/views/rbs/client_class.rb [46:103]


        def operations
          shapes = @api["shapes"]
          @api["operations"].map do |name, body|
            next if async_operation?(body)

            method_name = Underscore.underscore(name)
            indent = " " * (12 + method_name.length)
            input_shape_name = body.dig("input", "shape")
            arguments = nil
            include_required = false
            if input_shape_name
              input_shape = shapes[input_shape_name]
              builder = AwsSdkCodeGenerator::RBS::KeywordArgumentBuilder.new(
                api: @api,
                shape: input_shape,
                newline: true,
              )
              arguments = builder.format(indent: indent)
              include_required = input_shape["required"]&.empty?&.!
            end
            if AwsSdkCodeGenerator::Helper.operation_streaming?(body, @api)
              block = " ?{ (*untyped) -> void }"
            end
            if output_shape_name = body.dig("output", "shape")
              output_shape = shapes[output_shape_name]
              data = AwsSdkCodeGenerator::RBS.to_type(body.fetch( "output"), @api)
              interface = "_#{name}ResponseSuccess"
            else
              output_shape = nil
              data = "::Aws::EmptyStructure"
              interface = "::Seahorse::Client::_ResponseSuccess[::Aws::EmptyStructure]"
            end
            returns_members = output_shape&.[]("members")&.inject([]) do |a, (member_name, member_ref)|
              member_name_underscore = Underscore.underscore(member_name)
              next a if SKIP_MEMBERS.include?(member_name_underscore)

              a << {
                method_name: member_name_underscore,
                returns: AwsSdkCodeGenerator::RBS.to_type(member_ref, @api),
              }
            end

            {
              method_name: method_name,
              signature: AwsSdkCodeGenerator::RBS::MethodSignature.new(
                method_name: method_name,
                overloads: [
                  "(#{arguments})#{block} -> #{interface}",
                  "(#{include_required ? "" : "?"}Hash[Symbol, untyped] params, ?Hash[Symbol, untyped] options)#{block} -> #{interface}",
                ]).signature,
              interface: interface,
              data: data,
              returns_members: returns_members,
              empty_structure: output_shape.nil?
            }
          end.compact
        end