module Aws
  module S3
    class Object
      alias size content_length

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#copy_from-instance_method
      def copy_from: (untyped source, ?Hash[Symbol, untyped] options) -> void
                   | ...

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#copy_to-instance_method
      def copy_to: (untyped target, ?Hash[Symbol, untyped] options) -> void

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#move_to-instance_method
      def move_to: (untyped target, ?Hash[Symbol, untyped] options) -> void

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#presigned_post-instance_method
      def presigned_post: (?Hash[Symbol, untyped]) -> untyped

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#presigned_url-instance_method
      def presigned_url: (Symbol | String method, ?Hash[Symbol, untyped] params) -> String

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#presigned_request-instance_method
      def presigned_request: (Symbol | String method, ?Hash[Symbol, untyped] params) -> [String, Hash[String, String]]

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#public_url-instance_method
      def public_url: (?Hash[Symbol, untyped] options) -> String

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#upload_stream-instance_method
      def upload_stream: (?Hash[Symbol, untyped] options) { (IO write_stream) -> void } -> bool

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#upload_file-instance_method
      def upload_file: (untyped source, ?Hash[Symbol, untyped] options) ?{ (untyped response) -> void } -> bool

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Object.html#download_file-instance_method
      def download_file: (String destination, ?Hash[Symbol, untyped] options) -> bool
    end
  end
end
