# WARNING ABOUT GENERATED CODE
#
# This file is generated. See the contributing guide for more information:
# https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
#
# WARNING ABOUT GENERATED CODE

module Aws::S3
  module Types

    # Specifies the days since the initiation of an incomplete multipart
    # upload that Amazon S3 will wait before permanently removing all parts
    # of the upload. For more information, see [ Aborting Incomplete
    # Multipart Uploads Using a Bucket Lifecycle Policy][1] in the *Amazon
    # Simple Storage Service Developer Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config
    #
    # @note When making an API call, you may pass AbortIncompleteMultipartUpload
    #   data as a hash:
    #
    #       {
    #         days_after_initiation: 1,
    #       }
    #
    # @!attribute [rw] days_after_initiation
    #   Specifies the number of days after which Amazon S3 aborts an
    #   incomplete multipart upload.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortIncompleteMultipartUpload AWS API Documentation
    #
    class AbortIncompleteMultipartUpload < Struct.new(
      :days_after_initiation)
      include Aws::Structure
    end

    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortMultipartUploadOutput AWS API Documentation
    #
    class AbortMultipartUploadOutput < Struct.new(
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass AbortMultipartUploadRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         upload_id: "MultipartUploadId", # required
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   Name of the bucket to which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   Key of the object for which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] upload_id
    #   Upload ID that identifies the multipart upload.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortMultipartUploadRequest AWS API Documentation
    #
    class AbortMultipartUploadRequest < Struct.new(
      :bucket,
      :key,
      :upload_id,
      :request_payer)
      include Aws::Structure
    end

    # Configures the transfer acceleration state for an Amazon S3 bucket.
    # For more information, see [Amazon S3 Transfer Acceleration][1] in the
    # *Amazon Simple Storage Service Developer Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html
    #
    # @note When making an API call, you may pass AccelerateConfiguration
    #   data as a hash:
    #
    #       {
    #         status: "Enabled", # accepts Enabled, Suspended
    #       }
    #
    # @!attribute [rw] status
    #   Specifies the transfer acceleration status of the bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AccelerateConfiguration AWS API Documentation
    #
    class AccelerateConfiguration < Struct.new(
      :status)
      include Aws::Structure
    end

    # Contains the elements that set the ACL permissions for an object per
    # grantee.
    #
    # @note When making an API call, you may pass AccessControlPolicy
    #   data as a hash:
    #
    #       {
    #         grants: [
    #           {
    #             grantee: {
    #               display_name: "DisplayName",
    #               email_address: "EmailAddress",
    #               id: "ID",
    #               type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #               uri: "URI",
    #             },
    #             permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
    #           },
    #         ],
    #         owner: {
    #           display_name: "DisplayName",
    #           id: "ID",
    #         },
    #       }
    #
    # @!attribute [rw] grants
    #   A list of grants.
    #   @return [Array<Types::Grant>]
    #
    # @!attribute [rw] owner
    #   Container for the bucket owner's display name and ID.
    #   @return [Types::Owner]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AccessControlPolicy AWS API Documentation
    #
    class AccessControlPolicy < Struct.new(
      :grants,
      :owner)
      include Aws::Structure
    end

    # A container for information about access control for replicas.
    #
    # @note When making an API call, you may pass AccessControlTranslation
    #   data as a hash:
    #
    #       {
    #         owner: "Destination", # required, accepts Destination
    #       }
    #
    # @!attribute [rw] owner
    #   Specifies the replica ownership. For default and valid values, see
    #   [PUT bucket replication][1] in the *Amazon Simple Storage Service
    #   API Reference*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AccessControlTranslation AWS API Documentation
    #
    class AccessControlTranslation < Struct.new(
      :owner)
      include Aws::Structure
    end

    # A conjunction (logical AND) of predicates, which is used in evaluating
    # a metrics filter. The operator must have at least two predicates in
    # any combination, and an object must match all of the predicates for
    # the filter to apply.
    #
    # @note When making an API call, you may pass AnalyticsAndOperator
    #   data as a hash:
    #
    #       {
    #         prefix: "Prefix",
    #         tags: [
    #           {
    #             key: "ObjectKey", # required
    #             value: "Value", # required
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] prefix
    #   The prefix to use when evaluating an AND predicate: The prefix that
    #   an object must have to be included in the metrics results.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The list of tags to use when evaluating an AND predicate.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsAndOperator AWS API Documentation
    #
    class AnalyticsAndOperator < Struct.new(
      :prefix,
      :tags)
      include Aws::Structure
    end

    # Specifies the configuration and any analyses for the analytics filter
    # of an Amazon S3 bucket.
    #
    # For more information, see [GET Bucket analytics][1] in the *Amazon
    # Simple Storage Service API Reference*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETAnalyticsConfig.html
    #
    # @note When making an API call, you may pass AnalyticsConfiguration
    #   data as a hash:
    #
    #       {
    #         id: "AnalyticsId", # required
    #         filter: {
    #           prefix: "Prefix",
    #           tag: {
    #             key: "ObjectKey", # required
    #             value: "Value", # required
    #           },
    #           and: {
    #             prefix: "Prefix",
    #             tags: [
    #               {
    #                 key: "ObjectKey", # required
    #                 value: "Value", # required
    #               },
    #             ],
    #           },
    #         },
    #         storage_class_analysis: { # required
    #           data_export: {
    #             output_schema_version: "V_1", # required, accepts V_1
    #             destination: { # required
    #               s3_bucket_destination: { # required
    #                 format: "CSV", # required, accepts CSV
    #                 bucket_account_id: "AccountId",
    #                 bucket: "BucketName", # required
    #                 prefix: "Prefix",
    #               },
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] id
    #   The ID that identifies the analytics configuration.
    #   @return [String]
    #
    # @!attribute [rw] filter
    #   The filter used to describe a set of objects for analyses. A filter
    #   must have exactly one prefix, one tag, or one conjunction
    #   (AnalyticsAndOperator). If no filter is provided, all objects will
    #   be considered in any analysis.
    #   @return [Types::AnalyticsFilter]
    #
    # @!attribute [rw] storage_class_analysis
    #   Contains data related to access patterns to be collected and made
    #   available to analyze the tradeoffs between different storage
    #   classes.
    #   @return [Types::StorageClassAnalysis]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsConfiguration AWS API Documentation
    #
    class AnalyticsConfiguration < Struct.new(
      :id,
      :filter,
      :storage_class_analysis)
      include Aws::Structure
    end

    # Where to publish the analytics results.
    #
    # @note When making an API call, you may pass AnalyticsExportDestination
    #   data as a hash:
    #
    #       {
    #         s3_bucket_destination: { # required
    #           format: "CSV", # required, accepts CSV
    #           bucket_account_id: "AccountId",
    #           bucket: "BucketName", # required
    #           prefix: "Prefix",
    #         },
    #       }
    #
    # @!attribute [rw] s3_bucket_destination
    #   A destination signifying output to an S3 bucket.
    #   @return [Types::AnalyticsS3BucketDestination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsExportDestination AWS API Documentation
    #
    class AnalyticsExportDestination < Struct.new(
      :s3_bucket_destination)
      include Aws::Structure
    end

    # @note When making an API call, you may pass AnalyticsFilter
    #   data as a hash:
    #
    #       {
    #         prefix: "Prefix",
    #         tag: {
    #           key: "ObjectKey", # required
    #           value: "Value", # required
    #         },
    #         and: {
    #           prefix: "Prefix",
    #           tags: [
    #             {
    #               key: "ObjectKey", # required
    #               value: "Value", # required
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] prefix
    #   The prefix to use when evaluating an analytics filter.
    #   @return [String]
    #
    # @!attribute [rw] tag
    #   The tag to use when evaluating an analytics filter.
    #   @return [Types::Tag]
    #
    # @!attribute [rw] and
    #   A conjunction (logical AND) of predicates, which is used in
    #   evaluating an analytics filter. The operator must have at least two
    #   predicates.
    #   @return [Types::AnalyticsAndOperator]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsFilter AWS API Documentation
    #
    class AnalyticsFilter < Struct.new(
      :prefix,
      :tag,
      :and)
      include Aws::Structure
    end

    # @note When making an API call, you may pass AnalyticsS3BucketDestination
    #   data as a hash:
    #
    #       {
    #         format: "CSV", # required, accepts CSV
    #         bucket_account_id: "AccountId",
    #         bucket: "BucketName", # required
    #         prefix: "Prefix",
    #       }
    #
    # @!attribute [rw] format
    #   Specifies the file format used when exporting data to Amazon S3.
    #   @return [String]
    #
    # @!attribute [rw] bucket_account_id
    #   The account ID that owns the destination bucket. If no account ID is
    #   provided, the owner will not be validated prior to exporting data.
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   The Amazon Resource Name (ARN) of the bucket to which data is
    #   exported.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   The prefix to use when exporting data. The prefix is prepended to
    #   all results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AnalyticsS3BucketDestination AWS API Documentation
    #
    class AnalyticsS3BucketDestination < Struct.new(
      :format,
      :bucket_account_id,
      :bucket,
      :prefix)
      include Aws::Structure
    end

    # @!attribute [rw] name
    #   The name of the bucket.
    #   @return [String]
    #
    # @!attribute [rw] creation_date
    #   Date the bucket was created.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Bucket AWS API Documentation
    #
    class Bucket < Struct.new(
      :name,
      :creation_date)
      include Aws::Structure
    end

    # Specifies the lifecycle configuration for objects in an Amazon S3
    # bucket. For more information, see [Object Lifecycle Management][1] in
    # the *Amazon Simple Storage Service Developer Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html
    #
    # @note When making an API call, you may pass BucketLifecycleConfiguration
    #   data as a hash:
    #
    #       {
    #         rules: [ # required
    #           {
    #             expiration: {
    #               date: Time.now,
    #               days: 1,
    #               expired_object_delete_marker: false,
    #             },
    #             id: "ID",
    #             prefix: "Prefix",
    #             filter: {
    #               prefix: "Prefix",
    #               tag: {
    #                 key: "ObjectKey", # required
    #                 value: "Value", # required
    #               },
    #               and: {
    #                 prefix: "Prefix",
    #                 tags: [
    #                   {
    #                     key: "ObjectKey", # required
    #                     value: "Value", # required
    #                   },
    #                 ],
    #               },
    #             },
    #             status: "Enabled", # required, accepts Enabled, Disabled
    #             transitions: [
    #               {
    #                 date: Time.now,
    #                 days: 1,
    #                 storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #               },
    #             ],
    #             noncurrent_version_transitions: [
    #               {
    #                 noncurrent_days: 1,
    #                 storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #               },
    #             ],
    #             noncurrent_version_expiration: {
    #               noncurrent_days: 1,
    #             },
    #             abort_incomplete_multipart_upload: {
    #               days_after_initiation: 1,
    #             },
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] rules
    #   A lifecycle rule for individual objects in an Amazon S3 bucket.
    #   @return [Array<Types::LifecycleRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/BucketLifecycleConfiguration AWS API Documentation
    #
    class BucketLifecycleConfiguration < Struct.new(
      :rules)
      include Aws::Structure
    end

    # @note When making an API call, you may pass BucketLoggingStatus
    #   data as a hash:
    #
    #       {
    #         logging_enabled: {
    #           target_bucket: "TargetBucket", # required
    #           target_grants: [
    #             {
    #               grantee: {
    #                 display_name: "DisplayName",
    #                 email_address: "EmailAddress",
    #                 id: "ID",
    #                 type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #                 uri: "URI",
    #               },
    #               permission: "FULL_CONTROL", # accepts FULL_CONTROL, READ, WRITE
    #             },
    #           ],
    #           target_prefix: "TargetPrefix", # required
    #         },
    #       }
    #
    # @!attribute [rw] logging_enabled
    #   @return [Types::LoggingEnabled]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/BucketLoggingStatus AWS API Documentation
    #
    class BucketLoggingStatus < Struct.new(
      :logging_enabled)
      include Aws::Structure
    end

    # Describes the cross-origin access configuration for objects in an
    # Amazon S3 bucket. For more information, see [Enabling Cross-Origin
    # Resource Sharing][1] in the *Amazon Simple Storage Service Developer
    # Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html
    #
    # @note When making an API call, you may pass CORSConfiguration
    #   data as a hash:
    #
    #       {
    #         cors_rules: [ # required
    #           {
    #             allowed_headers: ["AllowedHeader"],
    #             allowed_methods: ["AllowedMethod"], # required
    #             allowed_origins: ["AllowedOrigin"], # required
    #             expose_headers: ["ExposeHeader"],
    #             max_age_seconds: 1,
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] cors_rules
    #   A set of allowed origins and methods.
    #   @return [Array<Types::CORSRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CORSConfiguration AWS API Documentation
    #
    class CORSConfiguration < Struct.new(
      :cors_rules)
      include Aws::Structure
    end

    # Specifies a cross-origin access rule for an Amazon S3 bucket.
    #
    # @note When making an API call, you may pass CORSRule
    #   data as a hash:
    #
    #       {
    #         allowed_headers: ["AllowedHeader"],
    #         allowed_methods: ["AllowedMethod"], # required
    #         allowed_origins: ["AllowedOrigin"], # required
    #         expose_headers: ["ExposeHeader"],
    #         max_age_seconds: 1,
    #       }
    #
    # @!attribute [rw] allowed_headers
    #   Headers that are specified in the `Access-Control-Request-Headers`
    #   header. These headers are allowed in a preflight OPTIONS request. In
    #   response to any preflight OPTIONS request, Amazon S3 returns any
    #   requested headers that are allowed.
    #   @return [Array<String>]
    #
    # @!attribute [rw] allowed_methods
    #   An HTTP method that you allow the origin to execute. Valid values
    #   are `GET`, `PUT`, `HEAD`, `POST`, and `DELETE`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] allowed_origins
    #   One or more origins you want customers to be able to access the
    #   bucket from.
    #   @return [Array<String>]
    #
    # @!attribute [rw] expose_headers
    #   One or more headers in the response that you want customers to be
    #   able to access from their applications (for example, from a
    #   JavaScript `XMLHttpRequest` object).
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_age_seconds
    #   The time in seconds that your browser is to cache the preflight
    #   response for the specified resource.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CORSRule AWS API Documentation
    #
    class CORSRule < Struct.new(
      :allowed_headers,
      :allowed_methods,
      :allowed_origins,
      :expose_headers,
      :max_age_seconds)
      include Aws::Structure
    end

    # Describes how a CSV-formatted input object is formatted.
    #
    # @note When making an API call, you may pass CSVInput
    #   data as a hash:
    #
    #       {
    #         file_header_info: "USE", # accepts USE, IGNORE, NONE
    #         comments: "Comments",
    #         quote_escape_character: "QuoteEscapeCharacter",
    #         record_delimiter: "RecordDelimiter",
    #         field_delimiter: "FieldDelimiter",
    #         quote_character: "QuoteCharacter",
    #         allow_quoted_record_delimiter: false,
    #       }
    #
    # @!attribute [rw] file_header_info
    #   Describes the first line of input. Valid values: None, Ignore, Use.
    #   @return [String]
    #
    # @!attribute [rw] comments
    #   The single character used to indicate a row should be ignored when
    #   present at the start of a row.
    #   @return [String]
    #
    # @!attribute [rw] quote_escape_character
    #   The single character used for escaping the quote character inside an
    #   already escaped value.
    #   @return [String]
    #
    # @!attribute [rw] record_delimiter
    #   The value used to separate individual records.
    #   @return [String]
    #
    # @!attribute [rw] field_delimiter
    #   The value used to separate individual fields in a record.
    #   @return [String]
    #
    # @!attribute [rw] quote_character
    #   Value used for escaping where the field delimiter is part of the
    #   value.
    #   @return [String]
    #
    # @!attribute [rw] allow_quoted_record_delimiter
    #   Specifies that CSV field values may contain quoted record delimiters
    #   and such records should be allowed. Default value is FALSE. Setting
    #   this value to TRUE may lower performance.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CSVInput AWS API Documentation
    #
    class CSVInput < Struct.new(
      :file_header_info,
      :comments,
      :quote_escape_character,
      :record_delimiter,
      :field_delimiter,
      :quote_character,
      :allow_quoted_record_delimiter)
      include Aws::Structure
    end

    # Describes how CSV-formatted results are formatted.
    #
    # @note When making an API call, you may pass CSVOutput
    #   data as a hash:
    #
    #       {
    #         quote_fields: "ALWAYS", # accepts ALWAYS, ASNEEDED
    #         quote_escape_character: "QuoteEscapeCharacter",
    #         record_delimiter: "RecordDelimiter",
    #         field_delimiter: "FieldDelimiter",
    #         quote_character: "QuoteCharacter",
    #       }
    #
    # @!attribute [rw] quote_fields
    #   Indicates whether or not all output fields should be quoted.
    #   @return [String]
    #
    # @!attribute [rw] quote_escape_character
    #   Th single character used for escaping the quote character inside an
    #   already escaped value.
    #   @return [String]
    #
    # @!attribute [rw] record_delimiter
    #   The value used to separate individual records.
    #   @return [String]
    #
    # @!attribute [rw] field_delimiter
    #   The value used to separate individual fields in a record.
    #   @return [String]
    #
    # @!attribute [rw] quote_character
    #   The value used for escaping where the field delimiter is part of the
    #   value.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CSVOutput AWS API Documentation
    #
    class CSVOutput < Struct.new(
      :quote_fields,
      :quote_escape_character,
      :record_delimiter,
      :field_delimiter,
      :quote_character)
      include Aws::Structure
    end

    # @note When making an API call, you may pass CloudFunctionConfiguration
    #   data as a hash:
    #
    #       {
    #         id: "NotificationId",
    #         event: "s3:ReducedRedundancyLostObject", # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #         events: ["s3:ReducedRedundancyLostObject"], # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #         cloud_function: "CloudFunction",
    #         invocation_role: "CloudFunctionInvocationRole",
    #       }
    #
    # @!attribute [rw] id
    #   An optional unique identifier for configurations in a notification
    #   configuration. If you don't provide one, Amazon S3 will assign an
    #   ID.
    #   @return [String]
    #
    # @!attribute [rw] event
    #   The bucket event for which to send notifications.
    #   @return [String]
    #
    # @!attribute [rw] events
    #   @return [Array<String>]
    #
    # @!attribute [rw] cloud_function
    #   @return [String]
    #
    # @!attribute [rw] invocation_role
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CloudFunctionConfiguration AWS API Documentation
    #
    class CloudFunctionConfiguration < Struct.new(
      :id,
      :event,
      :events,
      :cloud_function,
      :invocation_role)
      include Aws::Structure
    end

    # @!attribute [rw] prefix
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CommonPrefix AWS API Documentation
    #
    class CommonPrefix < Struct.new(
      :prefix)
      include Aws::Structure
    end

    # @!attribute [rw] location
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] expiration
    #   If the object expiration is configured, this will contain the
    #   expiration date (expiry-date) and rule ID (rule-id). The value of
    #   rule-id is URL encoded.
    #   @return [String]
    #
    # @!attribute [rw] etag
    #   Entity tag of the object.
    #   @return [String]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   Version of the object.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   If present, specifies the ID of the AWS Key Management Service (KMS)
    #   master encryption key that was used for the object.
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompleteMultipartUploadOutput AWS API Documentation
    #
    class CompleteMultipartUploadOutput < Struct.new(
      :location,
      :bucket,
      :key,
      :expiration,
      :etag,
      :server_side_encryption,
      :version_id,
      :ssekms_key_id,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass CompleteMultipartUploadRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         multipart_upload: {
    #           parts: [
    #             {
    #               etag: "ETag",
    #               part_number: 1,
    #             },
    #           ],
    #         },
    #         upload_id: "MultipartUploadId", # required
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] multipart_upload
    #   @return [Types::CompletedMultipartUpload]
    #
    # @!attribute [rw] upload_id
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompleteMultipartUploadRequest AWS API Documentation
    #
    class CompleteMultipartUploadRequest < Struct.new(
      :bucket,
      :key,
      :multipart_upload,
      :upload_id,
      :request_payer)
      include Aws::Structure
    end

    # @note When making an API call, you may pass CompletedMultipartUpload
    #   data as a hash:
    #
    #       {
    #         parts: [
    #           {
    #             etag: "ETag",
    #             part_number: 1,
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] parts
    #   @return [Array<Types::CompletedPart>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompletedMultipartUpload AWS API Documentation
    #
    class CompletedMultipartUpload < Struct.new(
      :parts)
      include Aws::Structure
    end

    # @note When making an API call, you may pass CompletedPart
    #   data as a hash:
    #
    #       {
    #         etag: "ETag",
    #         part_number: 1,
    #       }
    #
    # @!attribute [rw] etag
    #   Entity tag returned when the part was uploaded.
    #   @return [String]
    #
    # @!attribute [rw] part_number
    #   Part number that identifies the part. This is a positive integer
    #   between 1 and 10,000.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompletedPart AWS API Documentation
    #
    class CompletedPart < Struct.new(
      :etag,
      :part_number)
      include Aws::Structure
    end

    # Specifies a condition that must be met for a redirect to apply.
    #
    # @note When making an API call, you may pass Condition
    #   data as a hash:
    #
    #       {
    #         http_error_code_returned_equals: "HttpErrorCodeReturnedEquals",
    #         key_prefix_equals: "KeyPrefixEquals",
    #       }
    #
    # @!attribute [rw] http_error_code_returned_equals
    #   The HTTP error code when the redirect is applied. In the event of an
    #   error, if the error code equals this value, then the specified
    #   redirect is applied. Required when parent element `Condition` is
    #   specified and sibling `KeyPrefixEquals` is not specified. If both
    #   are specified, then both must be true for the redirect to be
    #   applied.
    #   @return [String]
    #
    # @!attribute [rw] key_prefix_equals
    #   The object key name prefix when the redirect is applied. For
    #   example, to redirect requests for `ExamplePage.html`, the key prefix
    #   will be `ExamplePage.html`. To redirect request for all pages with
    #   the prefix `docs/`, the key prefix will be `/docs`, which identifies
    #   all objects in the docs/ folder. Required when the parent element
    #   `Condition` is specified and sibling `HttpErrorCodeReturnedEquals`
    #   is not specified. If both conditions are specified, both must be
    #   true for the redirect to be applied.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Condition AWS API Documentation
    #
    class Condition < Struct.new(
      :http_error_code_returned_equals,
      :key_prefix_equals)
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ContinuationEvent AWS API Documentation
    #
    class ContinuationEvent < Struct.new(
      :event_type)
      include Aws::Structure
    end

    # @!attribute [rw] copy_object_result
    #   @return [Types::CopyObjectResult]
    #
    # @!attribute [rw] expiration
    #   If the object expiration is configured, the response includes this
    #   header.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_version_id
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   Version ID of the newly created copy.
    #   @return [String]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header confirming the
    #   encryption algorithm used.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header to provide
    #   round trip message integrity verification of the customer-provided
    #   encryption key.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   If present, specifies the ID of the AWS Key Management Service (KMS)
    #   master encryption key that was used for the object.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_encryption_context
    #   If present, specifies the AWS KMS Encryption Context to use for
    #   object encryption. The value of this header is a base64-encoded
    #   UTF-8 string holding JSON with the encryption context key-value
    #   pairs.
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObjectOutput AWS API Documentation
    #
    class CopyObjectOutput < Struct.new(
      :copy_object_result,
      :expiration,
      :copy_source_version_id,
      :version_id,
      :server_side_encryption,
      :sse_customer_algorithm,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :ssekms_encryption_context,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass CopyObjectRequest
    #   data as a hash:
    #
    #       {
    #         acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
    #         bucket: "BucketName", # required
    #         cache_control: "CacheControl",
    #         content_disposition: "ContentDisposition",
    #         content_encoding: "ContentEncoding",
    #         content_language: "ContentLanguage",
    #         content_type: "ContentType",
    #         copy_source: "CopySource", # required
    #         copy_source_if_match: "CopySourceIfMatch",
    #         copy_source_if_modified_since: Time.now,
    #         copy_source_if_none_match: "CopySourceIfNoneMatch",
    #         copy_source_if_unmodified_since: Time.now,
    #         expires: Time.now,
    #         grant_full_control: "GrantFullControl",
    #         grant_read: "GrantRead",
    #         grant_read_acp: "GrantReadACP",
    #         grant_write_acp: "GrantWriteACP",
    #         key: "ObjectKey", # required
    #         metadata: {
    #           "MetadataKey" => "MetadataValue",
    #         },
    #         metadata_directive: "COPY", # accepts COPY, REPLACE
    #         tagging_directive: "COPY", # accepts COPY, REPLACE
    #         server_side_encryption: "AES256", # accepts AES256, aws:kms
    #         storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #         website_redirect_location: "WebsiteRedirectLocation",
    #         sse_customer_algorithm: "SSECustomerAlgorithm",
    #         sse_customer_key: "SSECustomerKey",
    #         sse_customer_key_md5: "SSECustomerKeyMD5",
    #         ssekms_key_id: "SSEKMSKeyId",
    #         ssekms_encryption_context: "SSEKMSEncryptionContext",
    #         copy_source_sse_customer_algorithm: "CopySourceSSECustomerAlgorithm",
    #         copy_source_sse_customer_key: "CopySourceSSECustomerKey",
    #         copy_source_sse_customer_key_md5: "CopySourceSSECustomerKeyMD5",
    #         request_payer: "requester", # accepts requester
    #         tagging: "TaggingHeader",
    #         object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
    #         object_lock_retain_until_date: Time.now,
    #         object_lock_legal_hold_status: "ON", # accepts ON, OFF
    #       }
    #
    # @!attribute [rw] acl
    #   The canned ACL to apply to the object.
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] cache_control
    #   Specifies caching behavior along the request/reply chain.
    #   @return [String]
    #
    # @!attribute [rw] content_disposition
    #   Specifies presentational information for the object.
    #   @return [String]
    #
    # @!attribute [rw] content_encoding
    #   Specifies what content encodings have been applied to the object and
    #   thus what decoding mechanisms must be applied to obtain the
    #   media-type referenced by the Content-Type header field.
    #   @return [String]
    #
    # @!attribute [rw] content_language
    #   The language the content is in.
    #   @return [String]
    #
    # @!attribute [rw] content_type
    #   A standard MIME type describing the format of the object data.
    #   @return [String]
    #
    # @!attribute [rw] copy_source
    #   The name of the source bucket and key name of the source object,
    #   separated by a slash (/). Must be URL-encoded.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_if_match
    #   Copies the object if its entity tag (ETag) matches the specified
    #   tag.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_if_modified_since
    #   Copies the object if it has been modified since the specified time.
    #   @return [Time]
    #
    # @!attribute [rw] copy_source_if_none_match
    #   Copies the object if its entity tag (ETag) is different than the
    #   specified ETag.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_if_unmodified_since
    #   Copies the object if it hasn't been modified since the specified
    #   time.
    #   @return [Time]
    #
    # @!attribute [rw] expires
    #   The date and time at which the object is no longer cacheable.
    #   @return [Time]
    #
    # @!attribute [rw] grant_full_control
    #   Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
    #   object.
    #   @return [String]
    #
    # @!attribute [rw] grant_read
    #   Allows grantee to read the object data and its metadata.
    #   @return [String]
    #
    # @!attribute [rw] grant_read_acp
    #   Allows grantee to read the object ACL.
    #   @return [String]
    #
    # @!attribute [rw] grant_write_acp
    #   Allows grantee to write the ACL for the applicable object.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] metadata
    #   A map of metadata to store with the object in S3.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] metadata_directive
    #   Specifies whether the metadata is copied from the source object or
    #   replaced with metadata provided in the request.
    #   @return [String]
    #
    # @!attribute [rw] tagging_directive
    #   Specifies whether the object tag-set are copied from the source
    #   object or replaced with tag-set provided in the request.
    #   @return [String]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] storage_class
    #   The type of storage to use for the object. Defaults to 'STANDARD'.
    #   @return [String]
    #
    # @!attribute [rw] website_redirect_location
    #   If the bucket is configured as a website, redirects requests for
    #   this object to another object in the same bucket or to an external
    #   URL. Amazon S3 stores the value of this header in the object
    #   metadata.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   Specifies the algorithm to use to when encrypting the object (e.g.,
    #   AES256).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key
    #   Specifies the customer-provided encryption key for Amazon S3 to use
    #   in encrypting data. This value is used to store the object and then
    #   it is discarded; Amazon does not store the encryption key. The key
    #   must be appropriate for use with the algorithm specified in the
    #   x-amz-server-side​-encryption​-customer-algorithm header.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   Specifies the 128-bit MD5 digest of the encryption key according to
    #   RFC 1321. Amazon S3 uses this header for a message integrity check
    #   to ensure the encryption key was transmitted without error.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   Specifies the AWS KMS key ID to use for object encryption. All GET
    #   and PUT requests for an object protected by AWS KMS will fail if not
    #   made via SSL or using SigV4. Documentation on configuring any of the
    #   officially supported AWS SDKs and CLI can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
    #   @return [String]
    #
    # @!attribute [rw] ssekms_encryption_context
    #   Specifies the AWS KMS Encryption Context to use for object
    #   encryption. The value of this header is a base64-encoded UTF-8
    #   string holding JSON with the encryption context key-value pairs.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_sse_customer_algorithm
    #   Specifies the algorithm to use when decrypting the source object
    #   (e.g., AES256).
    #   @return [String]
    #
    # @!attribute [rw] copy_source_sse_customer_key
    #   Specifies the customer-provided encryption key for Amazon S3 to use
    #   to decrypt the source object. The encryption key provided in this
    #   header must be one that was used when the source object was created.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_sse_customer_key_md5
    #   Specifies the 128-bit MD5 digest of the encryption key according to
    #   RFC 1321. Amazon S3 uses this header for a message integrity check
    #   to ensure the encryption key was transmitted without error.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] tagging
    #   The tag-set for the object destination object this value must be
    #   used in conjunction with the TaggingDirective. The tag-set must be
    #   encoded as URL Query parameters
    #   @return [String]
    #
    # @!attribute [rw] object_lock_mode
    #   The object lock mode that you want to apply to the copied object.
    #   @return [String]
    #
    # @!attribute [rw] object_lock_retain_until_date
    #   The date and time when you want the copied object's object lock to
    #   expire.
    #   @return [Time]
    #
    # @!attribute [rw] object_lock_legal_hold_status
    #   Specifies whether you want to apply a Legal Hold to the copied
    #   object.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObjectRequest AWS API Documentation
    #
    class CopyObjectRequest < Struct.new(
      :acl,
      :bucket,
      :cache_control,
      :content_disposition,
      :content_encoding,
      :content_language,
      :content_type,
      :copy_source,
      :copy_source_if_match,
      :copy_source_if_modified_since,
      :copy_source_if_none_match,
      :copy_source_if_unmodified_since,
      :expires,
      :grant_full_control,
      :grant_read,
      :grant_read_acp,
      :grant_write_acp,
      :key,
      :metadata,
      :metadata_directive,
      :tagging_directive,
      :server_side_encryption,
      :storage_class,
      :website_redirect_location,
      :sse_customer_algorithm,
      :sse_customer_key,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :ssekms_encryption_context,
      :copy_source_sse_customer_algorithm,
      :copy_source_sse_customer_key,
      :copy_source_sse_customer_key_md5,
      :request_payer,
      :tagging,
      :object_lock_mode,
      :object_lock_retain_until_date,
      :object_lock_legal_hold_status)
      include Aws::Structure
    end

    # @!attribute [rw] etag
    #   @return [String]
    #
    # @!attribute [rw] last_modified
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObjectResult AWS API Documentation
    #
    class CopyObjectResult < Struct.new(
      :etag,
      :last_modified)
      include Aws::Structure
    end

    # @!attribute [rw] etag
    #   Entity tag of the object.
    #   @return [String]
    #
    # @!attribute [rw] last_modified
    #   Date and time at which the object was uploaded.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyPartResult AWS API Documentation
    #
    class CopyPartResult < Struct.new(
      :etag,
      :last_modified)
      include Aws::Structure
    end

    # @note When making an API call, you may pass CreateBucketConfiguration
    #   data as a hash:
    #
    #       {
    #         location_constraint: "EU", # accepts EU, eu-west-1, us-west-1, us-west-2, ap-south-1, ap-southeast-1, ap-southeast-2, ap-northeast-1, sa-east-1, cn-north-1, eu-central-1
    #       }
    #
    # @!attribute [rw] location_constraint
    #   Specifies the region where the bucket will be created. If you don't
    #   specify a region, the bucket is created in US East (N. Virginia)
    #   Region (us-east-1).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucketConfiguration AWS API Documentation
    #
    class CreateBucketConfiguration < Struct.new(
      :location_constraint)
      include Aws::Structure
    end

    # @!attribute [rw] location
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucketOutput AWS API Documentation
    #
    class CreateBucketOutput < Struct.new(
      :location)
      include Aws::Structure
    end

    # @note When making an API call, you may pass CreateBucketRequest
    #   data as a hash:
    #
    #       {
    #         acl: "private", # accepts private, public-read, public-read-write, authenticated-read
    #         bucket: "BucketName", # required
    #         create_bucket_configuration: {
    #           location_constraint: "EU", # accepts EU, eu-west-1, us-west-1, us-west-2, ap-south-1, ap-southeast-1, ap-southeast-2, ap-northeast-1, sa-east-1, cn-north-1, eu-central-1
    #         },
    #         grant_full_control: "GrantFullControl",
    #         grant_read: "GrantRead",
    #         grant_read_acp: "GrantReadACP",
    #         grant_write: "GrantWrite",
    #         grant_write_acp: "GrantWriteACP",
    #         object_lock_enabled_for_bucket: false,
    #       }
    #
    # @!attribute [rw] acl
    #   The canned ACL to apply to the bucket.
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] create_bucket_configuration
    #   @return [Types::CreateBucketConfiguration]
    #
    # @!attribute [rw] grant_full_control
    #   Allows grantee the read, write, read ACP, and write ACP permissions
    #   on the bucket.
    #   @return [String]
    #
    # @!attribute [rw] grant_read
    #   Allows grantee to list the objects in the bucket.
    #   @return [String]
    #
    # @!attribute [rw] grant_read_acp
    #   Allows grantee to read the bucket ACL.
    #   @return [String]
    #
    # @!attribute [rw] grant_write
    #   Allows grantee to create, overwrite, and delete any object in the
    #   bucket.
    #   @return [String]
    #
    # @!attribute [rw] grant_write_acp
    #   Allows grantee to write the ACL for the applicable bucket.
    #   @return [String]
    #
    # @!attribute [rw] object_lock_enabled_for_bucket
    #   Specifies whether you want Amazon S3 object lock to be enabled for
    #   the new bucket.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucketRequest AWS API Documentation
    #
    class CreateBucketRequest < Struct.new(
      :acl,
      :bucket,
      :create_bucket_configuration,
      :grant_full_control,
      :grant_read,
      :grant_read_acp,
      :grant_write,
      :grant_write_acp,
      :object_lock_enabled_for_bucket)
      include Aws::Structure
    end

    # @!attribute [rw] abort_date
    #   Date when multipart upload will become eligible for abort operation
    #   by lifecycle.
    #   @return [Time]
    #
    # @!attribute [rw] abort_rule_id
    #   Id of the lifecycle rule that makes a multipart upload eligible for
    #   abort operation.
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   Name of the bucket to which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   Object key for which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] upload_id
    #   ID for the initiated multipart upload.
    #   @return [String]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header confirming the
    #   encryption algorithm used.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header to provide
    #   round trip message integrity verification of the customer-provided
    #   encryption key.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   If present, specifies the ID of the AWS Key Management Service (KMS)
    #   master encryption key that was used for the object.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_encryption_context
    #   If present, specifies the AWS KMS Encryption Context to use for
    #   object encryption. The value of this header is a base64-encoded
    #   UTF-8 string holding JSON with the encryption context key-value
    #   pairs.
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateMultipartUploadOutput AWS API Documentation
    #
    class CreateMultipartUploadOutput < Struct.new(
      :abort_date,
      :abort_rule_id,
      :bucket,
      :key,
      :upload_id,
      :server_side_encryption,
      :sse_customer_algorithm,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :ssekms_encryption_context,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass CreateMultipartUploadRequest
    #   data as a hash:
    #
    #       {
    #         acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
    #         bucket: "BucketName", # required
    #         cache_control: "CacheControl",
    #         content_disposition: "ContentDisposition",
    #         content_encoding: "ContentEncoding",
    #         content_language: "ContentLanguage",
    #         content_type: "ContentType",
    #         expires: Time.now,
    #         grant_full_control: "GrantFullControl",
    #         grant_read: "GrantRead",
    #         grant_read_acp: "GrantReadACP",
    #         grant_write_acp: "GrantWriteACP",
    #         key: "ObjectKey", # required
    #         metadata: {
    #           "MetadataKey" => "MetadataValue",
    #         },
    #         server_side_encryption: "AES256", # accepts AES256, aws:kms
    #         storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #         website_redirect_location: "WebsiteRedirectLocation",
    #         sse_customer_algorithm: "SSECustomerAlgorithm",
    #         sse_customer_key: "SSECustomerKey",
    #         sse_customer_key_md5: "SSECustomerKeyMD5",
    #         ssekms_key_id: "SSEKMSKeyId",
    #         ssekms_encryption_context: "SSEKMSEncryptionContext",
    #         request_payer: "requester", # accepts requester
    #         tagging: "TaggingHeader",
    #         object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
    #         object_lock_retain_until_date: Time.now,
    #         object_lock_legal_hold_status: "ON", # accepts ON, OFF
    #       }
    #
    # @!attribute [rw] acl
    #   The canned ACL to apply to the object.
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] cache_control
    #   Specifies caching behavior along the request/reply chain.
    #   @return [String]
    #
    # @!attribute [rw] content_disposition
    #   Specifies presentational information for the object.
    #   @return [String]
    #
    # @!attribute [rw] content_encoding
    #   Specifies what content encodings have been applied to the object and
    #   thus what decoding mechanisms must be applied to obtain the
    #   media-type referenced by the Content-Type header field.
    #   @return [String]
    #
    # @!attribute [rw] content_language
    #   The language the content is in.
    #   @return [String]
    #
    # @!attribute [rw] content_type
    #   A standard MIME type describing the format of the object data.
    #   @return [String]
    #
    # @!attribute [rw] expires
    #   The date and time at which the object is no longer cacheable.
    #   @return [Time]
    #
    # @!attribute [rw] grant_full_control
    #   Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
    #   object.
    #   @return [String]
    #
    # @!attribute [rw] grant_read
    #   Allows grantee to read the object data and its metadata.
    #   @return [String]
    #
    # @!attribute [rw] grant_read_acp
    #   Allows grantee to read the object ACL.
    #   @return [String]
    #
    # @!attribute [rw] grant_write_acp
    #   Allows grantee to write the ACL for the applicable object.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] metadata
    #   A map of metadata to store with the object in S3.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] storage_class
    #   The type of storage to use for the object. Defaults to 'STANDARD'.
    #   @return [String]
    #
    # @!attribute [rw] website_redirect_location
    #   If the bucket is configured as a website, redirects requests for
    #   this object to another object in the same bucket or to an external
    #   URL. Amazon S3 stores the value of this header in the object
    #   metadata.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   Specifies the algorithm to use to when encrypting the object (e.g.,
    #   AES256).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key
    #   Specifies the customer-provided encryption key for Amazon S3 to use
    #   in encrypting data. This value is used to store the object and then
    #   it is discarded; Amazon does not store the encryption key. The key
    #   must be appropriate for use with the algorithm specified in the
    #   x-amz-server-side​-encryption​-customer-algorithm header.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   Specifies the 128-bit MD5 digest of the encryption key according to
    #   RFC 1321. Amazon S3 uses this header for a message integrity check
    #   to ensure the encryption key was transmitted without error.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   Specifies the AWS KMS key ID to use for object encryption. All GET
    #   and PUT requests for an object protected by AWS KMS will fail if not
    #   made via SSL or using SigV4. Documentation on configuring any of the
    #   officially supported AWS SDKs and CLI can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
    #   @return [String]
    #
    # @!attribute [rw] ssekms_encryption_context
    #   Specifies the AWS KMS Encryption Context to use for object
    #   encryption. The value of this header is a base64-encoded UTF-8
    #   string holding JSON with the encryption context key-value pairs.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] tagging
    #   The tag-set for the object. The tag-set must be encoded as URL Query
    #   parameters
    #   @return [String]
    #
    # @!attribute [rw] object_lock_mode
    #   Specifies the object lock mode that you want to apply to the
    #   uploaded object.
    #   @return [String]
    #
    # @!attribute [rw] object_lock_retain_until_date
    #   Specifies the date and time when you want the object lock to expire.
    #   @return [Time]
    #
    # @!attribute [rw] object_lock_legal_hold_status
    #   Specifies whether you want to apply a Legal Hold to the uploaded
    #   object.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateMultipartUploadRequest AWS API Documentation
    #
    class CreateMultipartUploadRequest < Struct.new(
      :acl,
      :bucket,
      :cache_control,
      :content_disposition,
      :content_encoding,
      :content_language,
      :content_type,
      :expires,
      :grant_full_control,
      :grant_read,
      :grant_read_acp,
      :grant_write_acp,
      :key,
      :metadata,
      :server_side_encryption,
      :storage_class,
      :website_redirect_location,
      :sse_customer_algorithm,
      :sse_customer_key,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :ssekms_encryption_context,
      :request_payer,
      :tagging,
      :object_lock_mode,
      :object_lock_retain_until_date,
      :object_lock_legal_hold_status)
      include Aws::Structure
    end

    # The container element for specifying the default object lock retention
    # settings for new objects placed in the specified bucket.
    #
    # @note When making an API call, you may pass DefaultRetention
    #   data as a hash:
    #
    #       {
    #         mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
    #         days: 1,
    #         years: 1,
    #       }
    #
    # @!attribute [rw] mode
    #   The default object lock retention mode you want to apply to new
    #   objects placed in the specified bucket.
    #   @return [String]
    #
    # @!attribute [rw] days
    #   The number of days that you want to specify for the default
    #   retention period.
    #   @return [Integer]
    #
    # @!attribute [rw] years
    #   The number of years that you want to specify for the default
    #   retention period.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DefaultRetention AWS API Documentation
    #
    class DefaultRetention < Struct.new(
      :mode,
      :days,
      :years)
      include Aws::Structure
    end

    # @note When making an API call, you may pass Delete
    #   data as a hash:
    #
    #       {
    #         objects: [ # required
    #           {
    #             key: "ObjectKey", # required
    #             version_id: "ObjectVersionId",
    #           },
    #         ],
    #         quiet: false,
    #       }
    #
    # @!attribute [rw] objects
    #   @return [Array<Types::ObjectIdentifier>]
    #
    # @!attribute [rw] quiet
    #   Element to enable quiet mode for the request. When you add this
    #   element, you must set its value to true.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Delete AWS API Documentation
    #
    class Delete < Struct.new(
      :objects,
      :quiet)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketAnalyticsConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         id: "AnalyticsId", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket from which an analytics configuration is
    #   deleted.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID that identifies the analytics configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketAnalyticsConfigurationRequest AWS API Documentation
    #
    class DeleteBucketAnalyticsConfigurationRequest < Struct.new(
      :bucket,
      :id)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketCorsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketCorsRequest AWS API Documentation
    #
    class DeleteBucketCorsRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketEncryptionRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket containing the server-side encryption
    #   configuration to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketEncryptionRequest AWS API Documentation
    #
    class DeleteBucketEncryptionRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketInventoryConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         id: "InventoryId", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket containing the inventory configuration to
    #   delete.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID used to identify the inventory configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketInventoryConfigurationRequest AWS API Documentation
    #
    class DeleteBucketInventoryConfigurationRequest < Struct.new(
      :bucket,
      :id)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketLifecycleRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketLifecycleRequest AWS API Documentation
    #
    class DeleteBucketLifecycleRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketMetricsConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         id: "MetricsId", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket containing the metrics configuration to
    #   delete.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID used to identify the metrics configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketMetricsConfigurationRequest AWS API Documentation
    #
    class DeleteBucketMetricsConfigurationRequest < Struct.new(
      :bucket,
      :id)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketPolicyRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketPolicyRequest AWS API Documentation
    #
    class DeleteBucketPolicyRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketReplicationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The bucket name.
    #
    #   <note markdown="1"> It can take a while to propagate the deletion of a replication
    #   configuration to all Amazon S3 systems.
    #
    #    </note>
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketReplicationRequest AWS API Documentation
    #
    class DeleteBucketReplicationRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketRequest AWS API Documentation
    #
    class DeleteBucketRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketTaggingRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketTaggingRequest AWS API Documentation
    #
    class DeleteBucketTaggingRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteBucketWebsiteRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketWebsiteRequest AWS API Documentation
    #
    class DeleteBucketWebsiteRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] owner
    #   @return [Types::Owner]
    #
    # @!attribute [rw] key
    #   The object key.
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   Version ID of an object.
    #   @return [String]
    #
    # @!attribute [rw] is_latest
    #   Specifies whether the object is (true) or is not (false) the latest
    #   version of an object.
    #   @return [Boolean]
    #
    # @!attribute [rw] last_modified
    #   Date and time the object was last modified.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteMarkerEntry AWS API Documentation
    #
    class DeleteMarkerEntry < Struct.new(
      :owner,
      :key,
      :version_id,
      :is_latest,
      :last_modified)
      include Aws::Structure
    end

    # Specifies whether Amazon S3 should replicate delete makers.
    #
    # @note When making an API call, you may pass DeleteMarkerReplication
    #   data as a hash:
    #
    #       {
    #         status: "Enabled", # accepts Enabled, Disabled
    #       }
    #
    # @!attribute [rw] status
    #   The status of the delete marker replication.
    #
    #   <note markdown="1"> In the current implementation, Amazon S3 doesn't replicate the
    #   delete markers. The status must be `Disabled`.
    #
    #    </note>
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteMarkerReplication AWS API Documentation
    #
    class DeleteMarkerReplication < Struct.new(
      :status)
      include Aws::Structure
    end

    # @!attribute [rw] delete_marker
    #   Specifies whether the versioned object that was permanently deleted
    #   was (true) or was not (false) a delete marker.
    #   @return [Boolean]
    #
    # @!attribute [rw] version_id
    #   Returns the version ID of the delete marker created as a result of
    #   the DELETE operation.
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectOutput AWS API Documentation
    #
    class DeleteObjectOutput < Struct.new(
      :delete_marker,
      :version_id,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteObjectRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         mfa: "MFA",
    #         version_id: "ObjectVersionId",
    #         request_payer: "requester", # accepts requester
    #         bypass_governance_retention: false,
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] mfa
    #   The concatenation of the authentication device's serial number, a
    #   space, and the value that is displayed on your authentication
    #   device.
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   VersionId used to reference a specific version of the object.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] bypass_governance_retention
    #   Indicates whether Amazon S3 object lock should bypass
    #   governance-mode restrictions to process this operation.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectRequest AWS API Documentation
    #
    class DeleteObjectRequest < Struct.new(
      :bucket,
      :key,
      :mfa,
      :version_id,
      :request_payer,
      :bypass_governance_retention)
      include Aws::Structure
    end

    # @!attribute [rw] version_id
    #   The versionId of the object the tag-set was removed from.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectTaggingOutput AWS API Documentation
    #
    class DeleteObjectTaggingOutput < Struct.new(
      :version_id)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteObjectTaggingRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         version_id: "ObjectVersionId",
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   The versionId of the object that the tag-set will be removed from.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectTaggingRequest AWS API Documentation
    #
    class DeleteObjectTaggingRequest < Struct.new(
      :bucket,
      :key,
      :version_id)
      include Aws::Structure
    end

    # @!attribute [rw] deleted
    #   @return [Array<Types::DeletedObject>]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @!attribute [rw] errors
    #   @return [Array<Types::Error>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectsOutput AWS API Documentation
    #
    class DeleteObjectsOutput < Struct.new(
      :deleted,
      :request_charged,
      :errors)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeleteObjectsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         delete: { # required
    #           objects: [ # required
    #             {
    #               key: "ObjectKey", # required
    #               version_id: "ObjectVersionId",
    #             },
    #           ],
    #           quiet: false,
    #         },
    #         mfa: "MFA",
    #         request_payer: "requester", # accepts requester
    #         bypass_governance_retention: false,
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] delete
    #   @return [Types::Delete]
    #
    # @!attribute [rw] mfa
    #   The concatenation of the authentication device's serial number, a
    #   space, and the value that is displayed on your authentication
    #   device.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] bypass_governance_retention
    #   Specifies whether you want to delete this object even if it has a
    #   Governance-type object lock in place. You must have sufficient
    #   permissions to perform this operation.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectsRequest AWS API Documentation
    #
    class DeleteObjectsRequest < Struct.new(
      :bucket,
      :delete,
      :mfa,
      :request_payer,
      :bypass_governance_retention)
      include Aws::Structure
    end

    # @note When making an API call, you may pass DeletePublicAccessBlockRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The Amazon S3 bucket whose `PublicAccessBlock` configuration you
    #   want to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletePublicAccessBlockRequest AWS API Documentation
    #
    class DeletePublicAccessBlockRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   @return [String]
    #
    # @!attribute [rw] delete_marker
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_marker_version_id
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletedObject AWS API Documentation
    #
    class DeletedObject < Struct.new(
      :key,
      :version_id,
      :delete_marker,
      :delete_marker_version_id)
      include Aws::Structure
    end

    # Specifies information about where to publish analysis or configuration
    # results for an Amazon S3 bucket.
    #
    # @note When making an API call, you may pass Destination
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         account: "AccountId",
    #         storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #         access_control_translation: {
    #           owner: "Destination", # required, accepts Destination
    #         },
    #         encryption_configuration: {
    #           replica_kms_key_id: "ReplicaKmsKeyID",
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   The Amazon Resource Name (ARN) of the bucket where you want Amazon
    #   S3 to store replicas of the object identified by the rule.
    #
    #   A replication configuration can replicate objects to only one
    #   destination bucket. If there are multiple rules in your replication
    #   configuration, all rules must specify the same destination bucket.
    #   @return [String]
    #
    # @!attribute [rw] account
    #   Destination bucket owner account ID. In a cross-account scenario, if
    #   you direct Amazon S3 to change replica ownership to the AWS account
    #   that owns the destination bucket by specifying the
    #   `AccessControlTranslation` property, this is the account ID of the
    #   destination bucket owner. For more information, see [Cross-Region
    #   Replication Additional Configuration: Change Replica Owner][1] in
    #   the *Amazon Simple Storage Service Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-change-owner.html
    #   @return [String]
    #
    # @!attribute [rw] storage_class
    #   The storage class to use when replicating objects, such as standard
    #   or reduced redundancy. By default, Amazon S3 uses the storage class
    #   of the source object to create the object replica.
    #
    #   For valid values, see the `StorageClass` element of the [PUT Bucket
    #   replication][1] action in the *Amazon Simple Storage Service API
    #   Reference*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html
    #   @return [String]
    #
    # @!attribute [rw] access_control_translation
    #   Specify this only in a cross-account scenario (where source and
    #   destination bucket owners are not the same), and you want to change
    #   replica ownership to the AWS account that owns the destination
    #   bucket. If this is not specified in the replication configuration,
    #   the replicas are owned by same AWS account that owns the source
    #   object.
    #   @return [Types::AccessControlTranslation]
    #
    # @!attribute [rw] encryption_configuration
    #   A container that provides information about encryption. If
    #   `SourceSelectionCriteria` is specified, you must specify this
    #   element.
    #   @return [Types::EncryptionConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Destination AWS API Documentation
    #
    class Destination < Struct.new(
      :bucket,
      :account,
      :storage_class,
      :access_control_translation,
      :encryption_configuration)
      include Aws::Structure
    end

    # Describes the server-side encryption that will be applied to the
    # restore results.
    #
    # @note When making an API call, you may pass Encryption
    #   data as a hash:
    #
    #       {
    #         encryption_type: "AES256", # required, accepts AES256, aws:kms
    #         kms_key_id: "SSEKMSKeyId",
    #         kms_context: "KMSContext",
    #       }
    #
    # @!attribute [rw] encryption_type
    #   The server-side encryption algorithm used when storing job results
    #   in Amazon S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] kms_key_id
    #   If the encryption type is aws:kms, this optional value specifies the
    #   AWS KMS key ID to use for encryption of job results.
    #   @return [String]
    #
    # @!attribute [rw] kms_context
    #   If the encryption type is aws:kms, this optional value can be used
    #   to specify the encryption context for the restore results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Encryption AWS API Documentation
    #
    class Encryption < Struct.new(
      :encryption_type,
      :kms_key_id,
      :kms_context)
      include Aws::Structure
    end

    # Specifies encryption-related information for an Amazon S3 bucket that
    # is a destination for replicated objects.
    #
    # @note When making an API call, you may pass EncryptionConfiguration
    #   data as a hash:
    #
    #       {
    #         replica_kms_key_id: "ReplicaKmsKeyID",
    #       }
    #
    # @!attribute [rw] replica_kms_key_id
    #   Specifies the AWS KMS Key ID (Key ARN or Alias ARN) for the
    #   destination bucket. Amazon S3 uses this key to encrypt replica
    #   objects.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/EncryptionConfiguration AWS API Documentation
    #
    class EncryptionConfiguration < Struct.new(
      :replica_kms_key_id)
      include Aws::Structure
    end

    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/EndEvent AWS API Documentation
    #
    class EndEvent < Struct.new(
      :event_type)
      include Aws::Structure
    end

    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   @return [String]
    #
    # @!attribute [rw] code
    #   @return [String]
    #
    # @!attribute [rw] message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Error AWS API Documentation
    #
    class Error < Struct.new(
      :key,
      :version_id,
      :code,
      :message)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ErrorDocument
    #   data as a hash:
    #
    #       {
    #         key: "ObjectKey", # required
    #       }
    #
    # @!attribute [rw] key
    #   The object key name to use when a 4XX class error occurs.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ErrorDocument AWS API Documentation
    #
    class ErrorDocument < Struct.new(
      :key)
      include Aws::Structure
    end

    # Specifies the Amazon S3 object key name to filter on and whether to
    # filter on the suffix or prefix of the key name.
    #
    # @note When making an API call, you may pass FilterRule
    #   data as a hash:
    #
    #       {
    #         name: "prefix", # accepts prefix, suffix
    #         value: "FilterRuleValue",
    #       }
    #
    # @!attribute [rw] name
    #   The object key name prefix or suffix identifying one or more objects
    #   to which the filtering rule applies. The maximum length is 1,024
    #   characters. Overlapping prefixes and suffixes are not supported. For
    #   more information, see [Configuring Event Notifications][1] in the
    #   *Amazon Simple Storage Service Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value that the filter searches for in object key names.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/FilterRule AWS API Documentation
    #
    class FilterRule < Struct.new(
      :name,
      :value)
      include Aws::Structure
    end

    # @!attribute [rw] status
    #   The accelerate configuration of the bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAccelerateConfigurationOutput AWS API Documentation
    #
    class GetBucketAccelerateConfigurationOutput < Struct.new(
      :status)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketAccelerateConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   Name of the bucket for which the accelerate configuration is
    #   retrieved.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAccelerateConfigurationRequest AWS API Documentation
    #
    class GetBucketAccelerateConfigurationRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] owner
    #   @return [Types::Owner]
    #
    # @!attribute [rw] grants
    #   A list of grants.
    #   @return [Array<Types::Grant>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAclOutput AWS API Documentation
    #
    class GetBucketAclOutput < Struct.new(
      :owner,
      :grants)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketAclRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAclRequest AWS API Documentation
    #
    class GetBucketAclRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] analytics_configuration
    #   The configuration and any analyses for the analytics filter.
    #   @return [Types::AnalyticsConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAnalyticsConfigurationOutput AWS API Documentation
    #
    class GetBucketAnalyticsConfigurationOutput < Struct.new(
      :analytics_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketAnalyticsConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         id: "AnalyticsId", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket from which an analytics configuration is
    #   retrieved.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID that identifies the analytics configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAnalyticsConfigurationRequest AWS API Documentation
    #
    class GetBucketAnalyticsConfigurationRequest < Struct.new(
      :bucket,
      :id)
      include Aws::Structure
    end

    # @!attribute [rw] cors_rules
    #   @return [Array<Types::CORSRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketCorsOutput AWS API Documentation
    #
    class GetBucketCorsOutput < Struct.new(
      :cors_rules)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketCorsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketCorsRequest AWS API Documentation
    #
    class GetBucketCorsRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] server_side_encryption_configuration
    #   @return [Types::ServerSideEncryptionConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketEncryptionOutput AWS API Documentation
    #
    class GetBucketEncryptionOutput < Struct.new(
      :server_side_encryption_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketEncryptionRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket from which the server-side encryption
    #   configuration is retrieved.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketEncryptionRequest AWS API Documentation
    #
    class GetBucketEncryptionRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] inventory_configuration
    #   Specifies the inventory configuration.
    #   @return [Types::InventoryConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketInventoryConfigurationOutput AWS API Documentation
    #
    class GetBucketInventoryConfigurationOutput < Struct.new(
      :inventory_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketInventoryConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         id: "InventoryId", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket containing the inventory configuration to
    #   retrieve.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID used to identify the inventory configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketInventoryConfigurationRequest AWS API Documentation
    #
    class GetBucketInventoryConfigurationRequest < Struct.new(
      :bucket,
      :id)
      include Aws::Structure
    end

    # @!attribute [rw] rules
    #   @return [Array<Types::LifecycleRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleConfigurationOutput AWS API Documentation
    #
    class GetBucketLifecycleConfigurationOutput < Struct.new(
      :rules)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketLifecycleConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleConfigurationRequest AWS API Documentation
    #
    class GetBucketLifecycleConfigurationRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] rules
    #   @return [Array<Types::Rule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleOutput AWS API Documentation
    #
    class GetBucketLifecycleOutput < Struct.new(
      :rules)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketLifecycleRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleRequest AWS API Documentation
    #
    class GetBucketLifecycleRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] location_constraint
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLocationOutput AWS API Documentation
    #
    class GetBucketLocationOutput < Struct.new(
      :location_constraint)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketLocationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLocationRequest AWS API Documentation
    #
    class GetBucketLocationRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] logging_enabled
    #   @return [Types::LoggingEnabled]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLoggingOutput AWS API Documentation
    #
    class GetBucketLoggingOutput < Struct.new(
      :logging_enabled)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketLoggingRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLoggingRequest AWS API Documentation
    #
    class GetBucketLoggingRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] metrics_configuration
    #   Specifies the metrics configuration.
    #   @return [Types::MetricsConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketMetricsConfigurationOutput AWS API Documentation
    #
    class GetBucketMetricsConfigurationOutput < Struct.new(
      :metrics_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketMetricsConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         id: "MetricsId", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket containing the metrics configuration to
    #   retrieve.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID used to identify the metrics configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketMetricsConfigurationRequest AWS API Documentation
    #
    class GetBucketMetricsConfigurationRequest < Struct.new(
      :bucket,
      :id)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketNotificationConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   Name of the bucket to get the notification configuration for.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotificationConfigurationRequest AWS API Documentation
    #
    class GetBucketNotificationConfigurationRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] policy
    #   The bucket policy as a JSON document.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyOutput AWS API Documentation
    #
    class GetBucketPolicyOutput < Struct.new(
      :policy)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketPolicyRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyRequest AWS API Documentation
    #
    class GetBucketPolicyRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] policy_status
    #   The policy status for the specified bucket.
    #   @return [Types::PolicyStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyStatusOutput AWS API Documentation
    #
    class GetBucketPolicyStatusOutput < Struct.new(
      :policy_status)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketPolicyStatusRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket whose policy status you want to
    #   retrieve.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyStatusRequest AWS API Documentation
    #
    class GetBucketPolicyStatusRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] replication_configuration
    #   @return [Types::ReplicationConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketReplicationOutput AWS API Documentation
    #
    class GetBucketReplicationOutput < Struct.new(
      :replication_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketReplicationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketReplicationRequest AWS API Documentation
    #
    class GetBucketReplicationRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] payer
    #   Specifies who pays for the download and request fees.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketRequestPaymentOutput AWS API Documentation
    #
    class GetBucketRequestPaymentOutput < Struct.new(
      :payer)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketRequestPaymentRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketRequestPaymentRequest AWS API Documentation
    #
    class GetBucketRequestPaymentRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] tag_set
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketTaggingOutput AWS API Documentation
    #
    class GetBucketTaggingOutput < Struct.new(
      :tag_set)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketTaggingRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketTaggingRequest AWS API Documentation
    #
    class GetBucketTaggingRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] status
    #   The versioning state of the bucket.
    #   @return [String]
    #
    # @!attribute [rw] mfa_delete
    #   Specifies whether MFA delete is enabled in the bucket versioning
    #   configuration. This element is only returned if the bucket has been
    #   configured with MFA delete. If the bucket has never been so
    #   configured, this element is not returned.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketVersioningOutput AWS API Documentation
    #
    class GetBucketVersioningOutput < Struct.new(
      :status,
      :mfa_delete)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketVersioningRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketVersioningRequest AWS API Documentation
    #
    class GetBucketVersioningRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] redirect_all_requests_to
    #   @return [Types::RedirectAllRequestsTo]
    #
    # @!attribute [rw] index_document
    #   @return [Types::IndexDocument]
    #
    # @!attribute [rw] error_document
    #   @return [Types::ErrorDocument]
    #
    # @!attribute [rw] routing_rules
    #   @return [Array<Types::RoutingRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketWebsiteOutput AWS API Documentation
    #
    class GetBucketWebsiteOutput < Struct.new(
      :redirect_all_requests_to,
      :index_document,
      :error_document,
      :routing_rules)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetBucketWebsiteRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketWebsiteRequest AWS API Documentation
    #
    class GetBucketWebsiteRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] owner
    #   @return [Types::Owner]
    #
    # @!attribute [rw] grants
    #   A list of grants.
    #   @return [Array<Types::Grant>]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectAclOutput AWS API Documentation
    #
    class GetObjectAclOutput < Struct.new(
      :owner,
      :grants,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetObjectAclRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         version_id: "ObjectVersionId",
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   VersionId used to reference a specific version of the object.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectAclRequest AWS API Documentation
    #
    class GetObjectAclRequest < Struct.new(
      :bucket,
      :key,
      :version_id,
      :request_payer)
      include Aws::Structure
    end

    # @!attribute [rw] legal_hold
    #   The current Legal Hold status for the specified object.
    #   @return [Types::ObjectLockLegalHold]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLegalHoldOutput AWS API Documentation
    #
    class GetObjectLegalHoldOutput < Struct.new(
      :legal_hold)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetObjectLegalHoldRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         version_id: "ObjectVersionId",
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   The bucket containing the object whose Legal Hold status you want to
    #   retrieve.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   The key name for the object whose Legal Hold status you want to
    #   retrieve.
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   The version ID of the object whose Legal Hold status you want to
    #   retrieve.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLegalHoldRequest AWS API Documentation
    #
    class GetObjectLegalHoldRequest < Struct.new(
      :bucket,
      :key,
      :version_id,
      :request_payer)
      include Aws::Structure
    end

    # @!attribute [rw] object_lock_configuration
    #   The specified bucket's object lock configuration.
    #   @return [Types::ObjectLockConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLockConfigurationOutput AWS API Documentation
    #
    class GetObjectLockConfigurationOutput < Struct.new(
      :object_lock_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetObjectLockConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The bucket whose object lock configuration you want to retrieve.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLockConfigurationRequest AWS API Documentation
    #
    class GetObjectLockConfigurationRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] body
    #   Object data.
    #   @return [IO]
    #
    # @!attribute [rw] delete_marker
    #   Specifies whether the object retrieved was (true) or was not (false)
    #   a Delete Marker. If false, this response header does not appear in
    #   the response.
    #   @return [Boolean]
    #
    # @!attribute [rw] accept_ranges
    #   @return [String]
    #
    # @!attribute [rw] expiration
    #   If the object expiration is configured (see PUT Bucket lifecycle),
    #   the response includes this header. It includes the expiry-date and
    #   rule-id key value pairs providing object expiration information. The
    #   value of the rule-id is URL encoded.
    #   @return [String]
    #
    # @!attribute [rw] restore
    #   Provides information about object restoration operation and
    #   expiration time of the restored object copy.
    #   @return [String]
    #
    # @!attribute [rw] last_modified
    #   Last modified date of the object
    #   @return [Time]
    #
    # @!attribute [rw] content_length
    #   Size of the body in bytes.
    #   @return [Integer]
    #
    # @!attribute [rw] etag
    #   An ETag is an opaque identifier assigned by a web server to a
    #   specific version of a resource found at a URL
    #   @return [String]
    #
    # @!attribute [rw] missing_meta
    #   This is set to the number of metadata entries not returned in
    #   x-amz-meta headers. This can happen if you create metadata using an
    #   API like SOAP that supports more flexible metadata than the REST
    #   API. For example, using SOAP, you can create metadata whose values
    #   are not legal HTTP headers.
    #   @return [Integer]
    #
    # @!attribute [rw] version_id
    #   Version of the object.
    #   @return [String]
    #
    # @!attribute [rw] cache_control
    #   Specifies caching behavior along the request/reply chain.
    #   @return [String]
    #
    # @!attribute [rw] content_disposition
    #   Specifies presentational information for the object.
    #   @return [String]
    #
    # @!attribute [rw] content_encoding
    #   Specifies what content encodings have been applied to the object and
    #   thus what decoding mechanisms must be applied to obtain the
    #   media-type referenced by the Content-Type header field.
    #   @return [String]
    #
    # @!attribute [rw] content_language
    #   The language the content is in.
    #   @return [String]
    #
    # @!attribute [rw] content_range
    #   The portion of the object returned in the response.
    #   @return [String]
    #
    # @!attribute [rw] content_type
    #   A standard MIME type describing the format of the object data.
    #   @return [String]
    #
    # @!attribute [rw] expires
    #   The date and time at which the object is no longer cacheable.
    #   @return [Time]
    #
    # @!attribute [rw] expires_string
    #   @return [String]
    #
    # @!attribute [rw] website_redirect_location
    #   If the bucket is configured as a website, redirects requests for
    #   this object to another object in the same bucket or to an external
    #   URL. Amazon S3 stores the value of this header in the object
    #   metadata.
    #   @return [String]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] metadata
    #   A map of metadata to store with the object in S3.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header confirming the
    #   encryption algorithm used.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header to provide
    #   round trip message integrity verification of the customer-provided
    #   encryption key.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   If present, specifies the ID of the AWS Key Management Service (KMS)
    #   master encryption key that was used for the object.
    #   @return [String]
    #
    # @!attribute [rw] storage_class
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @!attribute [rw] replication_status
    #   @return [String]
    #
    # @!attribute [rw] parts_count
    #   The count of parts this object has.
    #   @return [Integer]
    #
    # @!attribute [rw] tag_count
    #   The number of tags, if any, on the object.
    #   @return [Integer]
    #
    # @!attribute [rw] object_lock_mode
    #   The object lock mode currently in place for this object.
    #   @return [String]
    #
    # @!attribute [rw] object_lock_retain_until_date
    #   The date and time when this object's object lock will expire.
    #   @return [Time]
    #
    # @!attribute [rw] object_lock_legal_hold_status
    #   Indicates whether this object has an active legal hold. This field
    #   is only returned if you have permission to view an object's legal
    #   hold status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectOutput AWS API Documentation
    #
    class GetObjectOutput < Struct.new(
      :body,
      :delete_marker,
      :accept_ranges,
      :expiration,
      :restore,
      :last_modified,
      :content_length,
      :etag,
      :missing_meta,
      :version_id,
      :cache_control,
      :content_disposition,
      :content_encoding,
      :content_language,
      :content_range,
      :content_type,
      :expires,
      :expires_string,
      :website_redirect_location,
      :server_side_encryption,
      :metadata,
      :sse_customer_algorithm,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :storage_class,
      :request_charged,
      :replication_status,
      :parts_count,
      :tag_count,
      :object_lock_mode,
      :object_lock_retain_until_date,
      :object_lock_legal_hold_status)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetObjectRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         if_match: "IfMatch",
    #         if_modified_since: Time.now,
    #         if_none_match: "IfNoneMatch",
    #         if_unmodified_since: Time.now,
    #         key: "ObjectKey", # required
    #         range: "Range",
    #         response_cache_control: "ResponseCacheControl",
    #         response_content_disposition: "ResponseContentDisposition",
    #         response_content_encoding: "ResponseContentEncoding",
    #         response_content_language: "ResponseContentLanguage",
    #         response_content_type: "ResponseContentType",
    #         response_expires: Time.now,
    #         version_id: "ObjectVersionId",
    #         sse_customer_algorithm: "SSECustomerAlgorithm",
    #         sse_customer_key: "SSECustomerKey",
    #         sse_customer_key_md5: "SSECustomerKeyMD5",
    #         request_payer: "requester", # accepts requester
    #         part_number: 1,
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] if_match
    #   Return the object only if its entity tag (ETag) is the same as the
    #   one specified, otherwise return a 412 (precondition failed).
    #   @return [String]
    #
    # @!attribute [rw] if_modified_since
    #   Return the object only if it has been modified since the specified
    #   time, otherwise return a 304 (not modified).
    #   @return [Time]
    #
    # @!attribute [rw] if_none_match
    #   Return the object only if its entity tag (ETag) is different from
    #   the one specified, otherwise return a 304 (not modified).
    #   @return [String]
    #
    # @!attribute [rw] if_unmodified_since
    #   Return the object only if it has not been modified since the
    #   specified time, otherwise return a 412 (precondition failed).
    #   @return [Time]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] range
    #   Downloads the specified range bytes of an object. For more
    #   information about the HTTP Range header, go to
    #   http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.
    #   @return [String]
    #
    # @!attribute [rw] response_cache_control
    #   Sets the Cache-Control header of the response.
    #   @return [String]
    #
    # @!attribute [rw] response_content_disposition
    #   Sets the Content-Disposition header of the response
    #   @return [String]
    #
    # @!attribute [rw] response_content_encoding
    #   Sets the Content-Encoding header of the response.
    #   @return [String]
    #
    # @!attribute [rw] response_content_language
    #   Sets the Content-Language header of the response.
    #   @return [String]
    #
    # @!attribute [rw] response_content_type
    #   Sets the Content-Type header of the response.
    #   @return [String]
    #
    # @!attribute [rw] response_expires
    #   Sets the Expires header of the response.
    #   @return [Time]
    #
    # @!attribute [rw] version_id
    #   VersionId used to reference a specific version of the object.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   Specifies the algorithm to use to when encrypting the object (e.g.,
    #   AES256).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key
    #   Specifies the customer-provided encryption key for Amazon S3 to use
    #   in encrypting data. This value is used to store the object and then
    #   it is discarded; Amazon does not store the encryption key. The key
    #   must be appropriate for use with the algorithm specified in the
    #   x-amz-server-side​-encryption​-customer-algorithm header.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   Specifies the 128-bit MD5 digest of the encryption key according to
    #   RFC 1321. Amazon S3 uses this header for a message integrity check
    #   to ensure the encryption key was transmitted without error.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] part_number
    #   Part number of the object being read. This is a positive integer
    #   between 1 and 10,000. Effectively performs a 'ranged' GET request
    #   for the part specified. Useful for downloading just a part of an
    #   object.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRequest AWS API Documentation
    #
    class GetObjectRequest < Struct.new(
      :bucket,
      :if_match,
      :if_modified_since,
      :if_none_match,
      :if_unmodified_since,
      :key,
      :range,
      :response_cache_control,
      :response_content_disposition,
      :response_content_encoding,
      :response_content_language,
      :response_content_type,
      :response_expires,
      :version_id,
      :sse_customer_algorithm,
      :sse_customer_key,
      :sse_customer_key_md5,
      :request_payer,
      :part_number)
      include Aws::Structure
    end

    # @!attribute [rw] retention
    #   The container element for an object's retention settings.
    #   @return [Types::ObjectLockRetention]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRetentionOutput AWS API Documentation
    #
    class GetObjectRetentionOutput < Struct.new(
      :retention)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetObjectRetentionRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         version_id: "ObjectVersionId",
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   The bucket containing the object whose retention settings you want
    #   to retrieve.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   The key name for the object whose retention settings you want to
    #   retrieve.
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   The version ID for the object whose retention settings you want to
    #   retrieve.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRetentionRequest AWS API Documentation
    #
    class GetObjectRetentionRequest < Struct.new(
      :bucket,
      :key,
      :version_id,
      :request_payer)
      include Aws::Structure
    end

    # @!attribute [rw] version_id
    #   @return [String]
    #
    # @!attribute [rw] tag_set
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTaggingOutput AWS API Documentation
    #
    class GetObjectTaggingOutput < Struct.new(
      :version_id,
      :tag_set)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetObjectTaggingRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         version_id: "ObjectVersionId",
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTaggingRequest AWS API Documentation
    #
    class GetObjectTaggingRequest < Struct.new(
      :bucket,
      :key,
      :version_id)
      include Aws::Structure
    end

    # @!attribute [rw] body
    #   @return [IO]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTorrentOutput AWS API Documentation
    #
    class GetObjectTorrentOutput < Struct.new(
      :body,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetObjectTorrentRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTorrentRequest AWS API Documentation
    #
    class GetObjectTorrentRequest < Struct.new(
      :bucket,
      :key,
      :request_payer)
      include Aws::Structure
    end

    # @!attribute [rw] public_access_block_configuration
    #   The `PublicAccessBlock` configuration currently in effect for this
    #   Amazon S3 bucket.
    #   @return [Types::PublicAccessBlockConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetPublicAccessBlockOutput AWS API Documentation
    #
    class GetPublicAccessBlockOutput < Struct.new(
      :public_access_block_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GetPublicAccessBlockRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket whose `PublicAccessBlock`
    #   configuration you want to retrieve.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetPublicAccessBlockRequest AWS API Documentation
    #
    class GetPublicAccessBlockRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @note When making an API call, you may pass GlacierJobParameters
    #   data as a hash:
    #
    #       {
    #         tier: "Standard", # required, accepts Standard, Bulk, Expedited
    #       }
    #
    # @!attribute [rw] tier
    #   Glacier retrieval tier at which the restore will be processed.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GlacierJobParameters AWS API Documentation
    #
    class GlacierJobParameters < Struct.new(
      :tier)
      include Aws::Structure
    end

    # @note When making an API call, you may pass Grant
    #   data as a hash:
    #
    #       {
    #         grantee: {
    #           display_name: "DisplayName",
    #           email_address: "EmailAddress",
    #           id: "ID",
    #           type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #           uri: "URI",
    #         },
    #         permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
    #       }
    #
    # @!attribute [rw] grantee
    #   @return [Types::Grantee]
    #
    # @!attribute [rw] permission
    #   Specifies the permission given to the grantee.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Grant AWS API Documentation
    #
    class Grant < Struct.new(
      :grantee,
      :permission)
      include Aws::Structure
    end

    # @note When making an API call, you may pass Grantee
    #   data as a hash:
    #
    #       {
    #         display_name: "DisplayName",
    #         email_address: "EmailAddress",
    #         id: "ID",
    #         type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #         uri: "URI",
    #       }
    #
    # @!attribute [rw] display_name
    #   Screen name of the grantee.
    #   @return [String]
    #
    # @!attribute [rw] email_address
    #   Email address of the grantee.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The canonical user ID of the grantee.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   Type of grantee
    #   @return [String]
    #
    # @!attribute [rw] uri
    #   URI of the grantee group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Grantee AWS API Documentation
    #
    class Grantee < Struct.new(
      :display_name,
      :email_address,
      :id,
      :type,
      :uri)
      include Aws::Structure
    end

    # @note When making an API call, you may pass HeadBucketRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadBucketRequest AWS API Documentation
    #
    class HeadBucketRequest < Struct.new(
      :bucket)
      include Aws::Structure
    end

    # @!attribute [rw] delete_marker
    #   Specifies whether the object retrieved was (true) or was not (false)
    #   a Delete Marker. If false, this response header does not appear in
    #   the response.
    #   @return [Boolean]
    #
    # @!attribute [rw] accept_ranges
    #   @return [String]
    #
    # @!attribute [rw] expiration
    #   If the object expiration is configured (see PUT Bucket lifecycle),
    #   the response includes this header. It includes the expiry-date and
    #   rule-id key value pairs providing object expiration information. The
    #   value of the rule-id is URL encoded.
    #   @return [String]
    #
    # @!attribute [rw] restore
    #   Provides information about object restoration operation and
    #   expiration time of the restored object copy.
    #   @return [String]
    #
    # @!attribute [rw] last_modified
    #   Last modified date of the object
    #   @return [Time]
    #
    # @!attribute [rw] content_length
    #   Size of the body in bytes.
    #   @return [Integer]
    #
    # @!attribute [rw] etag
    #   An ETag is an opaque identifier assigned by a web server to a
    #   specific version of a resource found at a URL
    #   @return [String]
    #
    # @!attribute [rw] missing_meta
    #   This is set to the number of metadata entries not returned in
    #   x-amz-meta headers. This can happen if you create metadata using an
    #   API like SOAP that supports more flexible metadata than the REST
    #   API. For example, using SOAP, you can create metadata whose values
    #   are not legal HTTP headers.
    #   @return [Integer]
    #
    # @!attribute [rw] version_id
    #   Version of the object.
    #   @return [String]
    #
    # @!attribute [rw] cache_control
    #   Specifies caching behavior along the request/reply chain.
    #   @return [String]
    #
    # @!attribute [rw] content_disposition
    #   Specifies presentational information for the object.
    #   @return [String]
    #
    # @!attribute [rw] content_encoding
    #   Specifies what content encodings have been applied to the object and
    #   thus what decoding mechanisms must be applied to obtain the
    #   media-type referenced by the Content-Type header field.
    #   @return [String]
    #
    # @!attribute [rw] content_language
    #   The language the content is in.
    #   @return [String]
    #
    # @!attribute [rw] content_type
    #   A standard MIME type describing the format of the object data.
    #   @return [String]
    #
    # @!attribute [rw] expires
    #   The date and time at which the object is no longer cacheable.
    #   @return [Time]
    #
    # @!attribute [rw] expires_string
    #   @return [String]
    #
    # @!attribute [rw] website_redirect_location
    #   If the bucket is configured as a website, redirects requests for
    #   this object to another object in the same bucket or to an external
    #   URL. Amazon S3 stores the value of this header in the object
    #   metadata.
    #   @return [String]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] metadata
    #   A map of metadata to store with the object in S3.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header confirming the
    #   encryption algorithm used.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header to provide
    #   round trip message integrity verification of the customer-provided
    #   encryption key.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   If present, specifies the ID of the AWS Key Management Service (KMS)
    #   master encryption key that was used for the object.
    #   @return [String]
    #
    # @!attribute [rw] storage_class
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @!attribute [rw] replication_status
    #   @return [String]
    #
    # @!attribute [rw] parts_count
    #   The count of parts this object has.
    #   @return [Integer]
    #
    # @!attribute [rw] object_lock_mode
    #   The object lock mode currently in place for this object.
    #   @return [String]
    #
    # @!attribute [rw] object_lock_retain_until_date
    #   The date and time when this object's object lock expires.
    #   @return [Time]
    #
    # @!attribute [rw] object_lock_legal_hold_status
    #   The Legal Hold status for the specified object.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadObjectOutput AWS API Documentation
    #
    class HeadObjectOutput < Struct.new(
      :delete_marker,
      :accept_ranges,
      :expiration,
      :restore,
      :last_modified,
      :content_length,
      :etag,
      :missing_meta,
      :version_id,
      :cache_control,
      :content_disposition,
      :content_encoding,
      :content_language,
      :content_type,
      :expires,
      :expires_string,
      :website_redirect_location,
      :server_side_encryption,
      :metadata,
      :sse_customer_algorithm,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :storage_class,
      :request_charged,
      :replication_status,
      :parts_count,
      :object_lock_mode,
      :object_lock_retain_until_date,
      :object_lock_legal_hold_status)
      include Aws::Structure
    end

    # @note When making an API call, you may pass HeadObjectRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         if_match: "IfMatch",
    #         if_modified_since: Time.now,
    #         if_none_match: "IfNoneMatch",
    #         if_unmodified_since: Time.now,
    #         key: "ObjectKey", # required
    #         range: "Range",
    #         version_id: "ObjectVersionId",
    #         sse_customer_algorithm: "SSECustomerAlgorithm",
    #         sse_customer_key: "SSECustomerKey",
    #         sse_customer_key_md5: "SSECustomerKeyMD5",
    #         request_payer: "requester", # accepts requester
    #         part_number: 1,
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] if_match
    #   Return the object only if its entity tag (ETag) is the same as the
    #   one specified, otherwise return a 412 (precondition failed).
    #   @return [String]
    #
    # @!attribute [rw] if_modified_since
    #   Return the object only if it has been modified since the specified
    #   time, otherwise return a 304 (not modified).
    #   @return [Time]
    #
    # @!attribute [rw] if_none_match
    #   Return the object only if its entity tag (ETag) is different from
    #   the one specified, otherwise return a 304 (not modified).
    #   @return [String]
    #
    # @!attribute [rw] if_unmodified_since
    #   Return the object only if it has not been modified since the
    #   specified time, otherwise return a 412 (precondition failed).
    #   @return [Time]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] range
    #   Downloads the specified range bytes of an object. For more
    #   information about the HTTP Range header, go to
    #   http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   VersionId used to reference a specific version of the object.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   Specifies the algorithm to use to when encrypting the object (e.g.,
    #   AES256).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key
    #   Specifies the customer-provided encryption key for Amazon S3 to use
    #   in encrypting data. This value is used to store the object and then
    #   it is discarded; Amazon does not store the encryption key. The key
    #   must be appropriate for use with the algorithm specified in the
    #   x-amz-server-side​-encryption​-customer-algorithm header.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   Specifies the 128-bit MD5 digest of the encryption key according to
    #   RFC 1321. Amazon S3 uses this header for a message integrity check
    #   to ensure the encryption key was transmitted without error.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] part_number
    #   Part number of the object being read. This is a positive integer
    #   between 1 and 10,000. Effectively performs a 'ranged' HEAD request
    #   for the part specified. Useful querying about the size of the part
    #   and the number of parts in this object.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadObjectRequest AWS API Documentation
    #
    class HeadObjectRequest < Struct.new(
      :bucket,
      :if_match,
      :if_modified_since,
      :if_none_match,
      :if_unmodified_since,
      :key,
      :range,
      :version_id,
      :sse_customer_algorithm,
      :sse_customer_key,
      :sse_customer_key_md5,
      :request_payer,
      :part_number)
      include Aws::Structure
    end

    # @note When making an API call, you may pass IndexDocument
    #   data as a hash:
    #
    #       {
    #         suffix: "Suffix", # required
    #       }
    #
    # @!attribute [rw] suffix
    #   A suffix that is appended to a request that is for a directory on
    #   the website endpoint (e.g. if the suffix is index.html and you make
    #   a request to samplebucket/images/ the data that is returned will be
    #   for the object with the key name images/index.html) The suffix must
    #   not be empty and must not include a slash character.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/IndexDocument AWS API Documentation
    #
    class IndexDocument < Struct.new(
      :suffix)
      include Aws::Structure
    end

    # @!attribute [rw] id
    #   If the principal is an AWS account, it provides the Canonical User
    #   ID. If the principal is an IAM User, it provides a user ARN value.
    #   @return [String]
    #
    # @!attribute [rw] display_name
    #   Name of the Principal.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Initiator AWS API Documentation
    #
    class Initiator < Struct.new(
      :id,
      :display_name)
      include Aws::Structure
    end

    # Describes the serialization format of the object.
    #
    # @note When making an API call, you may pass InputSerialization
    #   data as a hash:
    #
    #       {
    #         csv: {
    #           file_header_info: "USE", # accepts USE, IGNORE, NONE
    #           comments: "Comments",
    #           quote_escape_character: "QuoteEscapeCharacter",
    #           record_delimiter: "RecordDelimiter",
    #           field_delimiter: "FieldDelimiter",
    #           quote_character: "QuoteCharacter",
    #           allow_quoted_record_delimiter: false,
    #         },
    #         compression_type: "NONE", # accepts NONE, GZIP, BZIP2
    #         json: {
    #           type: "DOCUMENT", # accepts DOCUMENT, LINES
    #         },
    #         parquet: {
    #         },
    #       }
    #
    # @!attribute [rw] csv
    #   Describes the serialization of a CSV-encoded object.
    #   @return [Types::CSVInput]
    #
    # @!attribute [rw] compression_type
    #   Specifies object's compression format. Valid values: NONE, GZIP,
    #   BZIP2. Default Value: NONE.
    #   @return [String]
    #
    # @!attribute [rw] json
    #   Specifies JSON as object's input serialization format.
    #   @return [Types::JSONInput]
    #
    # @!attribute [rw] parquet
    #   Specifies Parquet as object's input serialization format.
    #   @return [Types::ParquetInput]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InputSerialization AWS API Documentation
    #
    class InputSerialization < Struct.new(
      :csv,
      :compression_type,
      :json,
      :parquet)
      include Aws::Structure
    end

    # Specifies the inventory configuration for an Amazon S3 bucket. For
    # more information, see [GET Bucket inventory][1] in the *Amazon Simple
    # Storage Service API Reference*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html
    #
    # @note When making an API call, you may pass InventoryConfiguration
    #   data as a hash:
    #
    #       {
    #         destination: { # required
    #           s3_bucket_destination: { # required
    #             account_id: "AccountId",
    #             bucket: "BucketName", # required
    #             format: "CSV", # required, accepts CSV, ORC, Parquet
    #             prefix: "Prefix",
    #             encryption: {
    #               sses3: {
    #               },
    #               ssekms: {
    #                 key_id: "SSEKMSKeyId", # required
    #               },
    #             },
    #           },
    #         },
    #         is_enabled: false, # required
    #         filter: {
    #           prefix: "Prefix", # required
    #         },
    #         id: "InventoryId", # required
    #         included_object_versions: "All", # required, accepts All, Current
    #         optional_fields: ["Size"], # accepts Size, LastModifiedDate, StorageClass, ETag, IsMultipartUploaded, ReplicationStatus, EncryptionStatus, ObjectLockRetainUntilDate, ObjectLockMode, ObjectLockLegalHoldStatus
    #         schedule: { # required
    #           frequency: "Daily", # required, accepts Daily, Weekly
    #         },
    #       }
    #
    # @!attribute [rw] destination
    #   Contains information about where to publish the inventory results.
    #   @return [Types::InventoryDestination]
    #
    # @!attribute [rw] is_enabled
    #   Specifies whether the inventory is enabled or disabled. If set to
    #   `True`, an inventory list is generated. If set to `False`, no
    #   inventory list is generated.
    #   @return [Boolean]
    #
    # @!attribute [rw] filter
    #   Specifies an inventory filter. The inventory only includes objects
    #   that meet the filter's criteria.
    #   @return [Types::InventoryFilter]
    #
    # @!attribute [rw] id
    #   The ID used to identify the inventory configuration.
    #   @return [String]
    #
    # @!attribute [rw] included_object_versions
    #   Object versions to include in the inventory list. If set to `All`,
    #   the list includes all the object versions, which adds the
    #   version-related fields `VersionId`, `IsLatest`, and `DeleteMarker`
    #   to the list. If set to `Current`, the list does not contain these
    #   version-related fields.
    #   @return [String]
    #
    # @!attribute [rw] optional_fields
    #   Contains the optional fields that are included in the inventory
    #   results.
    #   @return [Array<String>]
    #
    # @!attribute [rw] schedule
    #   Specifies the schedule for generating inventory results.
    #   @return [Types::InventorySchedule]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryConfiguration AWS API Documentation
    #
    class InventoryConfiguration < Struct.new(
      :destination,
      :is_enabled,
      :filter,
      :id,
      :included_object_versions,
      :optional_fields,
      :schedule)
      include Aws::Structure
    end

    # @note When making an API call, you may pass InventoryDestination
    #   data as a hash:
    #
    #       {
    #         s3_bucket_destination: { # required
    #           account_id: "AccountId",
    #           bucket: "BucketName", # required
    #           format: "CSV", # required, accepts CSV, ORC, Parquet
    #           prefix: "Prefix",
    #           encryption: {
    #             sses3: {
    #             },
    #             ssekms: {
    #               key_id: "SSEKMSKeyId", # required
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] s3_bucket_destination
    #   Contains the bucket name, file format, bucket owner (optional), and
    #   prefix (optional) where inventory results are published.
    #   @return [Types::InventoryS3BucketDestination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryDestination AWS API Documentation
    #
    class InventoryDestination < Struct.new(
      :s3_bucket_destination)
      include Aws::Structure
    end

    # Contains the type of server-side encryption used to encrypt the
    # inventory results.
    #
    # @note When making an API call, you may pass InventoryEncryption
    #   data as a hash:
    #
    #       {
    #         sses3: {
    #         },
    #         ssekms: {
    #           key_id: "SSEKMSKeyId", # required
    #         },
    #       }
    #
    # @!attribute [rw] sses3
    #   Specifies the use of SSE-S3 to encrypt delivered Inventory reports.
    #   @return [Types::SSES3]
    #
    # @!attribute [rw] ssekms
    #   Specifies the use of SSE-KMS to encrypt delivered Inventory reports.
    #   @return [Types::SSEKMS]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryEncryption AWS API Documentation
    #
    class InventoryEncryption < Struct.new(
      :sses3,
      :ssekms)
      include Aws::Structure
    end

    # @note When making an API call, you may pass InventoryFilter
    #   data as a hash:
    #
    #       {
    #         prefix: "Prefix", # required
    #       }
    #
    # @!attribute [rw] prefix
    #   The prefix that an object must have to be included in the inventory
    #   results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryFilter AWS API Documentation
    #
    class InventoryFilter < Struct.new(
      :prefix)
      include Aws::Structure
    end

    # @note When making an API call, you may pass InventoryS3BucketDestination
    #   data as a hash:
    #
    #       {
    #         account_id: "AccountId",
    #         bucket: "BucketName", # required
    #         format: "CSV", # required, accepts CSV, ORC, Parquet
    #         prefix: "Prefix",
    #         encryption: {
    #           sses3: {
    #           },
    #           ssekms: {
    #             key_id: "SSEKMSKeyId", # required
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] account_id
    #   The ID of the account that owns the destination bucket.
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   The Amazon resource name (ARN) of the bucket where inventory results
    #   will be published.
    #   @return [String]
    #
    # @!attribute [rw] format
    #   Specifies the output format of the inventory results.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   The prefix that is prepended to all inventory results.
    #   @return [String]
    #
    # @!attribute [rw] encryption
    #   Contains the type of server-side encryption used to encrypt the
    #   inventory results.
    #   @return [Types::InventoryEncryption]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventoryS3BucketDestination AWS API Documentation
    #
    class InventoryS3BucketDestination < Struct.new(
      :account_id,
      :bucket,
      :format,
      :prefix,
      :encryption)
      include Aws::Structure
    end

    # @note When making an API call, you may pass InventorySchedule
    #   data as a hash:
    #
    #       {
    #         frequency: "Daily", # required, accepts Daily, Weekly
    #       }
    #
    # @!attribute [rw] frequency
    #   Specifies how frequently inventory results are produced.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/InventorySchedule AWS API Documentation
    #
    class InventorySchedule < Struct.new(
      :frequency)
      include Aws::Structure
    end

    # @note When making an API call, you may pass JSONInput
    #   data as a hash:
    #
    #       {
    #         type: "DOCUMENT", # accepts DOCUMENT, LINES
    #       }
    #
    # @!attribute [rw] type
    #   The type of JSON. Valid values: Document, Lines.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/JSONInput AWS API Documentation
    #
    class JSONInput < Struct.new(
      :type)
      include Aws::Structure
    end

    # @note When making an API call, you may pass JSONOutput
    #   data as a hash:
    #
    #       {
    #         record_delimiter: "RecordDelimiter",
    #       }
    #
    # @!attribute [rw] record_delimiter
    #   The value used to separate individual records in the output.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/JSONOutput AWS API Documentation
    #
    class JSONOutput < Struct.new(
      :record_delimiter)
      include Aws::Structure
    end

    # A container for specifying the configuration for AWS Lambda
    # notifications.
    #
    # @note When making an API call, you may pass LambdaFunctionConfiguration
    #   data as a hash:
    #
    #       {
    #         id: "NotificationId",
    #         lambda_function_arn: "LambdaFunctionArn", # required
    #         events: ["s3:ReducedRedundancyLostObject"], # required, accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #         filter: {
    #           key: {
    #             filter_rules: [
    #               {
    #                 name: "prefix", # accepts prefix, suffix
    #                 value: "FilterRuleValue",
    #               },
    #             ],
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] id
    #   An optional unique identifier for configurations in a notification
    #   configuration. If you don't provide one, Amazon S3 will assign an
    #   ID.
    #   @return [String]
    #
    # @!attribute [rw] lambda_function_arn
    #   The Amazon Resource Name (ARN) of the AWS Lambda function that
    #   Amazon S3 invokes when the specified event type occurs.
    #   @return [String]
    #
    # @!attribute [rw] events
    #   The Amazon S3 bucket event for which to invoke the AWS Lambda
    #   function. For more information, see [Supported Event Types][1] in
    #   the *Amazon Simple Storage Service Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] filter
    #   @return [Types::NotificationConfigurationFilter]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LambdaFunctionConfiguration AWS API Documentation
    #
    class LambdaFunctionConfiguration < Struct.new(
      :id,
      :lambda_function_arn,
      :events,
      :filter)
      include Aws::Structure
    end

    # @note When making an API call, you may pass LifecycleConfiguration
    #   data as a hash:
    #
    #       {
    #         rules: [ # required
    #           {
    #             expiration: {
    #               date: Time.now,
    #               days: 1,
    #               expired_object_delete_marker: false,
    #             },
    #             id: "ID",
    #             prefix: "Prefix", # required
    #             status: "Enabled", # required, accepts Enabled, Disabled
    #             transition: {
    #               date: Time.now,
    #               days: 1,
    #               storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #             },
    #             noncurrent_version_transition: {
    #               noncurrent_days: 1,
    #               storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #             },
    #             noncurrent_version_expiration: {
    #               noncurrent_days: 1,
    #             },
    #             abort_incomplete_multipart_upload: {
    #               days_after_initiation: 1,
    #             },
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] rules
    #   @return [Array<Types::Rule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleConfiguration AWS API Documentation
    #
    class LifecycleConfiguration < Struct.new(
      :rules)
      include Aws::Structure
    end

    # @note When making an API call, you may pass LifecycleExpiration
    #   data as a hash:
    #
    #       {
    #         date: Time.now,
    #         days: 1,
    #         expired_object_delete_marker: false,
    #       }
    #
    # @!attribute [rw] date
    #   Indicates at what date the object is to be moved or deleted. Should
    #   be in GMT ISO 8601 Format.
    #   @return [Time]
    #
    # @!attribute [rw] days
    #   Indicates the lifetime, in days, of the objects that are subject to
    #   the rule. The value must be a non-zero positive integer.
    #   @return [Integer]
    #
    # @!attribute [rw] expired_object_delete_marker
    #   Indicates whether Amazon S3 will remove a delete marker with no
    #   noncurrent versions. If set to true, the delete marker will be
    #   expired; if set to false the policy takes no action. This cannot be
    #   specified with Days or Date in a Lifecycle Expiration Policy.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleExpiration AWS API Documentation
    #
    class LifecycleExpiration < Struct.new(
      :date,
      :days,
      :expired_object_delete_marker)
      include Aws::Structure
    end

    # @note When making an API call, you may pass LifecycleRule
    #   data as a hash:
    #
    #       {
    #         expiration: {
    #           date: Time.now,
    #           days: 1,
    #           expired_object_delete_marker: false,
    #         },
    #         id: "ID",
    #         prefix: "Prefix",
    #         filter: {
    #           prefix: "Prefix",
    #           tag: {
    #             key: "ObjectKey", # required
    #             value: "Value", # required
    #           },
    #           and: {
    #             prefix: "Prefix",
    #             tags: [
    #               {
    #                 key: "ObjectKey", # required
    #                 value: "Value", # required
    #               },
    #             ],
    #           },
    #         },
    #         status: "Enabled", # required, accepts Enabled, Disabled
    #         transitions: [
    #           {
    #             date: Time.now,
    #             days: 1,
    #             storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #           },
    #         ],
    #         noncurrent_version_transitions: [
    #           {
    #             noncurrent_days: 1,
    #             storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #           },
    #         ],
    #         noncurrent_version_expiration: {
    #           noncurrent_days: 1,
    #         },
    #         abort_incomplete_multipart_upload: {
    #           days_after_initiation: 1,
    #         },
    #       }
    #
    # @!attribute [rw] expiration
    #   @return [Types::LifecycleExpiration]
    #
    # @!attribute [rw] id
    #   Unique identifier for the rule. The value cannot be longer than 255
    #   characters.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   Prefix identifying one or more objects to which the rule applies.
    #   This is No longer used; use Filter instead.
    #   @return [String]
    #
    # @!attribute [rw] filter
    #   @return [Types::LifecycleRuleFilter]
    #
    # @!attribute [rw] status
    #   If 'Enabled', the rule is currently being applied. If
    #   'Disabled', the rule is not currently being applied.
    #   @return [String]
    #
    # @!attribute [rw] transitions
    #   @return [Array<Types::Transition>]
    #
    # @!attribute [rw] noncurrent_version_transitions
    #   @return [Array<Types::NoncurrentVersionTransition>]
    #
    # @!attribute [rw] noncurrent_version_expiration
    #   @return [Types::NoncurrentVersionExpiration]
    #
    # @!attribute [rw] abort_incomplete_multipart_upload
    #   @return [Types::AbortIncompleteMultipartUpload]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleRule AWS API Documentation
    #
    class LifecycleRule < Struct.new(
      :expiration,
      :id,
      :prefix,
      :filter,
      :status,
      :transitions,
      :noncurrent_version_transitions,
      :noncurrent_version_expiration,
      :abort_incomplete_multipart_upload)
      include Aws::Structure
    end

    # This is used in a Lifecycle Rule Filter to apply a logical AND to two
    # or more predicates. The Lifecycle Rule will apply to any object
    # matching all of the predicates configured inside the And operator.
    #
    # @note When making an API call, you may pass LifecycleRuleAndOperator
    #   data as a hash:
    #
    #       {
    #         prefix: "Prefix",
    #         tags: [
    #           {
    #             key: "ObjectKey", # required
    #             value: "Value", # required
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] prefix
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   All of these tags must exist in the object's tag set in order for
    #   the rule to apply.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleRuleAndOperator AWS API Documentation
    #
    class LifecycleRuleAndOperator < Struct.new(
      :prefix,
      :tags)
      include Aws::Structure
    end

    # The Filter is used to identify objects that a Lifecycle Rule applies
    # to. A Filter must have exactly one of Prefix, Tag, or And specified.
    #
    # @note When making an API call, you may pass LifecycleRuleFilter
    #   data as a hash:
    #
    #       {
    #         prefix: "Prefix",
    #         tag: {
    #           key: "ObjectKey", # required
    #           value: "Value", # required
    #         },
    #         and: {
    #           prefix: "Prefix",
    #           tags: [
    #             {
    #               key: "ObjectKey", # required
    #               value: "Value", # required
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] prefix
    #   Prefix identifying one or more objects to which the rule applies.
    #   @return [String]
    #
    # @!attribute [rw] tag
    #   This tag must exist in the object's tag set in order for the rule
    #   to apply.
    #   @return [Types::Tag]
    #
    # @!attribute [rw] and
    #   @return [Types::LifecycleRuleAndOperator]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LifecycleRuleFilter AWS API Documentation
    #
    class LifecycleRuleFilter < Struct.new(
      :prefix,
      :tag,
      :and)
      include Aws::Structure
    end

    # @!attribute [rw] is_truncated
    #   Indicates whether the returned list of analytics configurations is
    #   complete. A value of true indicates that the list is not complete
    #   and the NextContinuationToken will be provided for a subsequent
    #   request.
    #   @return [Boolean]
    #
    # @!attribute [rw] continuation_token
    #   The ContinuationToken that represents where this request began.
    #   @return [String]
    #
    # @!attribute [rw] next_continuation_token
    #   NextContinuationToken is sent when isTruncated is true, which
    #   indicates that there are more analytics configurations to list. The
    #   next request must include this NextContinuationToken. The token is
    #   obfuscated and is not a usable value.
    #   @return [String]
    #
    # @!attribute [rw] analytics_configuration_list
    #   The list of analytics configurations for a bucket.
    #   @return [Array<Types::AnalyticsConfiguration>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketAnalyticsConfigurationsOutput AWS API Documentation
    #
    class ListBucketAnalyticsConfigurationsOutput < Struct.new(
      :is_truncated,
      :continuation_token,
      :next_continuation_token,
      :analytics_configuration_list)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListBucketAnalyticsConfigurationsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         continuation_token: "Token",
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket from which analytics configurations are
    #   retrieved.
    #   @return [String]
    #
    # @!attribute [rw] continuation_token
    #   The ContinuationToken that represents a placeholder from where this
    #   request should begin.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketAnalyticsConfigurationsRequest AWS API Documentation
    #
    class ListBucketAnalyticsConfigurationsRequest < Struct.new(
      :bucket,
      :continuation_token)
      include Aws::Structure
    end

    # @!attribute [rw] continuation_token
    #   If sent in the request, the marker that is used as a starting point
    #   for this inventory configuration list response.
    #   @return [String]
    #
    # @!attribute [rw] inventory_configuration_list
    #   The list of inventory configurations for a bucket.
    #   @return [Array<Types::InventoryConfiguration>]
    #
    # @!attribute [rw] is_truncated
    #   Indicates whether the returned list of inventory configurations is
    #   truncated in this response. A value of true indicates that the list
    #   is truncated.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_continuation_token
    #   The marker used to continue this inventory configuration listing.
    #   Use the NextContinuationToken from this response to continue the
    #   listing in a subsequent request. The continuation token is an opaque
    #   value that Amazon S3 understands.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketInventoryConfigurationsOutput AWS API Documentation
    #
    class ListBucketInventoryConfigurationsOutput < Struct.new(
      :continuation_token,
      :inventory_configuration_list,
      :is_truncated,
      :next_continuation_token)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListBucketInventoryConfigurationsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         continuation_token: "Token",
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket containing the inventory configurations to
    #   retrieve.
    #   @return [String]
    #
    # @!attribute [rw] continuation_token
    #   The marker used to continue an inventory configuration listing that
    #   has been truncated. Use the NextContinuationToken from a previously
    #   truncated list response to continue the listing. The continuation
    #   token is an opaque value that Amazon S3 understands.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketInventoryConfigurationsRequest AWS API Documentation
    #
    class ListBucketInventoryConfigurationsRequest < Struct.new(
      :bucket,
      :continuation_token)
      include Aws::Structure
    end

    # @!attribute [rw] is_truncated
    #   Indicates whether the returned list of metrics configurations is
    #   complete. A value of true indicates that the list is not complete
    #   and the NextContinuationToken will be provided for a subsequent
    #   request.
    #   @return [Boolean]
    #
    # @!attribute [rw] continuation_token
    #   The marker that is used as a starting point for this metrics
    #   configuration list response. This value is present if it was sent in
    #   the request.
    #   @return [String]
    #
    # @!attribute [rw] next_continuation_token
    #   The marker used to continue a metrics configuration listing that has
    #   been truncated. Use the NextContinuationToken from a previously
    #   truncated list response to continue the listing. The continuation
    #   token is an opaque value that Amazon S3 understands.
    #   @return [String]
    #
    # @!attribute [rw] metrics_configuration_list
    #   The list of metrics configurations for a bucket.
    #   @return [Array<Types::MetricsConfiguration>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketMetricsConfigurationsOutput AWS API Documentation
    #
    class ListBucketMetricsConfigurationsOutput < Struct.new(
      :is_truncated,
      :continuation_token,
      :next_continuation_token,
      :metrics_configuration_list)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListBucketMetricsConfigurationsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         continuation_token: "Token",
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket containing the metrics configurations to
    #   retrieve.
    #   @return [String]
    #
    # @!attribute [rw] continuation_token
    #   The marker that is used to continue a metrics configuration listing
    #   that has been truncated. Use the NextContinuationToken from a
    #   previously truncated list response to continue the listing. The
    #   continuation token is an opaque value that Amazon S3 understands.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketMetricsConfigurationsRequest AWS API Documentation
    #
    class ListBucketMetricsConfigurationsRequest < Struct.new(
      :bucket,
      :continuation_token)
      include Aws::Structure
    end

    # @!attribute [rw] buckets
    #   @return [Array<Types::Bucket>]
    #
    # @!attribute [rw] owner
    #   @return [Types::Owner]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketsOutput AWS API Documentation
    #
    class ListBucketsOutput < Struct.new(
      :buckets,
      :owner)
      include Aws::Structure
    end

    # @!attribute [rw] bucket
    #   Name of the bucket to which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] key_marker
    #   The key at or after which the listing began.
    #   @return [String]
    #
    # @!attribute [rw] upload_id_marker
    #   Upload ID after which listing began.
    #   @return [String]
    #
    # @!attribute [rw] next_key_marker
    #   When a list is truncated, this element specifies the value that
    #   should be used for the key-marker request parameter in a subsequent
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   When a prefix is provided in the request, this field contains the
    #   specified prefix. The result contains only keys starting with the
    #   specified prefix.
    #   @return [String]
    #
    # @!attribute [rw] delimiter
    #   @return [String]
    #
    # @!attribute [rw] next_upload_id_marker
    #   When a list is truncated, this element specifies the value that
    #   should be used for the upload-id-marker request parameter in a
    #   subsequent request.
    #   @return [String]
    #
    # @!attribute [rw] max_uploads
    #   Maximum number of multipart uploads that could have been included in
    #   the response.
    #   @return [Integer]
    #
    # @!attribute [rw] is_truncated
    #   Indicates whether the returned list of multipart uploads is
    #   truncated. A value of true indicates that the list was truncated.
    #   The list can be truncated if the number of multipart uploads exceeds
    #   the limit allowed or specified by max uploads.
    #   @return [Boolean]
    #
    # @!attribute [rw] uploads
    #   @return [Array<Types::MultipartUpload>]
    #
    # @!attribute [rw] common_prefixes
    #   @return [Array<Types::CommonPrefix>]
    #
    # @!attribute [rw] encoding_type
    #   Encoding type used by Amazon S3 to encode object keys in the
    #   response.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListMultipartUploadsOutput AWS API Documentation
    #
    class ListMultipartUploadsOutput < Struct.new(
      :bucket,
      :key_marker,
      :upload_id_marker,
      :next_key_marker,
      :prefix,
      :delimiter,
      :next_upload_id_marker,
      :max_uploads,
      :is_truncated,
      :uploads,
      :common_prefixes,
      :encoding_type)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListMultipartUploadsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         delimiter: "Delimiter",
    #         encoding_type: "url", # accepts url
    #         key_marker: "KeyMarker",
    #         max_uploads: 1,
    #         prefix: "Prefix",
    #         upload_id_marker: "UploadIdMarker",
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] delimiter
    #   Character you use to group keys.
    #   @return [String]
    #
    # @!attribute [rw] encoding_type
    #   Requests Amazon S3 to encode the object keys in the response and
    #   specifies the encoding method to use. An object key may contain any
    #   Unicode character; however, XML 1.0 parser cannot parse some
    #   characters, such as characters with an ASCII value from 0 to 10. For
    #   characters that are not supported in XML 1.0, you can add this
    #   parameter to request that Amazon S3 encode the keys in the response.
    #   @return [String]
    #
    # @!attribute [rw] key_marker
    #   Together with upload-id-marker, this parameter specifies the
    #   multipart upload after which listing should begin.
    #   @return [String]
    #
    # @!attribute [rw] max_uploads
    #   Sets the maximum number of multipart uploads, from 1 to 1,000, to
    #   return in the response body. 1,000 is the maximum number of uploads
    #   that can be returned in a response.
    #   @return [Integer]
    #
    # @!attribute [rw] prefix
    #   Lists in-progress uploads only for those keys that begin with the
    #   specified prefix.
    #   @return [String]
    #
    # @!attribute [rw] upload_id_marker
    #   Together with key-marker, specifies the multipart upload after which
    #   listing should begin. If key-marker is not specified, the
    #   upload-id-marker parameter is ignored.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListMultipartUploadsRequest AWS API Documentation
    #
    class ListMultipartUploadsRequest < Struct.new(
      :bucket,
      :delimiter,
      :encoding_type,
      :key_marker,
      :max_uploads,
      :prefix,
      :upload_id_marker)
      include Aws::Structure
    end

    # @!attribute [rw] is_truncated
    #   A flag that indicates whether or not Amazon S3 returned all of the
    #   results that satisfied the search criteria. If your results were
    #   truncated, you can make a follow-up paginated request using the
    #   NextKeyMarker and NextVersionIdMarker response parameters as a
    #   starting place in another request to return the rest of the results.
    #   @return [Boolean]
    #
    # @!attribute [rw] key_marker
    #   Marks the last Key returned in a truncated response.
    #   @return [String]
    #
    # @!attribute [rw] version_id_marker
    #   @return [String]
    #
    # @!attribute [rw] next_key_marker
    #   Use this value for the key marker request parameter in a subsequent
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] next_version_id_marker
    #   Use this value for the next version id marker parameter in a
    #   subsequent request.
    #   @return [String]
    #
    # @!attribute [rw] versions
    #   @return [Array<Types::ObjectVersion>]
    #
    # @!attribute [rw] delete_markers
    #   @return [Array<Types::DeleteMarkerEntry>]
    #
    # @!attribute [rw] name
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   @return [String]
    #
    # @!attribute [rw] delimiter
    #   @return [String]
    #
    # @!attribute [rw] max_keys
    #   @return [Integer]
    #
    # @!attribute [rw] common_prefixes
    #   @return [Array<Types::CommonPrefix>]
    #
    # @!attribute [rw] encoding_type
    #   Encoding type used by Amazon S3 to encode object keys in the
    #   response.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectVersionsOutput AWS API Documentation
    #
    class ListObjectVersionsOutput < Struct.new(
      :is_truncated,
      :key_marker,
      :version_id_marker,
      :next_key_marker,
      :next_version_id_marker,
      :versions,
      :delete_markers,
      :name,
      :prefix,
      :delimiter,
      :max_keys,
      :common_prefixes,
      :encoding_type)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListObjectVersionsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         delimiter: "Delimiter",
    #         encoding_type: "url", # accepts url
    #         key_marker: "KeyMarker",
    #         max_keys: 1,
    #         prefix: "Prefix",
    #         version_id_marker: "VersionIdMarker",
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] delimiter
    #   A delimiter is a character you use to group keys.
    #   @return [String]
    #
    # @!attribute [rw] encoding_type
    #   Requests Amazon S3 to encode the object keys in the response and
    #   specifies the encoding method to use. An object key may contain any
    #   Unicode character; however, XML 1.0 parser cannot parse some
    #   characters, such as characters with an ASCII value from 0 to 10. For
    #   characters that are not supported in XML 1.0, you can add this
    #   parameter to request that Amazon S3 encode the keys in the response.
    #   @return [String]
    #
    # @!attribute [rw] key_marker
    #   Specifies the key to start with when listing objects in a bucket.
    #   @return [String]
    #
    # @!attribute [rw] max_keys
    #   Sets the maximum number of keys returned in the response. The
    #   response might contain fewer keys but will never contain more.
    #   @return [Integer]
    #
    # @!attribute [rw] prefix
    #   Limits the response to keys that begin with the specified prefix.
    #   @return [String]
    #
    # @!attribute [rw] version_id_marker
    #   Specifies the object version you want to start listing from.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectVersionsRequest AWS API Documentation
    #
    class ListObjectVersionsRequest < Struct.new(
      :bucket,
      :delimiter,
      :encoding_type,
      :key_marker,
      :max_keys,
      :prefix,
      :version_id_marker)
      include Aws::Structure
    end

    # @!attribute [rw] is_truncated
    #   A flag that indicates whether or not Amazon S3 returned all of the
    #   results that satisfied the search criteria.
    #   @return [Boolean]
    #
    # @!attribute [rw] marker
    #   @return [String]
    #
    # @!attribute [rw] next_marker
    #   When response is truncated (the IsTruncated element value in the
    #   response is true), you can use the key name in this field as marker
    #   in the subsequent request to get next set of objects. Amazon S3
    #   lists objects in alphabetical order Note: This element is returned
    #   only if you have delimiter request parameter specified. If response
    #   does not include the NextMaker and it is truncated, you can use the
    #   value of the last Key in the response as the marker in the
    #   subsequent request to get the next set of object keys.
    #   @return [String]
    #
    # @!attribute [rw] contents
    #   @return [Array<Types::Object>]
    #
    # @!attribute [rw] name
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   @return [String]
    #
    # @!attribute [rw] delimiter
    #   @return [String]
    #
    # @!attribute [rw] max_keys
    #   @return [Integer]
    #
    # @!attribute [rw] common_prefixes
    #   @return [Array<Types::CommonPrefix>]
    #
    # @!attribute [rw] encoding_type
    #   Encoding type used by Amazon S3 to encode object keys in the
    #   response.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsOutput AWS API Documentation
    #
    class ListObjectsOutput < Struct.new(
      :is_truncated,
      :marker,
      :next_marker,
      :contents,
      :name,
      :prefix,
      :delimiter,
      :max_keys,
      :common_prefixes,
      :encoding_type)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListObjectsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         delimiter: "Delimiter",
    #         encoding_type: "url", # accepts url
    #         marker: "Marker",
    #         max_keys: 1,
    #         prefix: "Prefix",
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] delimiter
    #   A delimiter is a character you use to group keys.
    #   @return [String]
    #
    # @!attribute [rw] encoding_type
    #   Requests Amazon S3 to encode the object keys in the response and
    #   specifies the encoding method to use. An object key may contain any
    #   Unicode character; however, XML 1.0 parser cannot parse some
    #   characters, such as characters with an ASCII value from 0 to 10. For
    #   characters that are not supported in XML 1.0, you can add this
    #   parameter to request that Amazon S3 encode the keys in the response.
    #   @return [String]
    #
    # @!attribute [rw] marker
    #   Specifies the key to start with when listing objects in a bucket.
    #   @return [String]
    #
    # @!attribute [rw] max_keys
    #   Sets the maximum number of keys returned in the response. The
    #   response might contain fewer keys but will never contain more.
    #   @return [Integer]
    #
    # @!attribute [rw] prefix
    #   Limits the response to keys that begin with the specified prefix.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the list objects request. Bucket owners need not specify this
    #   parameter in their requests.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsRequest AWS API Documentation
    #
    class ListObjectsRequest < Struct.new(
      :bucket,
      :delimiter,
      :encoding_type,
      :marker,
      :max_keys,
      :prefix,
      :request_payer)
      include Aws::Structure
    end

    # @!attribute [rw] is_truncated
    #   A flag that indicates whether or not Amazon S3 returned all of the
    #   results that satisfied the search criteria.
    #   @return [Boolean]
    #
    # @!attribute [rw] contents
    #   Metadata about each object returned.
    #   @return [Array<Types::Object>]
    #
    # @!attribute [rw] name
    #   Name of the bucket to list.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   Limits the response to keys that begin with the specified prefix.
    #   @return [String]
    #
    # @!attribute [rw] delimiter
    #   A delimiter is a character you use to group keys.
    #   @return [String]
    #
    # @!attribute [rw] max_keys
    #   Sets the maximum number of keys returned in the response. The
    #   response might contain fewer keys but will never contain more.
    #   @return [Integer]
    #
    # @!attribute [rw] common_prefixes
    #   CommonPrefixes contains all (if there are any) keys between Prefix
    #   and the next occurrence of the string specified by delimiter
    #   @return [Array<Types::CommonPrefix>]
    #
    # @!attribute [rw] encoding_type
    #   Encoding type used by Amazon S3 to encode object keys in the
    #   response.
    #   @return [String]
    #
    # @!attribute [rw] key_count
    #   KeyCount is the number of keys returned with this request. KeyCount
    #   will always be less than equals to MaxKeys field. Say you ask for 50
    #   keys, your result will include less than equals 50 keys
    #   @return [Integer]
    #
    # @!attribute [rw] continuation_token
    #   ContinuationToken indicates Amazon S3 that the list is being
    #   continued on this bucket with a token. ContinuationToken is
    #   obfuscated and is not a real key
    #   @return [String]
    #
    # @!attribute [rw] next_continuation_token
    #   NextContinuationToken is sent when isTruncated is true which means
    #   there are more keys in the bucket that can be listed. The next list
    #   requests to Amazon S3 can be continued with this
    #   NextContinuationToken. NextContinuationToken is obfuscated and is
    #   not a real key
    #   @return [String]
    #
    # @!attribute [rw] start_after
    #   StartAfter is where you want Amazon S3 to start listing from. Amazon
    #   S3 starts listing after this specified key. StartAfter can be any
    #   key in the bucket
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsV2Output AWS API Documentation
    #
    class ListObjectsV2Output < Struct.new(
      :is_truncated,
      :contents,
      :name,
      :prefix,
      :delimiter,
      :max_keys,
      :common_prefixes,
      :encoding_type,
      :key_count,
      :continuation_token,
      :next_continuation_token,
      :start_after)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListObjectsV2Request
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         delimiter: "Delimiter",
    #         encoding_type: "url", # accepts url
    #         max_keys: 1,
    #         prefix: "Prefix",
    #         continuation_token: "Token",
    #         fetch_owner: false,
    #         start_after: "StartAfter",
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   Name of the bucket to list.
    #   @return [String]
    #
    # @!attribute [rw] delimiter
    #   A delimiter is a character you use to group keys.
    #   @return [String]
    #
    # @!attribute [rw] encoding_type
    #   Encoding type used by Amazon S3 to encode object keys in the
    #   response.
    #   @return [String]
    #
    # @!attribute [rw] max_keys
    #   Sets the maximum number of keys returned in the response. The
    #   response might contain fewer keys but will never contain more.
    #   @return [Integer]
    #
    # @!attribute [rw] prefix
    #   Limits the response to keys that begin with the specified prefix.
    #   @return [String]
    #
    # @!attribute [rw] continuation_token
    #   ContinuationToken indicates Amazon S3 that the list is being
    #   continued on this bucket with a token. ContinuationToken is
    #   obfuscated and is not a real key
    #   @return [String]
    #
    # @!attribute [rw] fetch_owner
    #   The owner field is not present in listV2 by default, if you want to
    #   return owner field with each key in the result then set the fetch
    #   owner field to true
    #   @return [Boolean]
    #
    # @!attribute [rw] start_after
    #   StartAfter is where you want Amazon S3 to start listing from. Amazon
    #   S3 starts listing after this specified key. StartAfter can be any
    #   key in the bucket
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the list objects request in V2 style. Bucket owners need not specify
    #   this parameter in their requests.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsV2Request AWS API Documentation
    #
    class ListObjectsV2Request < Struct.new(
      :bucket,
      :delimiter,
      :encoding_type,
      :max_keys,
      :prefix,
      :continuation_token,
      :fetch_owner,
      :start_after,
      :request_payer)
      include Aws::Structure
    end

    # @!attribute [rw] abort_date
    #   Date when multipart upload will become eligible for abort operation
    #   by lifecycle.
    #   @return [Time]
    #
    # @!attribute [rw] abort_rule_id
    #   Id of the lifecycle rule that makes a multipart upload eligible for
    #   abort operation.
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   Name of the bucket to which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   Object key for which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] upload_id
    #   Upload ID identifying the multipart upload whose parts are being
    #   listed.
    #   @return [String]
    #
    # @!attribute [rw] part_number_marker
    #   Part number after which listing begins.
    #   @return [Integer]
    #
    # @!attribute [rw] next_part_number_marker
    #   When a list is truncated, this element specifies the last part in
    #   the list, as well as the value to use for the part-number-marker
    #   request parameter in a subsequent request.
    #   @return [Integer]
    #
    # @!attribute [rw] max_parts
    #   Maximum number of parts that were allowed in the response.
    #   @return [Integer]
    #
    # @!attribute [rw] is_truncated
    #   Indicates whether the returned list of parts is truncated.
    #   @return [Boolean]
    #
    # @!attribute [rw] parts
    #   @return [Array<Types::Part>]
    #
    # @!attribute [rw] initiator
    #   Identifies who initiated the multipart upload.
    #   @return [Types::Initiator]
    #
    # @!attribute [rw] owner
    #   @return [Types::Owner]
    #
    # @!attribute [rw] storage_class
    #   The class of storage used to store the object.
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListPartsOutput AWS API Documentation
    #
    class ListPartsOutput < Struct.new(
      :abort_date,
      :abort_rule_id,
      :bucket,
      :key,
      :upload_id,
      :part_number_marker,
      :next_part_number_marker,
      :max_parts,
      :is_truncated,
      :parts,
      :initiator,
      :owner,
      :storage_class,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ListPartsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         max_parts: 1,
    #         part_number_marker: 1,
    #         upload_id: "MultipartUploadId", # required
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] max_parts
    #   Sets the maximum number of parts to return.
    #   @return [Integer]
    #
    # @!attribute [rw] part_number_marker
    #   Specifies the part after which listing should begin. Only parts with
    #   higher part numbers will be listed.
    #   @return [Integer]
    #
    # @!attribute [rw] upload_id
    #   Upload ID identifying the multipart upload whose parts are being
    #   listed.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListPartsRequest AWS API Documentation
    #
    class ListPartsRequest < Struct.new(
      :bucket,
      :key,
      :max_parts,
      :part_number_marker,
      :upload_id,
      :request_payer)
      include Aws::Structure
    end

    # Describes where logs are stored and the prefix that Amazon S3 assigns
    # to all log object keys for a bucket. For more information, see [PUT
    # Bucket logging][1] in the *Amazon Simple Storage Service API
    # Reference*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html
    #
    # @note When making an API call, you may pass LoggingEnabled
    #   data as a hash:
    #
    #       {
    #         target_bucket: "TargetBucket", # required
    #         target_grants: [
    #           {
    #             grantee: {
    #               display_name: "DisplayName",
    #               email_address: "EmailAddress",
    #               id: "ID",
    #               type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #               uri: "URI",
    #             },
    #             permission: "FULL_CONTROL", # accepts FULL_CONTROL, READ, WRITE
    #           },
    #         ],
    #         target_prefix: "TargetPrefix", # required
    #       }
    #
    # @!attribute [rw] target_bucket
    #   Specifies the bucket where you want Amazon S3 to store server access
    #   logs. You can have your logs delivered to any bucket that you own,
    #   including the same bucket that is being logged. You can also
    #   configure multiple buckets to deliver their logs to the same target
    #   bucket. In this case you should choose a different TargetPrefix for
    #   each source bucket so that the delivered log files can be
    #   distinguished by key.
    #   @return [String]
    #
    # @!attribute [rw] target_grants
    #   @return [Array<Types::TargetGrant>]
    #
    # @!attribute [rw] target_prefix
    #   A prefix for all log object keys. If you store log files from
    #   multiple Amazon S3 buckets in a single bucket, you can use a prefix
    #   to distinguish which log files came from which bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/LoggingEnabled AWS API Documentation
    #
    class LoggingEnabled < Struct.new(
      :target_bucket,
      :target_grants,
      :target_prefix)
      include Aws::Structure
    end

    # A metadata key-value pair to store with an object.
    #
    # @note When making an API call, you may pass MetadataEntry
    #   data as a hash:
    #
    #       {
    #         name: "MetadataKey",
    #         value: "MetadataValue",
    #       }
    #
    # @!attribute [rw] name
    #   @return [String]
    #
    # @!attribute [rw] value
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MetadataEntry AWS API Documentation
    #
    class MetadataEntry < Struct.new(
      :name,
      :value)
      include Aws::Structure
    end

    # @note When making an API call, you may pass MetricsAndOperator
    #   data as a hash:
    #
    #       {
    #         prefix: "Prefix",
    #         tags: [
    #           {
    #             key: "ObjectKey", # required
    #             value: "Value", # required
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] prefix
    #   The prefix used when evaluating an AND predicate.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The list of tags used when evaluating an AND predicate.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MetricsAndOperator AWS API Documentation
    #
    class MetricsAndOperator < Struct.new(
      :prefix,
      :tags)
      include Aws::Structure
    end

    # Specifies a metrics configuration for the CloudWatch request metrics
    # (specified by the metrics configuration ID) from an Amazon S3 bucket.
    # If you're updating an existing metrics configuration, note that this
    # is a full replacement of the existing metrics configuration. If you
    # don't include the elements you want to keep, they are erased. For
    # more information, see [ PUT Bucket metrics][1] in the *Amazon Simple
    # Storage Service API Reference*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTMetricConfiguration.html
    #
    # @note When making an API call, you may pass MetricsConfiguration
    #   data as a hash:
    #
    #       {
    #         id: "MetricsId", # required
    #         filter: {
    #           prefix: "Prefix",
    #           tag: {
    #             key: "ObjectKey", # required
    #             value: "Value", # required
    #           },
    #           and: {
    #             prefix: "Prefix",
    #             tags: [
    #               {
    #                 key: "ObjectKey", # required
    #                 value: "Value", # required
    #               },
    #             ],
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] id
    #   The ID used to identify the metrics configuration.
    #   @return [String]
    #
    # @!attribute [rw] filter
    #   Specifies a metrics configuration filter. The metrics configuration
    #   will only include objects that meet the filter's criteria. A filter
    #   must be a prefix, a tag, or a conjunction (MetricsAndOperator).
    #   @return [Types::MetricsFilter]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MetricsConfiguration AWS API Documentation
    #
    class MetricsConfiguration < Struct.new(
      :id,
      :filter)
      include Aws::Structure
    end

    # @note When making an API call, you may pass MetricsFilter
    #   data as a hash:
    #
    #       {
    #         prefix: "Prefix",
    #         tag: {
    #           key: "ObjectKey", # required
    #           value: "Value", # required
    #         },
    #         and: {
    #           prefix: "Prefix",
    #           tags: [
    #             {
    #               key: "ObjectKey", # required
    #               value: "Value", # required
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] prefix
    #   The prefix used when evaluating a metrics filter.
    #   @return [String]
    #
    # @!attribute [rw] tag
    #   The tag used when evaluating a metrics filter.
    #   @return [Types::Tag]
    #
    # @!attribute [rw] and
    #   A conjunction (logical AND) of predicates, which is used in
    #   evaluating a metrics filter. The operator must have at least two
    #   predicates, and an object must match all of the predicates in order
    #   for the filter to apply.
    #   @return [Types::MetricsAndOperator]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MetricsFilter AWS API Documentation
    #
    class MetricsFilter < Struct.new(
      :prefix,
      :tag,
      :and)
      include Aws::Structure
    end

    # @!attribute [rw] upload_id
    #   Upload ID that identifies the multipart upload.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   Key of the object for which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] initiated
    #   Date and time at which the multipart upload was initiated.
    #   @return [Time]
    #
    # @!attribute [rw] storage_class
    #   The class of storage used to store the object.
    #   @return [String]
    #
    # @!attribute [rw] owner
    #   @return [Types::Owner]
    #
    # @!attribute [rw] initiator
    #   Identifies who initiated the multipart upload.
    #   @return [Types::Initiator]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/MultipartUpload AWS API Documentation
    #
    class MultipartUpload < Struct.new(
      :upload_id,
      :key,
      :initiated,
      :storage_class,
      :owner,
      :initiator)
      include Aws::Structure
    end

    # Specifies when noncurrent object versions expire. Upon expiration,
    # Amazon S3 permanently deletes the noncurrent object versions. You set
    # this lifecycle configuration action on a bucket that has versioning
    # enabled (or suspended) to request that Amazon S3 delete noncurrent
    # object versions at a specific period in the object's lifetime.
    #
    # @note When making an API call, you may pass NoncurrentVersionExpiration
    #   data as a hash:
    #
    #       {
    #         noncurrent_days: 1,
    #       }
    #
    # @!attribute [rw] noncurrent_days
    #   Specifies the number of days an object is noncurrent before Amazon
    #   S3 can perform the associated action. For information about the
    #   noncurrent days calculations, see [How Amazon S3 Calculates When an
    #   Object Became Noncurrent][1] in the Amazon Simple Storage Service
    #   Developer Guide.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NoncurrentVersionExpiration AWS API Documentation
    #
    class NoncurrentVersionExpiration < Struct.new(
      :noncurrent_days)
      include Aws::Structure
    end

    # Container for the transition rule that describes when noncurrent
    # objects transition to the `STANDARD_IA`, `ONEZONE_IA`,
    # `INTELLIGENT_TIERING`, `GLACIER`, or `DEEP_ARCHIVE` storage class. If
    # your bucket is versioning-enabled (or versioning is suspended), you
    # can set this action to request that Amazon S3 transition noncurrent
    # object versions to the `STANDARD_IA`, `ONEZONE_IA`,
    # `INTELLIGENT_TIERING`, `GLACIER`, or `DEEP_ARCHIVE` storage class at a
    # specific period in the object's lifetime.
    #
    # @note When making an API call, you may pass NoncurrentVersionTransition
    #   data as a hash:
    #
    #       {
    #         noncurrent_days: 1,
    #         storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #       }
    #
    # @!attribute [rw] noncurrent_days
    #   Specifies the number of days an object is noncurrent before Amazon
    #   S3 can perform the associated action. For information about the
    #   noncurrent days calculations, see [How Amazon S3 Calculates When an
    #   Object Became Noncurrent][1] in the *Amazon Simple Storage Service
    #   Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html
    #   @return [Integer]
    #
    # @!attribute [rw] storage_class
    #   The class of storage used to store the object.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NoncurrentVersionTransition AWS API Documentation
    #
    class NoncurrentVersionTransition < Struct.new(
      :noncurrent_days,
      :storage_class)
      include Aws::Structure
    end

    # A container for specifying the notification configuration of the
    # bucket. If this element is empty, notifications are turned off for the
    # bucket.
    #
    # @note When making an API call, you may pass NotificationConfiguration
    #   data as a hash:
    #
    #       {
    #         topic_configurations: [
    #           {
    #             id: "NotificationId",
    #             topic_arn: "TopicArn", # required
    #             events: ["s3:ReducedRedundancyLostObject"], # required, accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #             filter: {
    #               key: {
    #                 filter_rules: [
    #                   {
    #                     name: "prefix", # accepts prefix, suffix
    #                     value: "FilterRuleValue",
    #                   },
    #                 ],
    #               },
    #             },
    #           },
    #         ],
    #         queue_configurations: [
    #           {
    #             id: "NotificationId",
    #             queue_arn: "QueueArn", # required
    #             events: ["s3:ReducedRedundancyLostObject"], # required, accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #             filter: {
    #               key: {
    #                 filter_rules: [
    #                   {
    #                     name: "prefix", # accepts prefix, suffix
    #                     value: "FilterRuleValue",
    #                   },
    #                 ],
    #               },
    #             },
    #           },
    #         ],
    #         lambda_function_configurations: [
    #           {
    #             id: "NotificationId",
    #             lambda_function_arn: "LambdaFunctionArn", # required
    #             events: ["s3:ReducedRedundancyLostObject"], # required, accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #             filter: {
    #               key: {
    #                 filter_rules: [
    #                   {
    #                     name: "prefix", # accepts prefix, suffix
    #                     value: "FilterRuleValue",
    #                   },
    #                 ],
    #               },
    #             },
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] topic_configurations
    #   The topic to which notifications are sent and the events for which
    #   notifications are generated.
    #   @return [Array<Types::TopicConfiguration>]
    #
    # @!attribute [rw] queue_configurations
    #   The Amazon Simple Queue Service queues to publish messages to and
    #   the events for which to publish messages.
    #   @return [Array<Types::QueueConfiguration>]
    #
    # @!attribute [rw] lambda_function_configurations
    #   Describes the AWS Lambda functions to invoke and the events for
    #   which to invoke them.
    #   @return [Array<Types::LambdaFunctionConfiguration>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NotificationConfiguration AWS API Documentation
    #
    class NotificationConfiguration < Struct.new(
      :topic_configurations,
      :queue_configurations,
      :lambda_function_configurations)
      include Aws::Structure
    end

    # @note When making an API call, you may pass NotificationConfigurationDeprecated
    #   data as a hash:
    #
    #       {
    #         topic_configuration: {
    #           id: "NotificationId",
    #           events: ["s3:ReducedRedundancyLostObject"], # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #           event: "s3:ReducedRedundancyLostObject", # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #           topic: "TopicArn",
    #         },
    #         queue_configuration: {
    #           id: "NotificationId",
    #           event: "s3:ReducedRedundancyLostObject", # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #           events: ["s3:ReducedRedundancyLostObject"], # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #           queue: "QueueArn",
    #         },
    #         cloud_function_configuration: {
    #           id: "NotificationId",
    #           event: "s3:ReducedRedundancyLostObject", # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #           events: ["s3:ReducedRedundancyLostObject"], # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #           cloud_function: "CloudFunction",
    #           invocation_role: "CloudFunctionInvocationRole",
    #         },
    #       }
    #
    # @!attribute [rw] topic_configuration
    #   @return [Types::TopicConfigurationDeprecated]
    #
    # @!attribute [rw] queue_configuration
    #   @return [Types::QueueConfigurationDeprecated]
    #
    # @!attribute [rw] cloud_function_configuration
    #   @return [Types::CloudFunctionConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NotificationConfigurationDeprecated AWS API Documentation
    #
    class NotificationConfigurationDeprecated < Struct.new(
      :topic_configuration,
      :queue_configuration,
      :cloud_function_configuration)
      include Aws::Structure
    end

    # Specifies object key name filtering rules. For information about key
    # name filtering, see [Configuring Event Notifications][1] in the
    # *Amazon Simple Storage Service Developer Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
    #
    # @note When making an API call, you may pass NotificationConfigurationFilter
    #   data as a hash:
    #
    #       {
    #         key: {
    #           filter_rules: [
    #             {
    #               name: "prefix", # accepts prefix, suffix
    #               value: "FilterRuleValue",
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] key
    #   @return [Types::S3KeyFilter]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/NotificationConfigurationFilter AWS API Documentation
    #
    class NotificationConfigurationFilter < Struct.new(
      :key)
      include Aws::Structure
    end

    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] last_modified
    #   @return [Time]
    #
    # @!attribute [rw] etag
    #   @return [String]
    #
    # @!attribute [rw] size
    #   @return [Integer]
    #
    # @!attribute [rw] storage_class
    #   The class of storage used to store the object.
    #   @return [String]
    #
    # @!attribute [rw] owner
    #   @return [Types::Owner]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Object AWS API Documentation
    #
    class Object < Struct.new(
      :key,
      :last_modified,
      :etag,
      :size,
      :storage_class,
      :owner)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ObjectIdentifier
    #   data as a hash:
    #
    #       {
    #         key: "ObjectKey", # required
    #         version_id: "ObjectVersionId",
    #       }
    #
    # @!attribute [rw] key
    #   Key name of the object to delete.
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   VersionId for the specific version of the object to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectIdentifier AWS API Documentation
    #
    class ObjectIdentifier < Struct.new(
      :key,
      :version_id)
      include Aws::Structure
    end

    # The container element for object lock configuration parameters.
    #
    # @note When making an API call, you may pass ObjectLockConfiguration
    #   data as a hash:
    #
    #       {
    #         object_lock_enabled: "Enabled", # accepts Enabled
    #         rule: {
    #           default_retention: {
    #             mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
    #             days: 1,
    #             years: 1,
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] object_lock_enabled
    #   Indicates whether this bucket has an object lock configuration
    #   enabled.
    #   @return [String]
    #
    # @!attribute [rw] rule
    #   The object lock rule in place for the specified object.
    #   @return [Types::ObjectLockRule]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectLockConfiguration AWS API Documentation
    #
    class ObjectLockConfiguration < Struct.new(
      :object_lock_enabled,
      :rule)
      include Aws::Structure
    end

    # A Legal Hold configuration for an object.
    #
    # @note When making an API call, you may pass ObjectLockLegalHold
    #   data as a hash:
    #
    #       {
    #         status: "ON", # accepts ON, OFF
    #       }
    #
    # @!attribute [rw] status
    #   Indicates whether the specified object has a Legal Hold in place.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectLockLegalHold AWS API Documentation
    #
    class ObjectLockLegalHold < Struct.new(
      :status)
      include Aws::Structure
    end

    # A Retention configuration for an object.
    #
    # @note When making an API call, you may pass ObjectLockRetention
    #   data as a hash:
    #
    #       {
    #         mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
    #         retain_until_date: Time.now,
    #       }
    #
    # @!attribute [rw] mode
    #   Indicates the Retention mode for the specified object.
    #   @return [String]
    #
    # @!attribute [rw] retain_until_date
    #   The date on which this object lock retention expires.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectLockRetention AWS API Documentation
    #
    class ObjectLockRetention < Struct.new(
      :mode,
      :retain_until_date)
      include Aws::Structure
    end

    # The container element for an object lock rule.
    #
    # @note When making an API call, you may pass ObjectLockRule
    #   data as a hash:
    #
    #       {
    #         default_retention: {
    #           mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
    #           days: 1,
    #           years: 1,
    #         },
    #       }
    #
    # @!attribute [rw] default_retention
    #   The default retention period that you want to apply to new objects
    #   placed in the specified bucket.
    #   @return [Types::DefaultRetention]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectLockRule AWS API Documentation
    #
    class ObjectLockRule < Struct.new(
      :default_retention)
      include Aws::Structure
    end

    # @!attribute [rw] etag
    #   @return [String]
    #
    # @!attribute [rw] size
    #   Size in bytes of the object.
    #   @return [Integer]
    #
    # @!attribute [rw] storage_class
    #   The class of storage used to store the object.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   The object key.
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   Version ID of an object.
    #   @return [String]
    #
    # @!attribute [rw] is_latest
    #   Specifies whether the object is (true) or is not (false) the latest
    #   version of an object.
    #   @return [Boolean]
    #
    # @!attribute [rw] last_modified
    #   Date and time the object was last modified.
    #   @return [Time]
    #
    # @!attribute [rw] owner
    #   @return [Types::Owner]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ObjectVersion AWS API Documentation
    #
    class ObjectVersion < Struct.new(
      :etag,
      :size,
      :storage_class,
      :key,
      :version_id,
      :is_latest,
      :last_modified,
      :owner)
      include Aws::Structure
    end

    # Describes the location where the restore job's output is stored.
    #
    # @note When making an API call, you may pass OutputLocation
    #   data as a hash:
    #
    #       {
    #         s3: {
    #           bucket_name: "BucketName", # required
    #           prefix: "LocationPrefix", # required
    #           encryption: {
    #             encryption_type: "AES256", # required, accepts AES256, aws:kms
    #             kms_key_id: "SSEKMSKeyId",
    #             kms_context: "KMSContext",
    #           },
    #           canned_acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
    #           access_control_list: [
    #             {
    #               grantee: {
    #                 display_name: "DisplayName",
    #                 email_address: "EmailAddress",
    #                 id: "ID",
    #                 type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #                 uri: "URI",
    #               },
    #               permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
    #             },
    #           ],
    #           tagging: {
    #             tag_set: [ # required
    #               {
    #                 key: "ObjectKey", # required
    #                 value: "Value", # required
    #               },
    #             ],
    #           },
    #           user_metadata: [
    #             {
    #               name: "MetadataKey",
    #               value: "MetadataValue",
    #             },
    #           ],
    #           storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #         },
    #       }
    #
    # @!attribute [rw] s3
    #   Describes an S3 location that will receive the results of the
    #   restore request.
    #   @return [Types::S3Location]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/OutputLocation AWS API Documentation
    #
    class OutputLocation < Struct.new(
      :s3)
      include Aws::Structure
    end

    # Describes how results of the Select job are serialized.
    #
    # @note When making an API call, you may pass OutputSerialization
    #   data as a hash:
    #
    #       {
    #         csv: {
    #           quote_fields: "ALWAYS", # accepts ALWAYS, ASNEEDED
    #           quote_escape_character: "QuoteEscapeCharacter",
    #           record_delimiter: "RecordDelimiter",
    #           field_delimiter: "FieldDelimiter",
    #           quote_character: "QuoteCharacter",
    #         },
    #         json: {
    #           record_delimiter: "RecordDelimiter",
    #         },
    #       }
    #
    # @!attribute [rw] csv
    #   Describes the serialization of CSV-encoded Select results.
    #   @return [Types::CSVOutput]
    #
    # @!attribute [rw] json
    #   Specifies JSON as request's output serialization format.
    #   @return [Types::JSONOutput]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/OutputSerialization AWS API Documentation
    #
    class OutputSerialization < Struct.new(
      :csv,
      :json)
      include Aws::Structure
    end

    # @note When making an API call, you may pass Owner
    #   data as a hash:
    #
    #       {
    #         display_name: "DisplayName",
    #         id: "ID",
    #       }
    #
    # @!attribute [rw] display_name
    #   @return [String]
    #
    # @!attribute [rw] id
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Owner AWS API Documentation
    #
    class Owner < Struct.new(
      :display_name,
      :id)
      include Aws::Structure
    end

    # @api private
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ParquetInput AWS API Documentation
    #
    class ParquetInput < Aws::EmptyStructure; end

    # @!attribute [rw] part_number
    #   Part number identifying the part. This is a positive integer between
    #   1 and 10,000.
    #   @return [Integer]
    #
    # @!attribute [rw] last_modified
    #   Date and time at which the part was uploaded.
    #   @return [Time]
    #
    # @!attribute [rw] etag
    #   Entity tag returned when the part was uploaded.
    #   @return [String]
    #
    # @!attribute [rw] size
    #   Size in bytes of the uploaded part data.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Part AWS API Documentation
    #
    class Part < Struct.new(
      :part_number,
      :last_modified,
      :etag,
      :size)
      include Aws::Structure
    end

    # The container element for a bucket's policy status.
    #
    # @!attribute [rw] is_public
    #   The policy status for this bucket. `TRUE` indicates that this bucket
    #   is public. `FALSE` indicates that the bucket is not public.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PolicyStatus AWS API Documentation
    #
    class PolicyStatus < Struct.new(
      :is_public)
      include Aws::Structure
    end

    # @!attribute [rw] bytes_scanned
    #   The current number of object bytes scanned.
    #   @return [Integer]
    #
    # @!attribute [rw] bytes_processed
    #   The current number of uncompressed object bytes processed.
    #   @return [Integer]
    #
    # @!attribute [rw] bytes_returned
    #   The current number of bytes of records payload data returned.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Progress AWS API Documentation
    #
    class Progress < Struct.new(
      :bytes_scanned,
      :bytes_processed,
      :bytes_returned)
      include Aws::Structure
    end

    # @!attribute [rw] details
    #   The Progress event details.
    #   @return [Types::Progress]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ProgressEvent AWS API Documentation
    #
    class ProgressEvent < Struct.new(
      :details,
      :event_type)
      include Aws::Structure
    end

    # Specifies the Block Public Access configuration for an Amazon S3
    # bucket.
    #
    # @note When making an API call, you may pass PublicAccessBlockConfiguration
    #   data as a hash:
    #
    #       {
    #         block_public_acls: false,
    #         ignore_public_acls: false,
    #         block_public_policy: false,
    #         restrict_public_buckets: false,
    #       }
    #
    # @!attribute [rw] block_public_acls
    #   Specifies whether Amazon S3 should block public access control lists
    #   (ACLs) for this bucket and objects in this bucket. Setting this
    #   element to `TRUE` causes the following behavior:
    #
    #   * PUT Bucket acl and PUT Object acl calls fail if the specified ACL
    #     is public.
    #
    #   * PUT Object calls fail if the request includes a public ACL.
    #
    #   Enabling this setting doesn't affect existing policies or ACLs.
    #   @return [Boolean]
    #
    # @!attribute [rw] ignore_public_acls
    #   Specifies whether Amazon S3 should ignore public ACLs for this
    #   bucket and objects in this bucket. Setting this element to `TRUE`
    #   causes Amazon S3 to ignore all public ACLs on this bucket and
    #   objects in this bucket.
    #
    #   Enabling this setting doesn't affect the persistence of any
    #   existing ACLs and doesn't prevent new public ACLs from being set.
    #   @return [Boolean]
    #
    # @!attribute [rw] block_public_policy
    #   Specifies whether Amazon S3 should block public bucket policies for
    #   this bucket. Setting this element to `TRUE` causes Amazon S3 to
    #   reject calls to PUT Bucket policy if the specified bucket policy
    #   allows public access.
    #
    #   Enabling this setting doesn't affect existing bucket policies.
    #   @return [Boolean]
    #
    # @!attribute [rw] restrict_public_buckets
    #   Specifies whether Amazon S3 should restrict public bucket policies
    #   for this bucket. Setting this element to `TRUE` restricts access to
    #   this bucket to only AWS services and authorized users within this
    #   account if the bucket has a public policy.
    #
    #   Enabling this setting doesn't affect previously stored bucket
    #   policies, except that public and cross-account access within any
    #   public bucket policy, including non-public delegation to specific
    #   accounts, is blocked.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PublicAccessBlockConfiguration AWS API Documentation
    #
    class PublicAccessBlockConfiguration < Struct.new(
      :block_public_acls,
      :ignore_public_acls,
      :block_public_policy,
      :restrict_public_buckets)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketAccelerateConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         accelerate_configuration: { # required
    #           status: "Enabled", # accepts Enabled, Suspended
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   Name of the bucket for which the accelerate configuration is set.
    #   @return [String]
    #
    # @!attribute [rw] accelerate_configuration
    #   Specifies the Accelerate Configuration you want to set for the
    #   bucket.
    #   @return [Types::AccelerateConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAccelerateConfigurationRequest AWS API Documentation
    #
    class PutBucketAccelerateConfigurationRequest < Struct.new(
      :bucket,
      :accelerate_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketAclRequest
    #   data as a hash:
    #
    #       {
    #         acl: "private", # accepts private, public-read, public-read-write, authenticated-read
    #         access_control_policy: {
    #           grants: [
    #             {
    #               grantee: {
    #                 display_name: "DisplayName",
    #                 email_address: "EmailAddress",
    #                 id: "ID",
    #                 type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #                 uri: "URI",
    #               },
    #               permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
    #             },
    #           ],
    #           owner: {
    #             display_name: "DisplayName",
    #             id: "ID",
    #           },
    #         },
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         grant_full_control: "GrantFullControl",
    #         grant_read: "GrantRead",
    #         grant_read_acp: "GrantReadACP",
    #         grant_write: "GrantWrite",
    #         grant_write_acp: "GrantWriteACP",
    #       }
    #
    # @!attribute [rw] acl
    #   The canned ACL to apply to the bucket.
    #   @return [String]
    #
    # @!attribute [rw] access_control_policy
    #   Contains the elements that set the ACL permissions for an object per
    #   grantee.
    #   @return [Types::AccessControlPolicy]
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] grant_full_control
    #   Allows grantee the read, write, read ACP, and write ACP permissions
    #   on the bucket.
    #   @return [String]
    #
    # @!attribute [rw] grant_read
    #   Allows grantee to list the objects in the bucket.
    #   @return [String]
    #
    # @!attribute [rw] grant_read_acp
    #   Allows grantee to read the bucket ACL.
    #   @return [String]
    #
    # @!attribute [rw] grant_write
    #   Allows grantee to create, overwrite, and delete any object in the
    #   bucket.
    #   @return [String]
    #
    # @!attribute [rw] grant_write_acp
    #   Allows grantee to write the ACL for the applicable bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAclRequest AWS API Documentation
    #
    class PutBucketAclRequest < Struct.new(
      :acl,
      :access_control_policy,
      :bucket,
      :content_md5,
      :grant_full_control,
      :grant_read,
      :grant_read_acp,
      :grant_write,
      :grant_write_acp)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketAnalyticsConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         id: "AnalyticsId", # required
    #         analytics_configuration: { # required
    #           id: "AnalyticsId", # required
    #           filter: {
    #             prefix: "Prefix",
    #             tag: {
    #               key: "ObjectKey", # required
    #               value: "Value", # required
    #             },
    #             and: {
    #               prefix: "Prefix",
    #               tags: [
    #                 {
    #                   key: "ObjectKey", # required
    #                   value: "Value", # required
    #                 },
    #               ],
    #             },
    #           },
    #           storage_class_analysis: { # required
    #             data_export: {
    #               output_schema_version: "V_1", # required, accepts V_1
    #               destination: { # required
    #                 s3_bucket_destination: { # required
    #                   format: "CSV", # required, accepts CSV
    #                   bucket_account_id: "AccountId",
    #                   bucket: "BucketName", # required
    #                   prefix: "Prefix",
    #                 },
    #               },
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket to which an analytics configuration is
    #   stored.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID that identifies the analytics configuration.
    #   @return [String]
    #
    # @!attribute [rw] analytics_configuration
    #   The configuration and any analyses for the analytics filter.
    #   @return [Types::AnalyticsConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAnalyticsConfigurationRequest AWS API Documentation
    #
    class PutBucketAnalyticsConfigurationRequest < Struct.new(
      :bucket,
      :id,
      :analytics_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketCorsRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         cors_configuration: { # required
    #           cors_rules: [ # required
    #             {
    #               allowed_headers: ["AllowedHeader"],
    #               allowed_methods: ["AllowedMethod"], # required
    #               allowed_origins: ["AllowedOrigin"], # required
    #               expose_headers: ["ExposeHeader"],
    #               max_age_seconds: 1,
    #             },
    #           ],
    #         },
    #         content_md5: "ContentMD5",
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] cors_configuration
    #   @return [Types::CORSConfiguration]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketCorsRequest AWS API Documentation
    #
    class PutBucketCorsRequest < Struct.new(
      :bucket,
      :cors_configuration,
      :content_md5)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketEncryptionRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         server_side_encryption_configuration: { # required
    #           rules: [ # required
    #             {
    #               apply_server_side_encryption_by_default: {
    #                 sse_algorithm: "AES256", # required, accepts AES256, aws:kms
    #                 kms_master_key_id: "SSEKMSKeyId",
    #               },
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   Specifies default encryption for a bucket using server-side
    #   encryption with Amazon S3-managed keys (SSE-S3) or AWS KMS-managed
    #   keys (SSE-KMS). For information about the Amazon S3 default
    #   encryption feature, see [Amazon S3 Default Bucket Encryption][1] in
    #   the *Amazon Simple Storage Service Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   The base64-encoded 128-bit MD5 digest of the server-side encryption
    #   configuration. This parameter is auto-populated when using the
    #   command from the CLI.
    #   @return [String]
    #
    # @!attribute [rw] server_side_encryption_configuration
    #   @return [Types::ServerSideEncryptionConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketEncryptionRequest AWS API Documentation
    #
    class PutBucketEncryptionRequest < Struct.new(
      :bucket,
      :content_md5,
      :server_side_encryption_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketInventoryConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         id: "InventoryId", # required
    #         inventory_configuration: { # required
    #           destination: { # required
    #             s3_bucket_destination: { # required
    #               account_id: "AccountId",
    #               bucket: "BucketName", # required
    #               format: "CSV", # required, accepts CSV, ORC, Parquet
    #               prefix: "Prefix",
    #               encryption: {
    #                 sses3: {
    #                 },
    #                 ssekms: {
    #                   key_id: "SSEKMSKeyId", # required
    #                 },
    #               },
    #             },
    #           },
    #           is_enabled: false, # required
    #           filter: {
    #             prefix: "Prefix", # required
    #           },
    #           id: "InventoryId", # required
    #           included_object_versions: "All", # required, accepts All, Current
    #           optional_fields: ["Size"], # accepts Size, LastModifiedDate, StorageClass, ETag, IsMultipartUploaded, ReplicationStatus, EncryptionStatus, ObjectLockRetainUntilDate, ObjectLockMode, ObjectLockLegalHoldStatus
    #           schedule: { # required
    #             frequency: "Daily", # required, accepts Daily, Weekly
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket where the inventory configuration will be
    #   stored.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID used to identify the inventory configuration.
    #   @return [String]
    #
    # @!attribute [rw] inventory_configuration
    #   Specifies the inventory configuration.
    #   @return [Types::InventoryConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketInventoryConfigurationRequest AWS API Documentation
    #
    class PutBucketInventoryConfigurationRequest < Struct.new(
      :bucket,
      :id,
      :inventory_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketLifecycleConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         lifecycle_configuration: {
    #           rules: [ # required
    #             {
    #               expiration: {
    #                 date: Time.now,
    #                 days: 1,
    #                 expired_object_delete_marker: false,
    #               },
    #               id: "ID",
    #               prefix: "Prefix",
    #               filter: {
    #                 prefix: "Prefix",
    #                 tag: {
    #                   key: "ObjectKey", # required
    #                   value: "Value", # required
    #                 },
    #                 and: {
    #                   prefix: "Prefix",
    #                   tags: [
    #                     {
    #                       key: "ObjectKey", # required
    #                       value: "Value", # required
    #                     },
    #                   ],
    #                 },
    #               },
    #               status: "Enabled", # required, accepts Enabled, Disabled
    #               transitions: [
    #                 {
    #                   date: Time.now,
    #                   days: 1,
    #                   storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #                 },
    #               ],
    #               noncurrent_version_transitions: [
    #                 {
    #                   noncurrent_days: 1,
    #                   storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #                 },
    #               ],
    #               noncurrent_version_expiration: {
    #                 noncurrent_days: 1,
    #               },
    #               abort_incomplete_multipart_upload: {
    #                 days_after_initiation: 1,
    #               },
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] lifecycle_configuration
    #   @return [Types::BucketLifecycleConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycleConfigurationRequest AWS API Documentation
    #
    class PutBucketLifecycleConfigurationRequest < Struct.new(
      :bucket,
      :lifecycle_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketLifecycleRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         lifecycle_configuration: {
    #           rules: [ # required
    #             {
    #               expiration: {
    #                 date: Time.now,
    #                 days: 1,
    #                 expired_object_delete_marker: false,
    #               },
    #               id: "ID",
    #               prefix: "Prefix", # required
    #               status: "Enabled", # required, accepts Enabled, Disabled
    #               transition: {
    #                 date: Time.now,
    #                 days: 1,
    #                 storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #               },
    #               noncurrent_version_transition: {
    #                 noncurrent_days: 1,
    #                 storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #               },
    #               noncurrent_version_expiration: {
    #                 noncurrent_days: 1,
    #               },
    #               abort_incomplete_multipart_upload: {
    #                 days_after_initiation: 1,
    #               },
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] lifecycle_configuration
    #   @return [Types::LifecycleConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycleRequest AWS API Documentation
    #
    class PutBucketLifecycleRequest < Struct.new(
      :bucket,
      :content_md5,
      :lifecycle_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketLoggingRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         bucket_logging_status: { # required
    #           logging_enabled: {
    #             target_bucket: "TargetBucket", # required
    #             target_grants: [
    #               {
    #                 grantee: {
    #                   display_name: "DisplayName",
    #                   email_address: "EmailAddress",
    #                   id: "ID",
    #                   type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #                   uri: "URI",
    #                 },
    #                 permission: "FULL_CONTROL", # accepts FULL_CONTROL, READ, WRITE
    #               },
    #             ],
    #             target_prefix: "TargetPrefix", # required
    #           },
    #         },
    #         content_md5: "ContentMD5",
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] bucket_logging_status
    #   @return [Types::BucketLoggingStatus]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLoggingRequest AWS API Documentation
    #
    class PutBucketLoggingRequest < Struct.new(
      :bucket,
      :bucket_logging_status,
      :content_md5)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketMetricsConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         id: "MetricsId", # required
    #         metrics_configuration: { # required
    #           id: "MetricsId", # required
    #           filter: {
    #             prefix: "Prefix",
    #             tag: {
    #               key: "ObjectKey", # required
    #               value: "Value", # required
    #             },
    #             and: {
    #               prefix: "Prefix",
    #               tags: [
    #                 {
    #                   key: "ObjectKey", # required
    #                   value: "Value", # required
    #                 },
    #               ],
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the bucket for which the metrics configuration is set.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID used to identify the metrics configuration.
    #   @return [String]
    #
    # @!attribute [rw] metrics_configuration
    #   Specifies the metrics configuration.
    #   @return [Types::MetricsConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketMetricsConfigurationRequest AWS API Documentation
    #
    class PutBucketMetricsConfigurationRequest < Struct.new(
      :bucket,
      :id,
      :metrics_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketNotificationConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         notification_configuration: { # required
    #           topic_configurations: [
    #             {
    #               id: "NotificationId",
    #               topic_arn: "TopicArn", # required
    #               events: ["s3:ReducedRedundancyLostObject"], # required, accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #               filter: {
    #                 key: {
    #                   filter_rules: [
    #                     {
    #                       name: "prefix", # accepts prefix, suffix
    #                       value: "FilterRuleValue",
    #                     },
    #                   ],
    #                 },
    #               },
    #             },
    #           ],
    #           queue_configurations: [
    #             {
    #               id: "NotificationId",
    #               queue_arn: "QueueArn", # required
    #               events: ["s3:ReducedRedundancyLostObject"], # required, accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #               filter: {
    #                 key: {
    #                   filter_rules: [
    #                     {
    #                       name: "prefix", # accepts prefix, suffix
    #                       value: "FilterRuleValue",
    #                     },
    #                   ],
    #                 },
    #               },
    #             },
    #           ],
    #           lambda_function_configurations: [
    #             {
    #               id: "NotificationId",
    #               lambda_function_arn: "LambdaFunctionArn", # required
    #               events: ["s3:ReducedRedundancyLostObject"], # required, accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #               filter: {
    #                 key: {
    #                   filter_rules: [
    #                     {
    #                       name: "prefix", # accepts prefix, suffix
    #                       value: "FilterRuleValue",
    #                     },
    #                   ],
    #                 },
    #               },
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] notification_configuration
    #   @return [Types::NotificationConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotificationConfigurationRequest AWS API Documentation
    #
    class PutBucketNotificationConfigurationRequest < Struct.new(
      :bucket,
      :notification_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketNotificationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         notification_configuration: { # required
    #           topic_configuration: {
    #             id: "NotificationId",
    #             events: ["s3:ReducedRedundancyLostObject"], # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #             event: "s3:ReducedRedundancyLostObject", # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #             topic: "TopicArn",
    #           },
    #           queue_configuration: {
    #             id: "NotificationId",
    #             event: "s3:ReducedRedundancyLostObject", # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #             events: ["s3:ReducedRedundancyLostObject"], # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #             queue: "QueueArn",
    #           },
    #           cloud_function_configuration: {
    #             id: "NotificationId",
    #             event: "s3:ReducedRedundancyLostObject", # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #             events: ["s3:ReducedRedundancyLostObject"], # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #             cloud_function: "CloudFunction",
    #             invocation_role: "CloudFunctionInvocationRole",
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] notification_configuration
    #   @return [Types::NotificationConfigurationDeprecated]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotificationRequest AWS API Documentation
    #
    class PutBucketNotificationRequest < Struct.new(
      :bucket,
      :content_md5,
      :notification_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketPolicyRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         confirm_remove_self_bucket_access: false,
    #         policy: "Policy", # required
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] confirm_remove_self_bucket_access
    #   Set this parameter to true to confirm that you want to remove your
    #   permissions to change this bucket policy in the future.
    #   @return [Boolean]
    #
    # @!attribute [rw] policy
    #   The bucket policy as a JSON document.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketPolicyRequest AWS API Documentation
    #
    class PutBucketPolicyRequest < Struct.new(
      :bucket,
      :content_md5,
      :confirm_remove_self_bucket_access,
      :policy)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketReplicationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         replication_configuration: { # required
    #           role: "Role", # required
    #           rules: [ # required
    #             {
    #               id: "ID",
    #               priority: 1,
    #               prefix: "Prefix",
    #               filter: {
    #                 prefix: "Prefix",
    #                 tag: {
    #                   key: "ObjectKey", # required
    #                   value: "Value", # required
    #                 },
    #                 and: {
    #                   prefix: "Prefix",
    #                   tags: [
    #                     {
    #                       key: "ObjectKey", # required
    #                       value: "Value", # required
    #                     },
    #                   ],
    #                 },
    #               },
    #               status: "Enabled", # required, accepts Enabled, Disabled
    #               source_selection_criteria: {
    #                 sse_kms_encrypted_objects: {
    #                   status: "Enabled", # required, accepts Enabled, Disabled
    #                 },
    #               },
    #               destination: { # required
    #                 bucket: "BucketName", # required
    #                 account: "AccountId",
    #                 storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #                 access_control_translation: {
    #                   owner: "Destination", # required, accepts Destination
    #                 },
    #                 encryption_configuration: {
    #                   replica_kms_key_id: "ReplicaKmsKeyID",
    #                 },
    #               },
    #               delete_marker_replication: {
    #                 status: "Enabled", # accepts Enabled, Disabled
    #               },
    #             },
    #           ],
    #         },
    #         token: "ObjectLockToken",
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   The base64-encoded 128-bit MD5 digest of the data. You must use this
    #   header as a message integrity check to verify that the request body
    #   was not corrupted in transit.
    #   @return [String]
    #
    # @!attribute [rw] replication_configuration
    #   @return [Types::ReplicationConfiguration]
    #
    # @!attribute [rw] token
    #   A token that allows Amazon S3 object lock to be enabled for an
    #   existing bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketReplicationRequest AWS API Documentation
    #
    class PutBucketReplicationRequest < Struct.new(
      :bucket,
      :content_md5,
      :replication_configuration,
      :token)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketRequestPaymentRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         request_payment_configuration: { # required
    #           payer: "Requester", # required, accepts Requester, BucketOwner
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] request_payment_configuration
    #   @return [Types::RequestPaymentConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketRequestPaymentRequest AWS API Documentation
    #
    class PutBucketRequestPaymentRequest < Struct.new(
      :bucket,
      :content_md5,
      :request_payment_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketTaggingRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         tagging: { # required
    #           tag_set: [ # required
    #             {
    #               key: "ObjectKey", # required
    #               value: "Value", # required
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] tagging
    #   @return [Types::Tagging]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketTaggingRequest AWS API Documentation
    #
    class PutBucketTaggingRequest < Struct.new(
      :bucket,
      :content_md5,
      :tagging)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketVersioningRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         mfa: "MFA",
    #         versioning_configuration: { # required
    #           mfa_delete: "Enabled", # accepts Enabled, Disabled
    #           status: "Enabled", # accepts Enabled, Suspended
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] mfa
    #   The concatenation of the authentication device's serial number, a
    #   space, and the value that is displayed on your authentication
    #   device.
    #   @return [String]
    #
    # @!attribute [rw] versioning_configuration
    #   @return [Types::VersioningConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketVersioningRequest AWS API Documentation
    #
    class PutBucketVersioningRequest < Struct.new(
      :bucket,
      :content_md5,
      :mfa,
      :versioning_configuration)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutBucketWebsiteRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         website_configuration: { # required
    #           error_document: {
    #             key: "ObjectKey", # required
    #           },
    #           index_document: {
    #             suffix: "Suffix", # required
    #           },
    #           redirect_all_requests_to: {
    #             host_name: "HostName", # required
    #             protocol: "http", # accepts http, https
    #           },
    #           routing_rules: [
    #             {
    #               condition: {
    #                 http_error_code_returned_equals: "HttpErrorCodeReturnedEquals",
    #                 key_prefix_equals: "KeyPrefixEquals",
    #               },
    #               redirect: { # required
    #                 host_name: "HostName",
    #                 http_redirect_code: "HttpRedirectCode",
    #                 protocol: "http", # accepts http, https
    #                 replace_key_prefix_with: "ReplaceKeyPrefixWith",
    #                 replace_key_with: "ReplaceKeyWith",
    #               },
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] website_configuration
    #   @return [Types::WebsiteConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketWebsiteRequest AWS API Documentation
    #
    class PutBucketWebsiteRequest < Struct.new(
      :bucket,
      :content_md5,
      :website_configuration)
      include Aws::Structure
    end

    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectAclOutput AWS API Documentation
    #
    class PutObjectAclOutput < Struct.new(
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutObjectAclRequest
    #   data as a hash:
    #
    #       {
    #         acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
    #         access_control_policy: {
    #           grants: [
    #             {
    #               grantee: {
    #                 display_name: "DisplayName",
    #                 email_address: "EmailAddress",
    #                 id: "ID",
    #                 type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #                 uri: "URI",
    #               },
    #               permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
    #             },
    #           ],
    #           owner: {
    #             display_name: "DisplayName",
    #             id: "ID",
    #           },
    #         },
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         grant_full_control: "GrantFullControl",
    #         grant_read: "GrantRead",
    #         grant_read_acp: "GrantReadACP",
    #         grant_write: "GrantWrite",
    #         grant_write_acp: "GrantWriteACP",
    #         key: "ObjectKey", # required
    #         request_payer: "requester", # accepts requester
    #         version_id: "ObjectVersionId",
    #       }
    #
    # @!attribute [rw] acl
    #   The canned ACL to apply to the object.
    #   @return [String]
    #
    # @!attribute [rw] access_control_policy
    #   Contains the elements that set the ACL permissions for an object per
    #   grantee.
    #   @return [Types::AccessControlPolicy]
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] grant_full_control
    #   Allows grantee the read, write, read ACP, and write ACP permissions
    #   on the bucket.
    #   @return [String]
    #
    # @!attribute [rw] grant_read
    #   Allows grantee to list the objects in the bucket.
    #   @return [String]
    #
    # @!attribute [rw] grant_read_acp
    #   Allows grantee to read the bucket ACL.
    #   @return [String]
    #
    # @!attribute [rw] grant_write
    #   Allows grantee to create, overwrite, and delete any object in the
    #   bucket.
    #   @return [String]
    #
    # @!attribute [rw] grant_write_acp
    #   Allows grantee to write the ACL for the applicable bucket.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   VersionId used to reference a specific version of the object.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectAclRequest AWS API Documentation
    #
    class PutObjectAclRequest < Struct.new(
      :acl,
      :access_control_policy,
      :bucket,
      :content_md5,
      :grant_full_control,
      :grant_read,
      :grant_read_acp,
      :grant_write,
      :grant_write_acp,
      :key,
      :request_payer,
      :version_id)
      include Aws::Structure
    end

    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLegalHoldOutput AWS API Documentation
    #
    class PutObjectLegalHoldOutput < Struct.new(
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutObjectLegalHoldRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         legal_hold: {
    #           status: "ON", # accepts ON, OFF
    #         },
    #         request_payer: "requester", # accepts requester
    #         version_id: "ObjectVersionId",
    #         content_md5: "ContentMD5",
    #       }
    #
    # @!attribute [rw] bucket
    #   The bucket containing the object that you want to place a Legal Hold
    #   on.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   The key name for the object that you want to place a Legal Hold on.
    #   @return [String]
    #
    # @!attribute [rw] legal_hold
    #   Container element for the Legal Hold configuration you want to apply
    #   to the specified object.
    #   @return [Types::ObjectLockLegalHold]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   The version ID of the object that you want to place a Legal Hold on.
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   The MD5 hash for the request body.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLegalHoldRequest AWS API Documentation
    #
    class PutObjectLegalHoldRequest < Struct.new(
      :bucket,
      :key,
      :legal_hold,
      :request_payer,
      :version_id,
      :content_md5)
      include Aws::Structure
    end

    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLockConfigurationOutput AWS API Documentation
    #
    class PutObjectLockConfigurationOutput < Struct.new(
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutObjectLockConfigurationRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         object_lock_configuration: {
    #           object_lock_enabled: "Enabled", # accepts Enabled
    #           rule: {
    #             default_retention: {
    #               mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
    #               days: 1,
    #               years: 1,
    #             },
    #           },
    #         },
    #         request_payer: "requester", # accepts requester
    #         token: "ObjectLockToken",
    #         content_md5: "ContentMD5",
    #       }
    #
    # @!attribute [rw] bucket
    #   The bucket whose object lock configuration you want to create or
    #   replace.
    #   @return [String]
    #
    # @!attribute [rw] object_lock_configuration
    #   The object lock configuration that you want to apply to the
    #   specified bucket.
    #   @return [Types::ObjectLockConfiguration]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] token
    #   A token to allow Amazon S3 object lock to be enabled for an existing
    #   bucket.
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   The MD5 hash for the request body.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLockConfigurationRequest AWS API Documentation
    #
    class PutObjectLockConfigurationRequest < Struct.new(
      :bucket,
      :object_lock_configuration,
      :request_payer,
      :token,
      :content_md5)
      include Aws::Structure
    end

    # @!attribute [rw] expiration
    #   If the object expiration is configured, this will contain the
    #   expiration date (expiry-date) and rule ID (rule-id). The value of
    #   rule-id is URL encoded.
    #   @return [String]
    #
    # @!attribute [rw] etag
    #   Entity tag for the uploaded object.
    #   @return [String]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   Version of the object.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header confirming the
    #   encryption algorithm used.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header to provide
    #   round trip message integrity verification of the customer-provided
    #   encryption key.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   If present, specifies the ID of the AWS Key Management Service (KMS)
    #   master encryption key that was used for the object.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_encryption_context
    #   If present, specifies the AWS KMS Encryption Context to use for
    #   object encryption. The value of this header is a base64-encoded
    #   UTF-8 string holding JSON with the encryption context key-value
    #   pairs.
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectOutput AWS API Documentation
    #
    class PutObjectOutput < Struct.new(
      :expiration,
      :etag,
      :server_side_encryption,
      :version_id,
      :sse_customer_algorithm,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :ssekms_encryption_context,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutObjectRequest
    #   data as a hash:
    #
    #       {
    #         acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
    #         body: source_file,
    #         bucket: "BucketName", # required
    #         cache_control: "CacheControl",
    #         content_disposition: "ContentDisposition",
    #         content_encoding: "ContentEncoding",
    #         content_language: "ContentLanguage",
    #         content_length: 1,
    #         content_md5: "ContentMD5",
    #         content_type: "ContentType",
    #         expires: Time.now,
    #         grant_full_control: "GrantFullControl",
    #         grant_read: "GrantRead",
    #         grant_read_acp: "GrantReadACP",
    #         grant_write_acp: "GrantWriteACP",
    #         key: "ObjectKey", # required
    #         metadata: {
    #           "MetadataKey" => "MetadataValue",
    #         },
    #         server_side_encryption: "AES256", # accepts AES256, aws:kms
    #         storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #         website_redirect_location: "WebsiteRedirectLocation",
    #         sse_customer_algorithm: "SSECustomerAlgorithm",
    #         sse_customer_key: "SSECustomerKey",
    #         sse_customer_key_md5: "SSECustomerKeyMD5",
    #         ssekms_key_id: "SSEKMSKeyId",
    #         ssekms_encryption_context: "SSEKMSEncryptionContext",
    #         request_payer: "requester", # accepts requester
    #         tagging: "TaggingHeader",
    #         object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
    #         object_lock_retain_until_date: Time.now,
    #         object_lock_legal_hold_status: "ON", # accepts ON, OFF
    #       }
    #
    # @!attribute [rw] acl
    #   The canned ACL to apply to the object.
    #   @return [String]
    #
    # @!attribute [rw] body
    #   Object data.
    #   @return [IO]
    #
    # @!attribute [rw] bucket
    #   Name of the bucket to which the PUT operation was initiated.
    #   @return [String]
    #
    # @!attribute [rw] cache_control
    #   Specifies caching behavior along the request/reply chain.
    #   @return [String]
    #
    # @!attribute [rw] content_disposition
    #   Specifies presentational information for the object.
    #   @return [String]
    #
    # @!attribute [rw] content_encoding
    #   Specifies what content encodings have been applied to the object and
    #   thus what decoding mechanisms must be applied to obtain the
    #   media-type referenced by the Content-Type header field.
    #   @return [String]
    #
    # @!attribute [rw] content_language
    #   The language the content is in.
    #   @return [String]
    #
    # @!attribute [rw] content_length
    #   Size of the body in bytes. This parameter is useful when the size of
    #   the body cannot be determined automatically.
    #   @return [Integer]
    #
    # @!attribute [rw] content_md5
    #   The base64-encoded 128-bit MD5 digest of the part data. This
    #   parameter is auto-populated when using the command from the CLI.
    #   This parameted is required if object lock parameters are specified.
    #   @return [String]
    #
    # @!attribute [rw] content_type
    #   A standard MIME type describing the format of the object data.
    #   @return [String]
    #
    # @!attribute [rw] expires
    #   The date and time at which the object is no longer cacheable.
    #   @return [Time]
    #
    # @!attribute [rw] grant_full_control
    #   Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
    #   object.
    #   @return [String]
    #
    # @!attribute [rw] grant_read
    #   Allows grantee to read the object data and its metadata.
    #   @return [String]
    #
    # @!attribute [rw] grant_read_acp
    #   Allows grantee to read the object ACL.
    #   @return [String]
    #
    # @!attribute [rw] grant_write_acp
    #   Allows grantee to write the ACL for the applicable object.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   Object key for which the PUT operation was initiated.
    #   @return [String]
    #
    # @!attribute [rw] metadata
    #   A map of metadata to store with the object in S3.
    #   @return [Hash<String,String>]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] storage_class
    #   The type of storage to use for the object. Defaults to 'STANDARD'.
    #   @return [String]
    #
    # @!attribute [rw] website_redirect_location
    #   If the bucket is configured as a website, redirects requests for
    #   this object to another object in the same bucket or to an external
    #   URL. Amazon S3 stores the value of this header in the object
    #   metadata.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   Specifies the algorithm to use to when encrypting the object (e.g.,
    #   AES256).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key
    #   Specifies the customer-provided encryption key for Amazon S3 to use
    #   in encrypting data. This value is used to store the object and then
    #   it is discarded; Amazon does not store the encryption key. The key
    #   must be appropriate for use with the algorithm specified in the
    #   x-amz-server-side​-encryption​-customer-algorithm header.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   Specifies the 128-bit MD5 digest of the encryption key according to
    #   RFC 1321. Amazon S3 uses this header for a message integrity check
    #   to ensure the encryption key was transmitted without error.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   Specifies the AWS KMS key ID to use for object encryption. All GET
    #   and PUT requests for an object protected by AWS KMS will fail if not
    #   made via SSL or using SigV4. Documentation on configuring any of the
    #   officially supported AWS SDKs and CLI can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
    #   @return [String]
    #
    # @!attribute [rw] ssekms_encryption_context
    #   Specifies the AWS KMS Encryption Context to use for object
    #   encryption. The value of this header is a base64-encoded UTF-8
    #   string holding JSON with the encryption context key-value pairs.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] tagging
    #   The tag-set for the object. The tag-set must be encoded as URL Query
    #   parameters. (For example, "Key1=Value1")
    #   @return [String]
    #
    # @!attribute [rw] object_lock_mode
    #   The object lock mode that you want to apply to this object.
    #   @return [String]
    #
    # @!attribute [rw] object_lock_retain_until_date
    #   The date and time when you want this object's object lock to
    #   expire.
    #   @return [Time]
    #
    # @!attribute [rw] object_lock_legal_hold_status
    #   The Legal Hold status that you want to apply to the specified
    #   object.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRequest AWS API Documentation
    #
    class PutObjectRequest < Struct.new(
      :acl,
      :body,
      :bucket,
      :cache_control,
      :content_disposition,
      :content_encoding,
      :content_language,
      :content_length,
      :content_md5,
      :content_type,
      :expires,
      :grant_full_control,
      :grant_read,
      :grant_read_acp,
      :grant_write_acp,
      :key,
      :metadata,
      :server_side_encryption,
      :storage_class,
      :website_redirect_location,
      :sse_customer_algorithm,
      :sse_customer_key,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :ssekms_encryption_context,
      :request_payer,
      :tagging,
      :object_lock_mode,
      :object_lock_retain_until_date,
      :object_lock_legal_hold_status)
      include Aws::Structure
    end

    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRetentionOutput AWS API Documentation
    #
    class PutObjectRetentionOutput < Struct.new(
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutObjectRetentionRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         retention: {
    #           mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
    #           retain_until_date: Time.now,
    #         },
    #         request_payer: "requester", # accepts requester
    #         version_id: "ObjectVersionId",
    #         bypass_governance_retention: false,
    #         content_md5: "ContentMD5",
    #       }
    #
    # @!attribute [rw] bucket
    #   The bucket that contains the object you want to apply this Object
    #   Retention configuration to.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   The key name for the object that you want to apply this Object
    #   Retention configuration to.
    #   @return [String]
    #
    # @!attribute [rw] retention
    #   The container element for the Object Retention configuration.
    #   @return [Types::ObjectLockRetention]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   The version ID for the object that you want to apply this Object
    #   Retention configuration to.
    #   @return [String]
    #
    # @!attribute [rw] bypass_governance_retention
    #   Indicates whether this operation should bypass Governance-mode
    #   restrictions.j
    #   @return [Boolean]
    #
    # @!attribute [rw] content_md5
    #   The MD5 hash for the request body.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRetentionRequest AWS API Documentation
    #
    class PutObjectRetentionRequest < Struct.new(
      :bucket,
      :key,
      :retention,
      :request_payer,
      :version_id,
      :bypass_governance_retention,
      :content_md5)
      include Aws::Structure
    end

    # @!attribute [rw] version_id
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectTaggingOutput AWS API Documentation
    #
    class PutObjectTaggingOutput < Struct.new(
      :version_id)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutObjectTaggingRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         version_id: "ObjectVersionId",
    #         content_md5: "ContentMD5",
    #         tagging: { # required
    #           tag_set: [ # required
    #             {
    #               key: "ObjectKey", # required
    #               value: "Value", # required
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   @return [String]
    #
    # @!attribute [rw] tagging
    #   @return [Types::Tagging]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectTaggingRequest AWS API Documentation
    #
    class PutObjectTaggingRequest < Struct.new(
      :bucket,
      :key,
      :version_id,
      :content_md5,
      :tagging)
      include Aws::Structure
    end

    # @note When making an API call, you may pass PutPublicAccessBlockRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         content_md5: "ContentMD5",
    #         public_access_block_configuration: { # required
    #           block_public_acls: false,
    #           ignore_public_acls: false,
    #           block_public_policy: false,
    #           restrict_public_buckets: false,
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket whose `PublicAccessBlock`
    #   configuration you want to set.
    #   @return [String]
    #
    # @!attribute [rw] content_md5
    #   The MD5 hash of the `PutPublicAccessBlock` request body.
    #   @return [String]
    #
    # @!attribute [rw] public_access_block_configuration
    #   The `PublicAccessBlock` configuration that you want to apply to this
    #   Amazon S3 bucket. You can enable the configuration options in any
    #   combination. For more information about when Amazon S3 considers a
    #   bucket or object public, see [The Meaning of "Public"][1] in the
    #   *Amazon Simple Storage Service Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status
    #   @return [Types::PublicAccessBlockConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutPublicAccessBlockRequest AWS API Documentation
    #
    class PutPublicAccessBlockRequest < Struct.new(
      :bucket,
      :content_md5,
      :public_access_block_configuration)
      include Aws::Structure
    end

    # Specifies the configuration for publishing messages to an Amazon
    # Simple Queue Service (Amazon SQS) queue when Amazon S3 detects
    # specified events.
    #
    # @note When making an API call, you may pass QueueConfiguration
    #   data as a hash:
    #
    #       {
    #         id: "NotificationId",
    #         queue_arn: "QueueArn", # required
    #         events: ["s3:ReducedRedundancyLostObject"], # required, accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #         filter: {
    #           key: {
    #             filter_rules: [
    #               {
    #                 name: "prefix", # accepts prefix, suffix
    #                 value: "FilterRuleValue",
    #               },
    #             ],
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] id
    #   An optional unique identifier for configurations in a notification
    #   configuration. If you don't provide one, Amazon S3 will assign an
    #   ID.
    #   @return [String]
    #
    # @!attribute [rw] queue_arn
    #   The Amazon Resource Name (ARN) of the Amazon SQS queue to which
    #   Amazon S3 publishes a message when it detects events of the
    #   specified type.
    #   @return [String]
    #
    # @!attribute [rw] events
    #   @return [Array<String>]
    #
    # @!attribute [rw] filter
    #   @return [Types::NotificationConfigurationFilter]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/QueueConfiguration AWS API Documentation
    #
    class QueueConfiguration < Struct.new(
      :id,
      :queue_arn,
      :events,
      :filter)
      include Aws::Structure
    end

    # @note When making an API call, you may pass QueueConfigurationDeprecated
    #   data as a hash:
    #
    #       {
    #         id: "NotificationId",
    #         event: "s3:ReducedRedundancyLostObject", # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #         events: ["s3:ReducedRedundancyLostObject"], # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #         queue: "QueueArn",
    #       }
    #
    # @!attribute [rw] id
    #   An optional unique identifier for configurations in a notification
    #   configuration. If you don't provide one, Amazon S3 will assign an
    #   ID.
    #   @return [String]
    #
    # @!attribute [rw] event
    #   The bucket event for which to send notifications.
    #   @return [String]
    #
    # @!attribute [rw] events
    #   @return [Array<String>]
    #
    # @!attribute [rw] queue
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/QueueConfigurationDeprecated AWS API Documentation
    #
    class QueueConfigurationDeprecated < Struct.new(
      :id,
      :event,
      :events,
      :queue)
      include Aws::Structure
    end

    # @!attribute [rw] payload
    #   The byte array of partial, one or more result records.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RecordsEvent AWS API Documentation
    #
    class RecordsEvent < Struct.new(
      :payload,
      :event_type)
      include Aws::Structure
    end

    # Specifies how requests are redirected. In the event of an error, you
    # can specify a different error code to return.
    #
    # @note When making an API call, you may pass Redirect
    #   data as a hash:
    #
    #       {
    #         host_name: "HostName",
    #         http_redirect_code: "HttpRedirectCode",
    #         protocol: "http", # accepts http, https
    #         replace_key_prefix_with: "ReplaceKeyPrefixWith",
    #         replace_key_with: "ReplaceKeyWith",
    #       }
    #
    # @!attribute [rw] host_name
    #   The host name to use in the redirect request.
    #   @return [String]
    #
    # @!attribute [rw] http_redirect_code
    #   The HTTP redirect code to use on the response. Not required if one
    #   of the siblings is present.
    #   @return [String]
    #
    # @!attribute [rw] protocol
    #   Protocol to use when redirecting requests. The default is the
    #   protocol that is used in the original request.
    #   @return [String]
    #
    # @!attribute [rw] replace_key_prefix_with
    #   The object key prefix to use in the redirect request. For example,
    #   to redirect requests for all pages with prefix `docs/` (objects in
    #   the `docs/` folder) to `documents/`, you can set a condition block
    #   with `KeyPrefixEquals` set to `docs/` and in the Redirect set
    #   `ReplaceKeyPrefixWith` to `/documents`. Not required if one of the
    #   siblings is present. Can be present only if `ReplaceKeyWith` is not
    #   provided.
    #   @return [String]
    #
    # @!attribute [rw] replace_key_with
    #   The specific object key to use in the redirect request. For example,
    #   redirect request to `error.html`. Not required if one of the
    #   siblings is present. Can be present only if `ReplaceKeyPrefixWith`
    #   is not provided.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Redirect AWS API Documentation
    #
    class Redirect < Struct.new(
      :host_name,
      :http_redirect_code,
      :protocol,
      :replace_key_prefix_with,
      :replace_key_with)
      include Aws::Structure
    end

    # Specifies the redirect behavior of all requests to a website endpoint
    # of an Amazon S3 bucket.
    #
    # @note When making an API call, you may pass RedirectAllRequestsTo
    #   data as a hash:
    #
    #       {
    #         host_name: "HostName", # required
    #         protocol: "http", # accepts http, https
    #       }
    #
    # @!attribute [rw] host_name
    #   Name of the host where requests are redirected.
    #   @return [String]
    #
    # @!attribute [rw] protocol
    #   Protocol to use when redirecting requests. The default is the
    #   protocol that is used in the original request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RedirectAllRequestsTo AWS API Documentation
    #
    class RedirectAllRequestsTo < Struct.new(
      :host_name,
      :protocol)
      include Aws::Structure
    end

    # A container for replication rules. You can add up to 1,000 rules. The
    # maximum size of a replication configuration is 2 MB.
    #
    # @note When making an API call, you may pass ReplicationConfiguration
    #   data as a hash:
    #
    #       {
    #         role: "Role", # required
    #         rules: [ # required
    #           {
    #             id: "ID",
    #             priority: 1,
    #             prefix: "Prefix",
    #             filter: {
    #               prefix: "Prefix",
    #               tag: {
    #                 key: "ObjectKey", # required
    #                 value: "Value", # required
    #               },
    #               and: {
    #                 prefix: "Prefix",
    #                 tags: [
    #                   {
    #                     key: "ObjectKey", # required
    #                     value: "Value", # required
    #                   },
    #                 ],
    #               },
    #             },
    #             status: "Enabled", # required, accepts Enabled, Disabled
    #             source_selection_criteria: {
    #               sse_kms_encrypted_objects: {
    #                 status: "Enabled", # required, accepts Enabled, Disabled
    #               },
    #             },
    #             destination: { # required
    #               bucket: "BucketName", # required
    #               account: "AccountId",
    #               storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #               access_control_translation: {
    #                 owner: "Destination", # required, accepts Destination
    #               },
    #               encryption_configuration: {
    #                 replica_kms_key_id: "ReplicaKmsKeyID",
    #               },
    #             },
    #             delete_marker_replication: {
    #               status: "Enabled", # accepts Enabled, Disabled
    #             },
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] role
    #   The Amazon Resource Name (ARN) of the AWS Identity and Access
    #   Management (IAM) role that Amazon S3 assumes when replicating
    #   objects. For more information, see [How to Set Up Cross-Region
    #   Replication][1] in the *Amazon Simple Storage Service Developer
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-how-setup.html
    #   @return [String]
    #
    # @!attribute [rw] rules
    #   A container for one or more replication rules. A replication
    #   configuration must have at least one rule and can contain a maximum
    #   of 1,000 rules.
    #   @return [Array<Types::ReplicationRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationConfiguration AWS API Documentation
    #
    class ReplicationConfiguration < Struct.new(
      :role,
      :rules)
      include Aws::Structure
    end

    # Specifies which Amazon S3 objects to replicate and where to store the
    # replicas.
    #
    # @note When making an API call, you may pass ReplicationRule
    #   data as a hash:
    #
    #       {
    #         id: "ID",
    #         priority: 1,
    #         prefix: "Prefix",
    #         filter: {
    #           prefix: "Prefix",
    #           tag: {
    #             key: "ObjectKey", # required
    #             value: "Value", # required
    #           },
    #           and: {
    #             prefix: "Prefix",
    #             tags: [
    #               {
    #                 key: "ObjectKey", # required
    #                 value: "Value", # required
    #               },
    #             ],
    #           },
    #         },
    #         status: "Enabled", # required, accepts Enabled, Disabled
    #         source_selection_criteria: {
    #           sse_kms_encrypted_objects: {
    #             status: "Enabled", # required, accepts Enabled, Disabled
    #           },
    #         },
    #         destination: { # required
    #           bucket: "BucketName", # required
    #           account: "AccountId",
    #           storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #           access_control_translation: {
    #             owner: "Destination", # required, accepts Destination
    #           },
    #           encryption_configuration: {
    #             replica_kms_key_id: "ReplicaKmsKeyID",
    #           },
    #         },
    #         delete_marker_replication: {
    #           status: "Enabled", # accepts Enabled, Disabled
    #         },
    #       }
    #
    # @!attribute [rw] id
    #   A unique identifier for the rule. The maximum value is 255
    #   characters.
    #   @return [String]
    #
    # @!attribute [rw] priority
    #   The priority associated with the rule. If you specify multiple rules
    #   in a replication configuration, Amazon S3 prioritizes the rules to
    #   prevent conflicts when filtering. If two or more rules identify the
    #   same object based on a specified filter, the rule with higher
    #   priority takes precedence. For example:
    #
    #   * Same object quality prefix based filter criteria If prefixes you
    #     specified in multiple rules overlap
    #
    #   * Same object qualify tag based filter criteria specified in
    #     multiple rules
    #
    #   For more information, see [Cross-Region Replication (CRR)][1] in the
    #   *Amazon S3 Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html
    #   @return [Integer]
    #
    # @!attribute [rw] prefix
    #   An object keyname prefix that identifies the object or objects to
    #   which the rule applies. The maximum prefix length is 1,024
    #   characters. To include all objects in a bucket, specify an empty
    #   string.
    #   @return [String]
    #
    # @!attribute [rw] filter
    #   @return [Types::ReplicationRuleFilter]
    #
    # @!attribute [rw] status
    #   Specifies whether the rule is enabled.
    #   @return [String]
    #
    # @!attribute [rw] source_selection_criteria
    #   A container that describes additional filters for identifying the
    #   source objects that you want to replicate. You can choose to enable
    #   or disable the replication of these objects. Currently, Amazon S3
    #   supports only the filter that you can specify for objects created
    #   with server-side encryption using an AWS KMS-Managed Key (SSE-KMS).
    #   @return [Types::SourceSelectionCriteria]
    #
    # @!attribute [rw] destination
    #   A container for information about the replication destination.
    #   @return [Types::Destination]
    #
    # @!attribute [rw] delete_marker_replication
    #   @return [Types::DeleteMarkerReplication]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationRule AWS API Documentation
    #
    class ReplicationRule < Struct.new(
      :id,
      :priority,
      :prefix,
      :filter,
      :status,
      :source_selection_criteria,
      :destination,
      :delete_marker_replication)
      include Aws::Structure
    end

    # @note When making an API call, you may pass ReplicationRuleAndOperator
    #   data as a hash:
    #
    #       {
    #         prefix: "Prefix",
    #         tags: [
    #           {
    #             key: "ObjectKey", # required
    #             value: "Value", # required
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] prefix
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationRuleAndOperator AWS API Documentation
    #
    class ReplicationRuleAndOperator < Struct.new(
      :prefix,
      :tags)
      include Aws::Structure
    end

    # A filter that identifies the subset of objects to which the
    # replication rule applies. A `Filter` must specify exactly one
    # `Prefix`, `Tag`, or an `And` child element.
    #
    # @note When making an API call, you may pass ReplicationRuleFilter
    #   data as a hash:
    #
    #       {
    #         prefix: "Prefix",
    #         tag: {
    #           key: "ObjectKey", # required
    #           value: "Value", # required
    #         },
    #         and: {
    #           prefix: "Prefix",
    #           tags: [
    #             {
    #               key: "ObjectKey", # required
    #               value: "Value", # required
    #             },
    #           ],
    #         },
    #       }
    #
    # @!attribute [rw] prefix
    #   An object keyname prefix that identifies the subset of objects to
    #   which the rule applies.
    #   @return [String]
    #
    # @!attribute [rw] tag
    #   A container for specifying a tag key and value.
    #
    #   The rule applies only to objects that have the tag in their tag set.
    #   @return [Types::Tag]
    #
    # @!attribute [rw] and
    #   A container for specifying rule filters. The filters determine the
    #   subset of objects to which the rule applies. This element is
    #   required only if you specify more than one filter. For example:
    #
    #   * If you specify both a `Prefix` and a `Tag` filter, wrap these
    #     filters in an `And` tag.
    #
    #   * If you specify a filter based on multiple tags, wrap the `Tag`
    #     elements in an `And` tag.
    #   @return [Types::ReplicationRuleAndOperator]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ReplicationRuleFilter AWS API Documentation
    #
    class ReplicationRuleFilter < Struct.new(
      :prefix,
      :tag,
      :and)
      include Aws::Structure
    end

    # @note When making an API call, you may pass RequestPaymentConfiguration
    #   data as a hash:
    #
    #       {
    #         payer: "Requester", # required, accepts Requester, BucketOwner
    #       }
    #
    # @!attribute [rw] payer
    #   Specifies who pays for the download and request fees.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RequestPaymentConfiguration AWS API Documentation
    #
    class RequestPaymentConfiguration < Struct.new(
      :payer)
      include Aws::Structure
    end

    # @note When making an API call, you may pass RequestProgress
    #   data as a hash:
    #
    #       {
    #         enabled: false,
    #       }
    #
    # @!attribute [rw] enabled
    #   Specifies whether periodic QueryProgress frames should be sent.
    #   Valid values: TRUE, FALSE. Default value: FALSE.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RequestProgress AWS API Documentation
    #
    class RequestProgress < Struct.new(
      :enabled)
      include Aws::Structure
    end

    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @!attribute [rw] restore_output_path
    #   Indicates the path in the provided S3 output location where Select
    #   results will be restored to.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreObjectOutput AWS API Documentation
    #
    class RestoreObjectOutput < Struct.new(
      :request_charged,
      :restore_output_path)
      include Aws::Structure
    end

    # @note When making an API call, you may pass RestoreObjectRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         version_id: "ObjectVersionId",
    #         restore_request: {
    #           days: 1,
    #           glacier_job_parameters: {
    #             tier: "Standard", # required, accepts Standard, Bulk, Expedited
    #           },
    #           type: "SELECT", # accepts SELECT
    #           tier: "Standard", # accepts Standard, Bulk, Expedited
    #           description: "Description",
    #           select_parameters: {
    #             input_serialization: { # required
    #               csv: {
    #                 file_header_info: "USE", # accepts USE, IGNORE, NONE
    #                 comments: "Comments",
    #                 quote_escape_character: "QuoteEscapeCharacter",
    #                 record_delimiter: "RecordDelimiter",
    #                 field_delimiter: "FieldDelimiter",
    #                 quote_character: "QuoteCharacter",
    #                 allow_quoted_record_delimiter: false,
    #               },
    #               compression_type: "NONE", # accepts NONE, GZIP, BZIP2
    #               json: {
    #                 type: "DOCUMENT", # accepts DOCUMENT, LINES
    #               },
    #               parquet: {
    #               },
    #             },
    #             expression_type: "SQL", # required, accepts SQL
    #             expression: "Expression", # required
    #             output_serialization: { # required
    #               csv: {
    #                 quote_fields: "ALWAYS", # accepts ALWAYS, ASNEEDED
    #                 quote_escape_character: "QuoteEscapeCharacter",
    #                 record_delimiter: "RecordDelimiter",
    #                 field_delimiter: "FieldDelimiter",
    #                 quote_character: "QuoteCharacter",
    #               },
    #               json: {
    #                 record_delimiter: "RecordDelimiter",
    #               },
    #             },
    #           },
    #           output_location: {
    #             s3: {
    #               bucket_name: "BucketName", # required
    #               prefix: "LocationPrefix", # required
    #               encryption: {
    #                 encryption_type: "AES256", # required, accepts AES256, aws:kms
    #                 kms_key_id: "SSEKMSKeyId",
    #                 kms_context: "KMSContext",
    #               },
    #               canned_acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
    #               access_control_list: [
    #                 {
    #                   grantee: {
    #                     display_name: "DisplayName",
    #                     email_address: "EmailAddress",
    #                     id: "ID",
    #                     type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #                     uri: "URI",
    #                   },
    #                   permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
    #                 },
    #               ],
    #               tagging: {
    #                 tag_set: [ # required
    #                   {
    #                     key: "ObjectKey", # required
    #                     value: "Value", # required
    #                   },
    #                 ],
    #               },
    #               user_metadata: [
    #                 {
    #                   name: "MetadataKey",
    #                   value: "MetadataValue",
    #                 },
    #               ],
    #               storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #             },
    #           },
    #         },
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] version_id
    #   @return [String]
    #
    # @!attribute [rw] restore_request
    #   @return [Types::RestoreRequest]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreObjectRequest AWS API Documentation
    #
    class RestoreObjectRequest < Struct.new(
      :bucket,
      :key,
      :version_id,
      :restore_request,
      :request_payer)
      include Aws::Structure
    end

    # Container for restore job parameters.
    #
    # @note When making an API call, you may pass RestoreRequest
    #   data as a hash:
    #
    #       {
    #         days: 1,
    #         glacier_job_parameters: {
    #           tier: "Standard", # required, accepts Standard, Bulk, Expedited
    #         },
    #         type: "SELECT", # accepts SELECT
    #         tier: "Standard", # accepts Standard, Bulk, Expedited
    #         description: "Description",
    #         select_parameters: {
    #           input_serialization: { # required
    #             csv: {
    #               file_header_info: "USE", # accepts USE, IGNORE, NONE
    #               comments: "Comments",
    #               quote_escape_character: "QuoteEscapeCharacter",
    #               record_delimiter: "RecordDelimiter",
    #               field_delimiter: "FieldDelimiter",
    #               quote_character: "QuoteCharacter",
    #               allow_quoted_record_delimiter: false,
    #             },
    #             compression_type: "NONE", # accepts NONE, GZIP, BZIP2
    #             json: {
    #               type: "DOCUMENT", # accepts DOCUMENT, LINES
    #             },
    #             parquet: {
    #             },
    #           },
    #           expression_type: "SQL", # required, accepts SQL
    #           expression: "Expression", # required
    #           output_serialization: { # required
    #             csv: {
    #               quote_fields: "ALWAYS", # accepts ALWAYS, ASNEEDED
    #               quote_escape_character: "QuoteEscapeCharacter",
    #               record_delimiter: "RecordDelimiter",
    #               field_delimiter: "FieldDelimiter",
    #               quote_character: "QuoteCharacter",
    #             },
    #             json: {
    #               record_delimiter: "RecordDelimiter",
    #             },
    #           },
    #         },
    #         output_location: {
    #           s3: {
    #             bucket_name: "BucketName", # required
    #             prefix: "LocationPrefix", # required
    #             encryption: {
    #               encryption_type: "AES256", # required, accepts AES256, aws:kms
    #               kms_key_id: "SSEKMSKeyId",
    #               kms_context: "KMSContext",
    #             },
    #             canned_acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
    #             access_control_list: [
    #               {
    #                 grantee: {
    #                   display_name: "DisplayName",
    #                   email_address: "EmailAddress",
    #                   id: "ID",
    #                   type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #                   uri: "URI",
    #                 },
    #                 permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
    #               },
    #             ],
    #             tagging: {
    #               tag_set: [ # required
    #                 {
    #                   key: "ObjectKey", # required
    #                   value: "Value", # required
    #                 },
    #               ],
    #             },
    #             user_metadata: [
    #               {
    #                 name: "MetadataKey",
    #                 value: "MetadataValue",
    #               },
    #             ],
    #             storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] days
    #   Lifetime of the active copy in days. Do not use with restores that
    #   specify OutputLocation.
    #   @return [Integer]
    #
    # @!attribute [rw] glacier_job_parameters
    #   Glacier related parameters pertaining to this job. Do not use with
    #   restores that specify OutputLocation.
    #   @return [Types::GlacierJobParameters]
    #
    # @!attribute [rw] type
    #   Type of restore request.
    #   @return [String]
    #
    # @!attribute [rw] tier
    #   Glacier retrieval tier at which the restore will be processed.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The optional description for the job.
    #   @return [String]
    #
    # @!attribute [rw] select_parameters
    #   Describes the parameters for Select job types.
    #   @return [Types::SelectParameters]
    #
    # @!attribute [rw] output_location
    #   Describes the location where the restore job's output is stored.
    #   @return [Types::OutputLocation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreRequest AWS API Documentation
    #
    class RestoreRequest < Struct.new(
      :days,
      :glacier_job_parameters,
      :type,
      :tier,
      :description,
      :select_parameters,
      :output_location)
      include Aws::Structure
    end

    # Specifies the redirect behavior and when a redirect is applied.
    #
    # @note When making an API call, you may pass RoutingRule
    #   data as a hash:
    #
    #       {
    #         condition: {
    #           http_error_code_returned_equals: "HttpErrorCodeReturnedEquals",
    #           key_prefix_equals: "KeyPrefixEquals",
    #         },
    #         redirect: { # required
    #           host_name: "HostName",
    #           http_redirect_code: "HttpRedirectCode",
    #           protocol: "http", # accepts http, https
    #           replace_key_prefix_with: "ReplaceKeyPrefixWith",
    #           replace_key_with: "ReplaceKeyWith",
    #         },
    #       }
    #
    # @!attribute [rw] condition
    #   A container for describing a condition that must be met for the
    #   specified redirect to apply. For example, 1. If request is for pages
    #   in the `/docs` folder, redirect to the `/documents` folder. 2. If
    #   request results in HTTP error 4xx, redirect request to another host
    #   where you might process the error.
    #   @return [Types::Condition]
    #
    # @!attribute [rw] redirect
    #   Container for redirect information. You can redirect requests to
    #   another host, to another page, or with another protocol. In the
    #   event of an error, you can specify a different error code to return.
    #   @return [Types::Redirect]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RoutingRule AWS API Documentation
    #
    class RoutingRule < Struct.new(
      :condition,
      :redirect)
      include Aws::Structure
    end

    # Specifies lifecycle rules for an Amazon S3 bucket. For more
    # information, see [PUT Bucket lifecycle][1] in the *Amazon Simple
    # Storage Service API Reference*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html
    #
    # @note When making an API call, you may pass Rule
    #   data as a hash:
    #
    #       {
    #         expiration: {
    #           date: Time.now,
    #           days: 1,
    #           expired_object_delete_marker: false,
    #         },
    #         id: "ID",
    #         prefix: "Prefix", # required
    #         status: "Enabled", # required, accepts Enabled, Disabled
    #         transition: {
    #           date: Time.now,
    #           days: 1,
    #           storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #         },
    #         noncurrent_version_transition: {
    #           noncurrent_days: 1,
    #           storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #         },
    #         noncurrent_version_expiration: {
    #           noncurrent_days: 1,
    #         },
    #         abort_incomplete_multipart_upload: {
    #           days_after_initiation: 1,
    #         },
    #       }
    #
    # @!attribute [rw] expiration
    #   @return [Types::LifecycleExpiration]
    #
    # @!attribute [rw] id
    #   Unique identifier for the rule. The value can't be longer than 255
    #   characters.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   Object key prefix that identifies one or more objects to which this
    #   rule applies.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   If `Enabled`, the rule is currently being applied. If `Disabled`,
    #   the rule is not currently being applied.
    #   @return [String]
    #
    # @!attribute [rw] transition
    #   @return [Types::Transition]
    #
    # @!attribute [rw] noncurrent_version_transition
    #   @return [Types::NoncurrentVersionTransition]
    #
    # @!attribute [rw] noncurrent_version_expiration
    #   @return [Types::NoncurrentVersionExpiration]
    #
    # @!attribute [rw] abort_incomplete_multipart_upload
    #   @return [Types::AbortIncompleteMultipartUpload]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Rule AWS API Documentation
    #
    class Rule < Struct.new(
      :expiration,
      :id,
      :prefix,
      :status,
      :transition,
      :noncurrent_version_transition,
      :noncurrent_version_expiration,
      :abort_incomplete_multipart_upload)
      include Aws::Structure
    end

    # A container for object key name prefix and suffix filtering rules.
    #
    # @note When making an API call, you may pass S3KeyFilter
    #   data as a hash:
    #
    #       {
    #         filter_rules: [
    #           {
    #             name: "prefix", # accepts prefix, suffix
    #             value: "FilterRuleValue",
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] filter_rules
    #   @return [Array<Types::FilterRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/S3KeyFilter AWS API Documentation
    #
    class S3KeyFilter < Struct.new(
      :filter_rules)
      include Aws::Structure
    end

    # Describes an S3 location that will receive the results of the restore
    # request.
    #
    # @note When making an API call, you may pass S3Location
    #   data as a hash:
    #
    #       {
    #         bucket_name: "BucketName", # required
    #         prefix: "LocationPrefix", # required
    #         encryption: {
    #           encryption_type: "AES256", # required, accepts AES256, aws:kms
    #           kms_key_id: "SSEKMSKeyId",
    #           kms_context: "KMSContext",
    #         },
    #         canned_acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
    #         access_control_list: [
    #           {
    #             grantee: {
    #               display_name: "DisplayName",
    #               email_address: "EmailAddress",
    #               id: "ID",
    #               type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #               uri: "URI",
    #             },
    #             permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
    #           },
    #         ],
    #         tagging: {
    #           tag_set: [ # required
    #             {
    #               key: "ObjectKey", # required
    #               value: "Value", # required
    #             },
    #           ],
    #         },
    #         user_metadata: [
    #           {
    #             name: "MetadataKey",
    #             value: "MetadataValue",
    #           },
    #         ],
    #         storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
    #       }
    #
    # @!attribute [rw] bucket_name
    #   The name of the bucket where the restore results will be placed.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   The prefix that is prepended to the restore results for this
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] encryption
    #   @return [Types::Encryption]
    #
    # @!attribute [rw] canned_acl
    #   The canned ACL to apply to the restore results.
    #   @return [String]
    #
    # @!attribute [rw] access_control_list
    #   A list of grants that control access to the staged results.
    #   @return [Array<Types::Grant>]
    #
    # @!attribute [rw] tagging
    #   The tag-set that is applied to the restore results.
    #   @return [Types::Tagging]
    #
    # @!attribute [rw] user_metadata
    #   A list of metadata to store with the restore results in S3.
    #   @return [Array<Types::MetadataEntry>]
    #
    # @!attribute [rw] storage_class
    #   The class of storage used to store the restore results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/S3Location AWS API Documentation
    #
    class S3Location < Struct.new(
      :bucket_name,
      :prefix,
      :encryption,
      :canned_acl,
      :access_control_list,
      :tagging,
      :user_metadata,
      :storage_class)
      include Aws::Structure
    end

    # Specifies the use of SSE-KMS to encrypt delivered Inventory reports.
    #
    # @note When making an API call, you may pass SSEKMS
    #   data as a hash:
    #
    #       {
    #         key_id: "SSEKMSKeyId", # required
    #       }
    #
    # @!attribute [rw] key_id
    #   Specifies the ID of the AWS Key Management Service (KMS) master
    #   encryption key to use for encrypting Inventory reports.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SSEKMS AWS API Documentation
    #
    class SSEKMS < Struct.new(
      :key_id)
      include Aws::Structure
    end

    # Specifies the use of SSE-S3 to encrypt delivered Inventory reports.
    #
    # @api private
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SSES3 AWS API Documentation
    #
    class SSES3 < Aws::EmptyStructure; end

    # @!attribute [rw] payload
    #   @return [Types::SelectObjectContentEventStream]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContentOutput AWS API Documentation
    #
    class SelectObjectContentOutput < Struct.new(
      :payload)
      include Aws::Structure
    end

    # Request to filter the contents of an Amazon S3 object based on a
    # simple Structured Query Language (SQL) statement. In the request,
    # along with the SQL expression, you must specify a data serialization
    # format (JSON or CSV) of the object. Amazon S3 uses this to parse
    # object data into records. It returns only records that match the
    # specified SQL expression. You must also specify the data serialization
    # format for the response. For more information, see [S3Select API
    # Documentation][1].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html
    #
    # @note When making an API call, you may pass SelectObjectContentRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         key: "ObjectKey", # required
    #         sse_customer_algorithm: "SSECustomerAlgorithm",
    #         sse_customer_key: "SSECustomerKey",
    #         sse_customer_key_md5: "SSECustomerKeyMD5",
    #         expression: "Expression", # required
    #         expression_type: "SQL", # required, accepts SQL
    #         request_progress: {
    #           enabled: false,
    #         },
    #         input_serialization: { # required
    #           csv: {
    #             file_header_info: "USE", # accepts USE, IGNORE, NONE
    #             comments: "Comments",
    #             quote_escape_character: "QuoteEscapeCharacter",
    #             record_delimiter: "RecordDelimiter",
    #             field_delimiter: "FieldDelimiter",
    #             quote_character: "QuoteCharacter",
    #             allow_quoted_record_delimiter: false,
    #           },
    #           compression_type: "NONE", # accepts NONE, GZIP, BZIP2
    #           json: {
    #             type: "DOCUMENT", # accepts DOCUMENT, LINES
    #           },
    #           parquet: {
    #           },
    #         },
    #         output_serialization: { # required
    #           csv: {
    #             quote_fields: "ALWAYS", # accepts ALWAYS, ASNEEDED
    #             quote_escape_character: "QuoteEscapeCharacter",
    #             record_delimiter: "RecordDelimiter",
    #             field_delimiter: "FieldDelimiter",
    #             quote_character: "QuoteCharacter",
    #           },
    #           json: {
    #             record_delimiter: "RecordDelimiter",
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] bucket
    #   The S3 bucket.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   The object key.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   The SSE Algorithm used to encrypt the object. For more information,
    #   see [ Server-Side Encryption (Using Customer-Provided Encryption
    #   Keys][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key
    #   The SSE Customer Key. For more information, see [ Server-Side
    #   Encryption (Using Customer-Provided Encryption Keys][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   The SSE Customer Key MD5. For more information, see [ Server-Side
    #   Encryption (Using Customer-Provided Encryption Keys][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
    #   @return [String]
    #
    # @!attribute [rw] expression
    #   The expression that is used to query the object.
    #   @return [String]
    #
    # @!attribute [rw] expression_type
    #   The type of the provided expression (for example., SQL).
    #   @return [String]
    #
    # @!attribute [rw] request_progress
    #   Specifies if periodic request progress information should be
    #   enabled.
    #   @return [Types::RequestProgress]
    #
    # @!attribute [rw] input_serialization
    #   Describes the format of the data in the object that is being
    #   queried.
    #   @return [Types::InputSerialization]
    #
    # @!attribute [rw] output_serialization
    #   Describes the format of the data that you want Amazon S3 to return
    #   in response.
    #   @return [Types::OutputSerialization]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContentRequest AWS API Documentation
    #
    class SelectObjectContentRequest < Struct.new(
      :bucket,
      :key,
      :sse_customer_algorithm,
      :sse_customer_key,
      :sse_customer_key_md5,
      :expression,
      :expression_type,
      :request_progress,
      :input_serialization,
      :output_serialization)
      include Aws::Structure
    end

    # Describes the parameters for Select job types.
    #
    # @note When making an API call, you may pass SelectParameters
    #   data as a hash:
    #
    #       {
    #         input_serialization: { # required
    #           csv: {
    #             file_header_info: "USE", # accepts USE, IGNORE, NONE
    #             comments: "Comments",
    #             quote_escape_character: "QuoteEscapeCharacter",
    #             record_delimiter: "RecordDelimiter",
    #             field_delimiter: "FieldDelimiter",
    #             quote_character: "QuoteCharacter",
    #             allow_quoted_record_delimiter: false,
    #           },
    #           compression_type: "NONE", # accepts NONE, GZIP, BZIP2
    #           json: {
    #             type: "DOCUMENT", # accepts DOCUMENT, LINES
    #           },
    #           parquet: {
    #           },
    #         },
    #         expression_type: "SQL", # required, accepts SQL
    #         expression: "Expression", # required
    #         output_serialization: { # required
    #           csv: {
    #             quote_fields: "ALWAYS", # accepts ALWAYS, ASNEEDED
    #             quote_escape_character: "QuoteEscapeCharacter",
    #             record_delimiter: "RecordDelimiter",
    #             field_delimiter: "FieldDelimiter",
    #             quote_character: "QuoteCharacter",
    #           },
    #           json: {
    #             record_delimiter: "RecordDelimiter",
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] input_serialization
    #   Describes the serialization format of the object.
    #   @return [Types::InputSerialization]
    #
    # @!attribute [rw] expression_type
    #   The type of the provided expression (e.g., SQL).
    #   @return [String]
    #
    # @!attribute [rw] expression
    #   The expression that is used to query the object.
    #   @return [String]
    #
    # @!attribute [rw] output_serialization
    #   Describes how the results of the Select job are serialized.
    #   @return [Types::OutputSerialization]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectParameters AWS API Documentation
    #
    class SelectParameters < Struct.new(
      :input_serialization,
      :expression_type,
      :expression,
      :output_serialization)
      include Aws::Structure
    end

    # Describes the default server-side encryption to apply to new objects
    # in the bucket. If a PUT Object request doesn't specify any
    # server-side encryption, this default encryption will be applied. For
    # more information, see [PUT Bucket encryption][1] in the *Amazon Simple
    # Storage Service API Reference*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html
    #
    # @note When making an API call, you may pass ServerSideEncryptionByDefault
    #   data as a hash:
    #
    #       {
    #         sse_algorithm: "AES256", # required, accepts AES256, aws:kms
    #         kms_master_key_id: "SSEKMSKeyId",
    #       }
    #
    # @!attribute [rw] sse_algorithm
    #   Server-side encryption algorithm to use for the default encryption.
    #   @return [String]
    #
    # @!attribute [rw] kms_master_key_id
    #   KMS master key ID to use for the default encryption. This parameter
    #   is allowed if and only if `SSEAlgorithm` is set to `aws:kms`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ServerSideEncryptionByDefault AWS API Documentation
    #
    class ServerSideEncryptionByDefault < Struct.new(
      :sse_algorithm,
      :kms_master_key_id)
      include Aws::Structure
    end

    # Specifies the default server-side-encryption configuration.
    #
    # @note When making an API call, you may pass ServerSideEncryptionConfiguration
    #   data as a hash:
    #
    #       {
    #         rules: [ # required
    #           {
    #             apply_server_side_encryption_by_default: {
    #               sse_algorithm: "AES256", # required, accepts AES256, aws:kms
    #               kms_master_key_id: "SSEKMSKeyId",
    #             },
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] rules
    #   Container for information about a particular server-side encryption
    #   configuration rule.
    #   @return [Array<Types::ServerSideEncryptionRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ServerSideEncryptionConfiguration AWS API Documentation
    #
    class ServerSideEncryptionConfiguration < Struct.new(
      :rules)
      include Aws::Structure
    end

    # Specifies the default server-side encryption configuration.
    #
    # @note When making an API call, you may pass ServerSideEncryptionRule
    #   data as a hash:
    #
    #       {
    #         apply_server_side_encryption_by_default: {
    #           sse_algorithm: "AES256", # required, accepts AES256, aws:kms
    #           kms_master_key_id: "SSEKMSKeyId",
    #         },
    #       }
    #
    # @!attribute [rw] apply_server_side_encryption_by_default
    #   Specifies the default server-side encryption to apply to new objects
    #   in the bucket. If a PUT Object request doesn't specify any
    #   server-side encryption, this default encryption will be applied.
    #   @return [Types::ServerSideEncryptionByDefault]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ServerSideEncryptionRule AWS API Documentation
    #
    class ServerSideEncryptionRule < Struct.new(
      :apply_server_side_encryption_by_default)
      include Aws::Structure
    end

    # A container that describes additional filters for identifying the
    # source objects that you want to replicate. You can choose to enable or
    # disable the replication of these objects. Currently, Amazon S3
    # supports only the filter that you can specify for objects created with
    # server-side encryption using an AWS KMS-Managed Key (SSE-KMS).
    #
    # @note When making an API call, you may pass SourceSelectionCriteria
    #   data as a hash:
    #
    #       {
    #         sse_kms_encrypted_objects: {
    #           status: "Enabled", # required, accepts Enabled, Disabled
    #         },
    #       }
    #
    # @!attribute [rw] sse_kms_encrypted_objects
    #   A container for filter information for the selection of Amazon S3
    #   objects encrypted with AWS KMS. If you include
    #   `SourceSelectionCriteria` in the replication configuration, this
    #   element is required.
    #   @return [Types::SseKmsEncryptedObjects]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SourceSelectionCriteria AWS API Documentation
    #
    class SourceSelectionCriteria < Struct.new(
      :sse_kms_encrypted_objects)
      include Aws::Structure
    end

    # A container for filter information for the selection of S3 objects
    # encrypted with AWS KMS.
    #
    # @note When making an API call, you may pass SseKmsEncryptedObjects
    #   data as a hash:
    #
    #       {
    #         status: "Enabled", # required, accepts Enabled, Disabled
    #       }
    #
    # @!attribute [rw] status
    #   Specifies whether Amazon S3 replicates objects created with
    #   server-side encryption using an AWS KMS-managed key.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SseKmsEncryptedObjects AWS API Documentation
    #
    class SseKmsEncryptedObjects < Struct.new(
      :status)
      include Aws::Structure
    end

    # @!attribute [rw] bytes_scanned
    #   The total number of object bytes scanned.
    #   @return [Integer]
    #
    # @!attribute [rw] bytes_processed
    #   The total number of uncompressed object bytes processed.
    #   @return [Integer]
    #
    # @!attribute [rw] bytes_returned
    #   The total number of bytes of records payload data returned.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Stats AWS API Documentation
    #
    class Stats < Struct.new(
      :bytes_scanned,
      :bytes_processed,
      :bytes_returned)
      include Aws::Structure
    end

    # @!attribute [rw] details
    #   The Stats event details.
    #   @return [Types::Stats]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/StatsEvent AWS API Documentation
    #
    class StatsEvent < Struct.new(
      :details,
      :event_type)
      include Aws::Structure
    end

    # Specifies data related to access patterns to be collected and made
    # available to analyze the tradeoffs between different storage classes
    # for an Amazon S3 bucket.
    #
    # @note When making an API call, you may pass StorageClassAnalysis
    #   data as a hash:
    #
    #       {
    #         data_export: {
    #           output_schema_version: "V_1", # required, accepts V_1
    #           destination: { # required
    #             s3_bucket_destination: { # required
    #               format: "CSV", # required, accepts CSV
    #               bucket_account_id: "AccountId",
    #               bucket: "BucketName", # required
    #               prefix: "Prefix",
    #             },
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] data_export
    #   Specifies how data related to the storage class analysis for an
    #   Amazon S3 bucket should be exported.
    #   @return [Types::StorageClassAnalysisDataExport]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/StorageClassAnalysis AWS API Documentation
    #
    class StorageClassAnalysis < Struct.new(
      :data_export)
      include Aws::Structure
    end

    # @note When making an API call, you may pass StorageClassAnalysisDataExport
    #   data as a hash:
    #
    #       {
    #         output_schema_version: "V_1", # required, accepts V_1
    #         destination: { # required
    #           s3_bucket_destination: { # required
    #             format: "CSV", # required, accepts CSV
    #             bucket_account_id: "AccountId",
    #             bucket: "BucketName", # required
    #             prefix: "Prefix",
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] output_schema_version
    #   The version of the output schema to use when exporting data. Must be
    #   `V_1`.
    #   @return [String]
    #
    # @!attribute [rw] destination
    #   The place to store the data for an analysis.
    #   @return [Types::AnalyticsExportDestination]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/StorageClassAnalysisDataExport AWS API Documentation
    #
    class StorageClassAnalysisDataExport < Struct.new(
      :output_schema_version,
      :destination)
      include Aws::Structure
    end

    # @note When making an API call, you may pass Tag
    #   data as a hash:
    #
    #       {
    #         key: "ObjectKey", # required
    #         value: "Value", # required
    #       }
    #
    # @!attribute [rw] key
    #   Name of the tag.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   Value of the tag.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Tag AWS API Documentation
    #
    class Tag < Struct.new(
      :key,
      :value)
      include Aws::Structure
    end

    # @note When making an API call, you may pass Tagging
    #   data as a hash:
    #
    #       {
    #         tag_set: [ # required
    #           {
    #             key: "ObjectKey", # required
    #             value: "Value", # required
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] tag_set
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Tagging AWS API Documentation
    #
    class Tagging < Struct.new(
      :tag_set)
      include Aws::Structure
    end

    # @note When making an API call, you may pass TargetGrant
    #   data as a hash:
    #
    #       {
    #         grantee: {
    #           display_name: "DisplayName",
    #           email_address: "EmailAddress",
    #           id: "ID",
    #           type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
    #           uri: "URI",
    #         },
    #         permission: "FULL_CONTROL", # accepts FULL_CONTROL, READ, WRITE
    #       }
    #
    # @!attribute [rw] grantee
    #   @return [Types::Grantee]
    #
    # @!attribute [rw] permission
    #   Logging permissions assigned to the Grantee for the bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/TargetGrant AWS API Documentation
    #
    class TargetGrant < Struct.new(
      :grantee,
      :permission)
      include Aws::Structure
    end

    # A container for specifying the configuration for publication of
    # messages to an Amazon Simple Notification Service (Amazon SNS) topic
    # when Amazon S3 detects specified events.
    #
    # @note When making an API call, you may pass TopicConfiguration
    #   data as a hash:
    #
    #       {
    #         id: "NotificationId",
    #         topic_arn: "TopicArn", # required
    #         events: ["s3:ReducedRedundancyLostObject"], # required, accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #         filter: {
    #           key: {
    #             filter_rules: [
    #               {
    #                 name: "prefix", # accepts prefix, suffix
    #                 value: "FilterRuleValue",
    #               },
    #             ],
    #           },
    #         },
    #       }
    #
    # @!attribute [rw] id
    #   An optional unique identifier for configurations in a notification
    #   configuration. If you don't provide one, Amazon S3 will assign an
    #   ID.
    #   @return [String]
    #
    # @!attribute [rw] topic_arn
    #   The Amazon Resource Name (ARN) of the Amazon SNS topic to which
    #   Amazon S3 publishes a message when it detects events of the
    #   specified type.
    #   @return [String]
    #
    # @!attribute [rw] events
    #   The Amazon S3 bucket event about which to send notifications. For
    #   more information, see [Supported Event Types][1] in the *Amazon
    #   Simple Storage Service Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] filter
    #   @return [Types::NotificationConfigurationFilter]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/TopicConfiguration AWS API Documentation
    #
    class TopicConfiguration < Struct.new(
      :id,
      :topic_arn,
      :events,
      :filter)
      include Aws::Structure
    end

    # @note When making an API call, you may pass TopicConfigurationDeprecated
    #   data as a hash:
    #
    #       {
    #         id: "NotificationId",
    #         events: ["s3:ReducedRedundancyLostObject"], # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #         event: "s3:ReducedRedundancyLostObject", # accepts s3:ReducedRedundancyLostObject, s3:ObjectCreated:*, s3:ObjectCreated:Put, s3:ObjectCreated:Post, s3:ObjectCreated:Copy, s3:ObjectCreated:CompleteMultipartUpload, s3:ObjectRemoved:*, s3:ObjectRemoved:Delete, s3:ObjectRemoved:DeleteMarkerCreated, s3:ObjectRestore:Post, s3:ObjectRestore:Completed
    #         topic: "TopicArn",
    #       }
    #
    # @!attribute [rw] id
    #   An optional unique identifier for configurations in a notification
    #   configuration. If you don't provide one, Amazon S3 will assign an
    #   ID.
    #   @return [String]
    #
    # @!attribute [rw] events
    #   @return [Array<String>]
    #
    # @!attribute [rw] event
    #   Bucket event for which to send notifications.
    #   @return [String]
    #
    # @!attribute [rw] topic
    #   Amazon SNS topic to which Amazon S3 will publish a message to report
    #   the specified events for the bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/TopicConfigurationDeprecated AWS API Documentation
    #
    class TopicConfigurationDeprecated < Struct.new(
      :id,
      :events,
      :event,
      :topic)
      include Aws::Structure
    end

    # Specifies when an object transitions to a specified storage class.
    #
    # @note When making an API call, you may pass Transition
    #   data as a hash:
    #
    #       {
    #         date: Time.now,
    #         days: 1,
    #         storage_class: "GLACIER", # accepts GLACIER, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, DEEP_ARCHIVE
    #       }
    #
    # @!attribute [rw] date
    #   Indicates when objects are transitioned to the specified storage
    #   class. The date value must be in ISO 8601 format. The time is always
    #   midnight UTC.
    #   @return [Time]
    #
    # @!attribute [rw] days
    #   Indicates the number of days after creation when objects are
    #   transitioned to the specified storage class. The value must be a
    #   positive integer.
    #   @return [Integer]
    #
    # @!attribute [rw] storage_class
    #   The storage class to which you want the object to transition.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/Transition AWS API Documentation
    #
    class Transition < Struct.new(
      :date,
      :days,
      :storage_class)
      include Aws::Structure
    end

    # @!attribute [rw] copy_source_version_id
    #   The version of the source object that was copied, if you have
    #   enabled versioning on the source bucket.
    #   @return [String]
    #
    # @!attribute [rw] copy_part_result
    #   @return [Types::CopyPartResult]
    #
    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header confirming the
    #   encryption algorithm used.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header to provide
    #   round trip message integrity verification of the customer-provided
    #   encryption key.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   If present, specifies the ID of the AWS Key Management Service (KMS)
    #   master encryption key that was used for the object.
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartCopyOutput AWS API Documentation
    #
    class UploadPartCopyOutput < Struct.new(
      :copy_source_version_id,
      :copy_part_result,
      :server_side_encryption,
      :sse_customer_algorithm,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass UploadPartCopyRequest
    #   data as a hash:
    #
    #       {
    #         bucket: "BucketName", # required
    #         copy_source: "CopySource", # required
    #         copy_source_if_match: "CopySourceIfMatch",
    #         copy_source_if_modified_since: Time.now,
    #         copy_source_if_none_match: "CopySourceIfNoneMatch",
    #         copy_source_if_unmodified_since: Time.now,
    #         copy_source_range: "CopySourceRange",
    #         key: "ObjectKey", # required
    #         part_number: 1, # required
    #         upload_id: "MultipartUploadId", # required
    #         sse_customer_algorithm: "SSECustomerAlgorithm",
    #         sse_customer_key: "SSECustomerKey",
    #         sse_customer_key_md5: "SSECustomerKeyMD5",
    #         copy_source_sse_customer_algorithm: "CopySourceSSECustomerAlgorithm",
    #         copy_source_sse_customer_key: "CopySourceSSECustomerKey",
    #         copy_source_sse_customer_key_md5: "CopySourceSSECustomerKeyMD5",
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] bucket
    #   @return [String]
    #
    # @!attribute [rw] copy_source
    #   The name of the source bucket and key name of the source object,
    #   separated by a slash (/). Must be URL-encoded.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_if_match
    #   Copies the object if its entity tag (ETag) matches the specified
    #   tag.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_if_modified_since
    #   Copies the object if it has been modified since the specified time.
    #   @return [Time]
    #
    # @!attribute [rw] copy_source_if_none_match
    #   Copies the object if its entity tag (ETag) is different than the
    #   specified ETag.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_if_unmodified_since
    #   Copies the object if it hasn't been modified since the specified
    #   time.
    #   @return [Time]
    #
    # @!attribute [rw] copy_source_range
    #   The range of bytes to copy from the source object. The range value
    #   must use the form bytes=first-last, where the first and last are the
    #   zero-based byte offsets to copy. For example, bytes=0-9 indicates
    #   that you want to copy the first ten bytes of the source. You can
    #   copy a range only if the source object is greater than 5 MB.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   @return [String]
    #
    # @!attribute [rw] part_number
    #   Part number of part being copied. This is a positive integer between
    #   1 and 10,000.
    #   @return [Integer]
    #
    # @!attribute [rw] upload_id
    #   Upload ID identifying the multipart upload whose part is being
    #   copied.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   Specifies the algorithm to use to when encrypting the object (e.g.,
    #   AES256).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key
    #   Specifies the customer-provided encryption key for Amazon S3 to use
    #   in encrypting data. This value is used to store the object and then
    #   it is discarded; Amazon does not store the encryption key. The key
    #   must be appropriate for use with the algorithm specified in the
    #   x-amz-server-side​-encryption​-customer-algorithm header. This must
    #   be the same encryption key specified in the initiate multipart
    #   upload request.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   Specifies the 128-bit MD5 digest of the encryption key according to
    #   RFC 1321. Amazon S3 uses this header for a message integrity check
    #   to ensure the encryption key was transmitted without error.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_sse_customer_algorithm
    #   Specifies the algorithm to use when decrypting the source object
    #   (e.g., AES256).
    #   @return [String]
    #
    # @!attribute [rw] copy_source_sse_customer_key
    #   Specifies the customer-provided encryption key for Amazon S3 to use
    #   to decrypt the source object. The encryption key provided in this
    #   header must be one that was used when the source object was created.
    #   @return [String]
    #
    # @!attribute [rw] copy_source_sse_customer_key_md5
    #   Specifies the 128-bit MD5 digest of the encryption key according to
    #   RFC 1321. Amazon S3 uses this header for a message integrity check
    #   to ensure the encryption key was transmitted without error.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartCopyRequest AWS API Documentation
    #
    class UploadPartCopyRequest < Struct.new(
      :bucket,
      :copy_source,
      :copy_source_if_match,
      :copy_source_if_modified_since,
      :copy_source_if_none_match,
      :copy_source_if_unmodified_since,
      :copy_source_range,
      :key,
      :part_number,
      :upload_id,
      :sse_customer_algorithm,
      :sse_customer_key,
      :sse_customer_key_md5,
      :copy_source_sse_customer_algorithm,
      :copy_source_sse_customer_key,
      :copy_source_sse_customer_key_md5,
      :request_payer)
      include Aws::Structure
    end

    # @!attribute [rw] server_side_encryption
    #   The Server-side encryption algorithm used when storing this object
    #   in S3 (e.g., AES256, aws:kms).
    #   @return [String]
    #
    # @!attribute [rw] etag
    #   Entity tag for the uploaded object.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header confirming the
    #   encryption algorithm used.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   If server-side encryption with a customer-provided encryption key
    #   was requested, the response will include this header to provide
    #   round trip message integrity verification of the customer-provided
    #   encryption key.
    #   @return [String]
    #
    # @!attribute [rw] ssekms_key_id
    #   If present, specifies the ID of the AWS Key Management Service (KMS)
    #   master encryption key that was used for the object.
    #   @return [String]
    #
    # @!attribute [rw] request_charged
    #   If present, indicates that the requester was successfully charged
    #   for the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartOutput AWS API Documentation
    #
    class UploadPartOutput < Struct.new(
      :server_side_encryption,
      :etag,
      :sse_customer_algorithm,
      :sse_customer_key_md5,
      :ssekms_key_id,
      :request_charged)
      include Aws::Structure
    end

    # @note When making an API call, you may pass UploadPartRequest
    #   data as a hash:
    #
    #       {
    #         body: source_file,
    #         bucket: "BucketName", # required
    #         content_length: 1,
    #         content_md5: "ContentMD5",
    #         key: "ObjectKey", # required
    #         part_number: 1, # required
    #         upload_id: "MultipartUploadId", # required
    #         sse_customer_algorithm: "SSECustomerAlgorithm",
    #         sse_customer_key: "SSECustomerKey",
    #         sse_customer_key_md5: "SSECustomerKeyMD5",
    #         request_payer: "requester", # accepts requester
    #       }
    #
    # @!attribute [rw] body
    #   Object data.
    #   @return [IO]
    #
    # @!attribute [rw] bucket
    #   Name of the bucket to which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] content_length
    #   Size of the body in bytes. This parameter is useful when the size of
    #   the body cannot be determined automatically.
    #   @return [Integer]
    #
    # @!attribute [rw] content_md5
    #   The base64-encoded 128-bit MD5 digest of the part data. This
    #   parameter is auto-populated when using the command from the CLI.
    #   This parameted is required if object lock parameters are specified.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   Object key for which the multipart upload was initiated.
    #   @return [String]
    #
    # @!attribute [rw] part_number
    #   Part number of part being uploaded. This is a positive integer
    #   between 1 and 10,000.
    #   @return [Integer]
    #
    # @!attribute [rw] upload_id
    #   Upload ID identifying the multipart upload whose part is being
    #   uploaded.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_algorithm
    #   Specifies the algorithm to use to when encrypting the object (e.g.,
    #   AES256).
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key
    #   Specifies the customer-provided encryption key for Amazon S3 to use
    #   in encrypting data. This value is used to store the object and then
    #   it is discarded; Amazon does not store the encryption key. The key
    #   must be appropriate for use with the algorithm specified in the
    #   x-amz-server-side​-encryption​-customer-algorithm header. This must
    #   be the same encryption key specified in the initiate multipart
    #   upload request.
    #   @return [String]
    #
    # @!attribute [rw] sse_customer_key_md5
    #   Specifies the 128-bit MD5 digest of the encryption key according to
    #   RFC 1321. Amazon S3 uses this header for a message integrity check
    #   to ensure the encryption key was transmitted without error.
    #   @return [String]
    #
    # @!attribute [rw] request_payer
    #   Confirms that the requester knows that she or he will be charged for
    #   the request. Bucket owners need not specify this parameter in their
    #   requests. Documentation on downloading objects from requester pays
    #   buckets can be found at
    #   http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartRequest AWS API Documentation
    #
    class UploadPartRequest < Struct.new(
      :body,
      :bucket,
      :content_length,
      :content_md5,
      :key,
      :part_number,
      :upload_id,
      :sse_customer_algorithm,
      :sse_customer_key,
      :sse_customer_key_md5,
      :request_payer)
      include Aws::Structure
    end

    # Describes the versioning state of an Amazon S3 bucket. For more
    # information, see [PUT Bucket versioning][1] in the *Amazon Simple
    # Storage Service API Reference*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html
    #
    # @note When making an API call, you may pass VersioningConfiguration
    #   data as a hash:
    #
    #       {
    #         mfa_delete: "Enabled", # accepts Enabled, Disabled
    #         status: "Enabled", # accepts Enabled, Suspended
    #       }
    #
    # @!attribute [rw] mfa_delete
    #   Specifies whether MFA delete is enabled in the bucket versioning
    #   configuration. This element is only returned if the bucket has been
    #   configured with MFA delete. If the bucket has never been so
    #   configured, this element is not returned.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The versioning state of the bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/VersioningConfiguration AWS API Documentation
    #
    class VersioningConfiguration < Struct.new(
      :mfa_delete,
      :status)
      include Aws::Structure
    end

    # Specifies website configuration parameters for an Amazon S3 bucket.
    #
    # @note When making an API call, you may pass WebsiteConfiguration
    #   data as a hash:
    #
    #       {
    #         error_document: {
    #           key: "ObjectKey", # required
    #         },
    #         index_document: {
    #           suffix: "Suffix", # required
    #         },
    #         redirect_all_requests_to: {
    #           host_name: "HostName", # required
    #           protocol: "http", # accepts http, https
    #         },
    #         routing_rules: [
    #           {
    #             condition: {
    #               http_error_code_returned_equals: "HttpErrorCodeReturnedEquals",
    #               key_prefix_equals: "KeyPrefixEquals",
    #             },
    #             redirect: { # required
    #               host_name: "HostName",
    #               http_redirect_code: "HttpRedirectCode",
    #               protocol: "http", # accepts http, https
    #               replace_key_prefix_with: "ReplaceKeyPrefixWith",
    #               replace_key_with: "ReplaceKeyWith",
    #             },
    #           },
    #         ],
    #       }
    #
    # @!attribute [rw] error_document
    #   The name of the error document for the website.
    #   @return [Types::ErrorDocument]
    #
    # @!attribute [rw] index_document
    #   The name of the index document for the website.
    #   @return [Types::IndexDocument]
    #
    # @!attribute [rw] redirect_all_requests_to
    #   The redirect behavior for every request to this bucket's website
    #   endpoint.
    #
    #   If you specify this property, you can't specify any other property.
    #   @return [Types::RedirectAllRequestsTo]
    #
    # @!attribute [rw] routing_rules
    #   Rules that define when a redirect is applied and the redirect
    #   behavior.
    #   @return [Array<Types::RoutingRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/WebsiteConfiguration AWS API Documentation
    #
    class WebsiteConfiguration < Struct.new(
      :error_document,
      :index_document,
      :redirect_all_requests_to,
      :routing_rules)
      include Aws::Structure
    end

    # EventStream is an Enumerator of Events.
    #  #event_types #=> Array, returns all modeled event types in the stream
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContentEventStream AWS API Documentation
    #
    class SelectObjectContentEventStream < Enumerator

      def event_types
        [
          :records,
          :stats,
          :progress,
          :cont,
          :end
        ]
      end

    end

  end
end
