R/s3_operations.R

Defines functions s3_upload_part_copy s3_upload_part s3_select_object_content s3_restore_object s3_put_public_access_block s3_put_object_tagging s3_put_object_retention s3_put_object_lock_configuration s3_put_object_legal_hold s3_put_object_acl s3_put_object s3_put_bucket_website s3_put_bucket_versioning s3_put_bucket_tagging s3_put_bucket_request_payment s3_put_bucket_replication s3_put_bucket_policy s3_put_bucket_ownership_controls s3_put_bucket_notification_configuration s3_put_bucket_notification s3_put_bucket_metrics_configuration s3_put_bucket_logging s3_put_bucket_lifecycle_configuration s3_put_bucket_lifecycle s3_put_bucket_inventory_configuration s3_put_bucket_intelligent_tiering_configuration s3_put_bucket_encryption s3_put_bucket_cors s3_put_bucket_analytics_configuration s3_put_bucket_acl s3_put_bucket_accelerate_configuration s3_list_parts s3_list_objects_v2 s3_list_objects s3_list_object_versions s3_list_multipart_uploads s3_list_buckets s3_list_bucket_metrics_configurations s3_list_bucket_inventory_configurations s3_list_bucket_intelligent_tiering_configurations s3_list_bucket_analytics_configurations s3_head_object s3_head_bucket s3_get_public_access_block s3_get_object_torrent s3_get_object_tagging s3_get_object_retention s3_get_object_lock_configuration s3_get_object_legal_hold s3_get_object_acl s3_get_object s3_get_bucket_website s3_get_bucket_versioning s3_get_bucket_tagging s3_get_bucket_request_payment s3_get_bucket_replication s3_get_bucket_policy_status s3_get_bucket_policy s3_get_bucket_ownership_controls s3_get_bucket_notification_configuration s3_get_bucket_notification s3_get_bucket_metrics_configuration s3_get_bucket_logging s3_get_bucket_location s3_get_bucket_lifecycle_configuration s3_get_bucket_lifecycle s3_get_bucket_inventory_configuration s3_get_bucket_intelligent_tiering_configuration s3_get_bucket_encryption s3_get_bucket_cors s3_get_bucket_analytics_configuration s3_get_bucket_acl s3_get_bucket_accelerate_configuration s3_delete_public_access_block s3_delete_objects s3_delete_object_tagging s3_delete_object s3_delete_bucket_website s3_delete_bucket_tagging s3_delete_bucket_replication s3_delete_bucket_policy s3_delete_bucket_ownership_controls s3_delete_bucket_metrics_configuration s3_delete_bucket_lifecycle s3_delete_bucket_inventory_configuration s3_delete_bucket_intelligent_tiering_configuration s3_delete_bucket_encryption s3_delete_bucket_cors s3_delete_bucket_analytics_configuration s3_delete_bucket s3_create_multipart_upload s3_create_bucket s3_copy_object s3_complete_multipart_upload s3_abort_multipart_upload

Documented in s3_abort_multipart_upload s3_complete_multipart_upload s3_copy_object s3_create_bucket s3_create_multipart_upload s3_delete_bucket s3_delete_bucket_analytics_configuration s3_delete_bucket_cors s3_delete_bucket_encryption s3_delete_bucket_intelligent_tiering_configuration s3_delete_bucket_inventory_configuration s3_delete_bucket_lifecycle s3_delete_bucket_metrics_configuration s3_delete_bucket_ownership_controls s3_delete_bucket_policy s3_delete_bucket_replication s3_delete_bucket_tagging s3_delete_bucket_website s3_delete_object s3_delete_objects s3_delete_object_tagging s3_delete_public_access_block s3_get_bucket_accelerate_configuration s3_get_bucket_acl s3_get_bucket_analytics_configuration s3_get_bucket_cors s3_get_bucket_encryption s3_get_bucket_intelligent_tiering_configuration s3_get_bucket_inventory_configuration s3_get_bucket_lifecycle s3_get_bucket_lifecycle_configuration s3_get_bucket_location s3_get_bucket_logging s3_get_bucket_metrics_configuration s3_get_bucket_notification s3_get_bucket_notification_configuration s3_get_bucket_ownership_controls s3_get_bucket_policy s3_get_bucket_policy_status s3_get_bucket_replication s3_get_bucket_request_payment s3_get_bucket_tagging s3_get_bucket_versioning s3_get_bucket_website s3_get_object s3_get_object_acl s3_get_object_legal_hold s3_get_object_lock_configuration s3_get_object_retention s3_get_object_tagging s3_get_object_torrent s3_get_public_access_block s3_head_bucket s3_head_object s3_list_bucket_analytics_configurations s3_list_bucket_intelligent_tiering_configurations s3_list_bucket_inventory_configurations s3_list_bucket_metrics_configurations s3_list_buckets s3_list_multipart_uploads s3_list_objects s3_list_objects_v2 s3_list_object_versions s3_list_parts s3_put_bucket_accelerate_configuration s3_put_bucket_acl s3_put_bucket_analytics_configuration s3_put_bucket_cors s3_put_bucket_encryption s3_put_bucket_intelligent_tiering_configuration s3_put_bucket_inventory_configuration s3_put_bucket_lifecycle s3_put_bucket_lifecycle_configuration s3_put_bucket_logging s3_put_bucket_metrics_configuration s3_put_bucket_notification s3_put_bucket_notification_configuration s3_put_bucket_ownership_controls s3_put_bucket_policy s3_put_bucket_replication s3_put_bucket_request_payment s3_put_bucket_tagging s3_put_bucket_versioning s3_put_bucket_website s3_put_object s3_put_object_acl s3_put_object_legal_hold s3_put_object_lock_configuration s3_put_object_retention s3_put_object_tagging s3_put_public_access_block s3_restore_object s3_select_object_content s3_upload_part s3_upload_part_copy

# This file is generated by make.paws. Please do not edit here.
#' @importFrom paws.common get_config new_operation new_request send_request
#' @include s3_service.R
NULL

#' This operation aborts a multipart upload
#'
#' @description
#' This operation aborts a multipart upload. After a multipart upload is
#' aborted, no additional parts can be uploaded using that upload ID. The
#' storage consumed by any previously uploaded parts will be freed.
#' However, if any part uploads are currently in progress, those part
#' uploads might or might not succeed. As a result, it might be necessary
#' to abort a given multipart upload multiple times in order to completely
#' free all storage consumed by all parts.
#' 
#' To verify that all parts have been removed, so you don't get charged for
#' the part storage, you should call the [`list_parts`][s3_list_parts]
#' operation and ensure that the parts list is empty.
#' 
#' For information about permissions required to use the multipart upload
#' API, see [Multipart Upload API and
#' Permissions](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html).
#' 
#' The following operations are related to
#' [`abort_multipart_upload`][s3_abort_multipart_upload]:
#' 
#' -   [`create_multipart_upload`][s3_create_multipart_upload]
#' 
#' -   [`upload_part`][s3_upload_part]
#' 
#' -   [`complete_multipart_upload`][s3_complete_multipart_upload]
#' 
#' -   [`list_parts`][s3_list_parts]
#' 
#' -   [`list_multipart_uploads`][s3_list_multipart_uploads]
#'
#' @usage
#' s3_abort_multipart_upload(Bucket, Key, UploadId, RequestPayer,
#'   ExpectedBucketOwner)
#'
#' @param Bucket [required] The bucket name to which the upload was taking place.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Key [required] Key of the object for which the multipart upload was initiated.
#' @param UploadId [required] Upload ID that identifies the multipart upload.
#' @param RequestPayer 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   RequestCharged = "requester"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$abort_multipart_upload(
#'   Bucket = "string",
#'   Key = "string",
#'   UploadId = "string",
#'   RequestPayer = "requester",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example aborts a multipart upload.
#' svc$abort_multipart_upload(
#'   Bucket = "examplebucket",
#'   Key = "bigobject",
#'   UploadId = "xadcOB_7YPBOJuoFiQ9cz4P3Pe6FIZwO4f7wN93uHsNBEw97pl5eNwzExg0LA..."
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_abort_multipart_upload
s3_abort_multipart_upload <- function(Bucket, Key, UploadId, RequestPayer = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "AbortMultipartUpload",
    http_method = "DELETE",
    http_path = "/{Bucket}/{Key+}",
    paginator = list()
  )
  input <- .s3$abort_multipart_upload_input(Bucket = Bucket, Key = Key, UploadId = UploadId, RequestPayer = RequestPayer, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$abort_multipart_upload_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$abort_multipart_upload <- s3_abort_multipart_upload

#' Completes a multipart upload by assembling previously uploaded parts
#'
#' @description
#' Completes a multipart upload by assembling previously uploaded parts.
#' 
#' You first initiate the multipart upload and then upload all parts using
#' the [`upload_part`][s3_upload_part] operation. After successfully
#' uploading all relevant parts of an upload, you call this operation to
#' complete the upload. Upon receiving this request, Amazon S3 concatenates
#' all the parts in ascending order by part number to create a new object.
#' In the Complete Multipart Upload request, you must provide the parts
#' list. You must ensure that the parts list is complete. This operation
#' concatenates the parts that you provide in the list. For each part in
#' the list, you must provide the part number and the `ETag` value,
#' returned after that part was uploaded.
#' 
#' Processing of a Complete Multipart Upload request could take several
#' minutes to complete. After Amazon S3 begins processing the request, it
#' sends an HTTP response header that specifies a 200 OK response. While
#' processing is in progress, Amazon S3 periodically sends white space
#' characters to keep the connection from timing out. Because a request
#' could fail after the initial 200 OK response has been sent, it is
#' important that you check the response body to determine whether the
#' request succeeded.
#' 
#' Note that if [`complete_multipart_upload`][s3_complete_multipart_upload]
#' fails, applications should be prepared to retry the failed requests. For
#' more information, see [Amazon S3 Error Best
#' Practices](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ErrorBestPractices.html).
#' 
#' For more information about multipart uploads, see [Uploading Objects
#' Using Multipart
#' Upload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html).
#' 
#' For information about permissions required to use the multipart upload
#' API, see [Multipart Upload API and
#' Permissions](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html).
#' 
#' [`complete_multipart_upload`][s3_complete_multipart_upload] has the
#' following special errors:
#' 
#' -   Error code: `EntityTooSmall`
#' 
#'     -   Description: Your proposed upload is smaller than the minimum
#'         allowed object size. Each part must be at least 5 MB in size,
#'         except the last part.
#' 
#'     -   400 Bad Request
#' 
#' -   Error code: `InvalidPart`
#' 
#'     -   Description: One or more of the specified parts could not be
#'         found. The part might not have been uploaded, or the specified
#'         entity tag might not have matched the part's entity tag.
#' 
#'     -   400 Bad Request
#' 
#' -   Error code: `InvalidPartOrder`
#' 
#'     -   Description: The list of parts was not in ascending order. The
#'         parts list must be specified in order by part number.
#' 
#'     -   400 Bad Request
#' 
#' -   Error code: `NoSuchUpload`
#' 
#'     -   Description: The specified multipart upload does not exist. The
#'         upload ID might be invalid, or the multipart upload might have
#'         been aborted or completed.
#' 
#'     -   404 Not Found
#' 
#' The following operations are related to
#' [`complete_multipart_upload`][s3_complete_multipart_upload]:
#' 
#' -   [`create_multipart_upload`][s3_create_multipart_upload]
#' 
#' -   [`upload_part`][s3_upload_part]
#' 
#' -   [`abort_multipart_upload`][s3_abort_multipart_upload]
#' 
#' -   [`list_parts`][s3_list_parts]
#' 
#' -   [`list_multipart_uploads`][s3_list_multipart_uploads]
#'
#' @usage
#' s3_complete_multipart_upload(Bucket, Key, MultipartUpload, UploadId,
#'   RequestPayer, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; Name of the bucket to which the multipart upload was initiated.
#' @param Key &#91;required&#93; Object key for which the multipart upload was initiated.
#' @param MultipartUpload The container for the multipart upload request information.
#' @param UploadId &#91;required&#93; ID for the initiated multipart upload.
#' @param RequestPayer 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Location = "string",
#'   Bucket = "string",
#'   Key = "string",
#'   Expiration = "string",
#'   ETag = "string",
#'   ServerSideEncryption = "AES256"|"aws:kms",
#'   VersionId = "string",
#'   SSEKMSKeyId = "string",
#'   BucketKeyEnabled = TRUE|FALSE,
#'   RequestCharged = "requester"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$complete_multipart_upload(
#'   Bucket = "string",
#'   Key = "string",
#'   MultipartUpload = list(
#'     Parts = list(
#'       list(
#'         ETag = "string",
#'         PartNumber = 123
#'       )
#'     )
#'   ),
#'   UploadId = "string",
#'   RequestPayer = "requester",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example completes a multipart upload.
#' svc$complete_multipart_upload(
#'   Bucket = "examplebucket",
#'   Key = "bigobject",
#'   MultipartUpload = list(
#'     Parts = list(
#'       list(
#'         ETag = ""d8c2eafd90c266e19ab9dcacc479f8af"",
#'         PartNumber = "1"
#'       ),
#'       list(
#'         ETag = ""d8c2eafd90c266e19ab9dcacc479f8af"",
#'         PartNumber = "2"
#'       )
#'     )
#'   ),
#'   UploadId = "7YPBOJuoFiQ9cz4P3Pe6FIZwO4f7wN93uHsNBEw97pl5eNwzExg0LAT2dUN91..."
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_complete_multipart_upload
s3_complete_multipart_upload <- function(Bucket, Key, MultipartUpload = NULL, UploadId, RequestPayer = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "CompleteMultipartUpload",
    http_method = "POST",
    http_path = "/{Bucket}/{Key+}",
    paginator = list()
  )
  input <- .s3$complete_multipart_upload_input(Bucket = Bucket, Key = Key, MultipartUpload = MultipartUpload, UploadId = UploadId, RequestPayer = RequestPayer, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$complete_multipart_upload_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$complete_multipart_upload <- s3_complete_multipart_upload

#' Creates a copy of an object that is already stored in Amazon S3
#'
#' @description
#' Creates a copy of an object that is already stored in Amazon S3.
#' 
#' You can store individual objects of up to 5 TB in Amazon S3. You create
#' a copy of your object up to 5 GB in size in a single atomic operation
#' using this API. However, to copy an object greater than 5 GB, you must
#' use the multipart upload Upload Part - Copy API. For more information,
#' see [Copy Object Using the REST Multipart Upload
#' API](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CopyingObjctsMPUapi.html).
#' 
#' All copy requests must be authenticated. Additionally, you must have
#' *read* access to the source object and *write* access to the destination
#' bucket. For more information, see [REST
#' Authentication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html).
#' Both the Region that you want to copy the object from and the Region
#' that you want to copy the object to must be enabled for your account.
#' 
#' A copy request might return an error when Amazon S3 receives the copy
#' request or while Amazon S3 is copying the files. If the error occurs
#' before the copy operation starts, you receive a standard Amazon S3
#' error. If the error occurs during the copy operation, the error response
#' is embedded in the `200 OK` response. This means that a `200 OK`
#' response can contain either a success or an error. Design your
#' application to parse the contents of the response and handle it
#' appropriately.
#' 
#' If the copy is successful, you receive a response with information about
#' the copied object.
#' 
#' If the request is an HTTP 1.1 request, the response is chunk encoded. If
#' it were not, it would not contain the content-length, and you would need
#' to read the entire body.
#' 
#' The copy request charge is based on the storage class and Region that
#' you specify for the destination object. For pricing information, see
#' [Amazon S3 pricing](https://aws.amazon.com/s3/pricing/).
#' 
#' Amazon S3 transfer acceleration does not support cross-Region copies. If
#' you request a cross-Region copy using a transfer acceleration endpoint,
#' you get a 400 `Bad Request` error. For more information, see [Transfer
#' Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html).
#' 
#' **Metadata**
#' 
#' When copying an object, you can preserve all metadata (default) or
#' specify new metadata. However, the ACL is not preserved and is set to
#' private for the user making the request. To override the default ACL
#' setting, specify a new ACL when generating a copy request. For more
#' information, see [Using
#' ACLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl_overview.html).
#' 
#' To specify whether you want the object metadata copied from the source
#' object or replaced with metadata provided in the request, you can
#' optionally add the `x-amz-metadata-directive` header. When you grant
#' permissions, you can use the `s3:x-amz-metadata-directive` condition key
#' to enforce certain metadata behavior when objects are uploaded. For more
#' information, see [Specifying Conditions in a
#' Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html)
#' in the *Amazon S3 Developer Guide*. For a complete list of Amazon
#' S3-specific condition keys, see [Actions, Resources, and Condition Keys
#' for Amazon
#' S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/list_amazons3.html).
#' 
#' **`x-amz-copy-source-if` Headers**
#' 
#' To only copy an object under certain conditions, such as whether the
#' `Etag` matches or whether the object was modified before or after a
#' specified date, use the following request parameters:
#' 
#' -   `x-amz-copy-source-if-match`
#' 
#' -   `x-amz-copy-source-if-none-match`
#' 
#' -   `x-amz-copy-source-if-unmodified-since`
#' 
#' -   `x-amz-copy-source-if-modified-since`
#' 
#' If both the `x-amz-copy-source-if-match` and
#' `x-amz-copy-source-if-unmodified-since` headers are present in the
#' request and evaluate as follows, Amazon S3 returns `200 OK` and copies
#' the data:
#' 
#' -   `x-amz-copy-source-if-match` condition evaluates to true
#' 
#' -   `x-amz-copy-source-if-unmodified-since` condition evaluates to false
#' 
#' If both the `x-amz-copy-source-if-none-match` and
#' `x-amz-copy-source-if-modified-since` headers are present in the request
#' and evaluate as follows, Amazon S3 returns the `412 Precondition Failed`
#' response code:
#' 
#' -   `x-amz-copy-source-if-none-match` condition evaluates to false
#' 
#' -   `x-amz-copy-source-if-modified-since` condition evaluates to true
#' 
#' All headers with the `x-amz-` prefix, including `x-amz-copy-source`,
#' must be signed.
#' 
#' **Server-side encryption**
#' 
#' When you perform a CopyObject operation, you can optionally use the
#' appropriate encryption-related headers to encrypt the object using
#' server-side encryption with AWS managed encryption keys (SSE-S3 or
#' SSE-KMS) or a customer-provided encryption key. With server-side
#' encryption, Amazon S3 encrypts your data as it writes it to disks in its
#' data centers and decrypts the data when you access it. For more
#' information about server-side encryption, see [Using Server-Side
#' Encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
#' 
#' If a target object uses SSE-KMS, you can enable an S3 Bucket Key for the
#' object. For more information, see [Amazon S3 Bucket
#' Keys](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' **Access Control List (ACL)-Specific Request Headers**
#' 
#' When copying an object, you can optionally use headers to grant
#' ACL-based permissions. By default, all objects are private. Only the
#' owner has full access control. When adding a new object, you can grant
#' permissions to individual AWS accounts or to predefined groups defined
#' by Amazon S3. These permissions are then added to the ACL on the object.
#' For more information, see [Access Control List (ACL)
#' Overview](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)
#' and [Managing ACLs Using the REST
#' API](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html).
#' 
#' **Storage Class Options**
#' 
#' You can use the [`copy_object`][s3_copy_object] operation to change the
#' storage class of an object that is already stored in Amazon S3 using the
#' `StorageClass` parameter. For more information, see [Storage
#' Classes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html)
#' in the *Amazon S3 Service Developer Guide*.
#' 
#' **Versioning**
#' 
#' By default, `x-amz-copy-source` identifies the current version of an
#' object to copy. If the current version is a delete marker, Amazon S3
#' behaves as if the object was deleted. To copy a different version, use
#' the `versionId` subresource.
#' 
#' If you enable versioning on the target bucket, Amazon S3 generates a
#' unique version ID for the object being copied. This version ID is
#' different from the version ID of the source object. Amazon S3 returns
#' the version ID of the copied object in the `x-amz-version-id` response
#' header in the response.
#' 
#' If you do not enable versioning or suspend it on the target bucket, the
#' version ID that Amazon S3 generates is always null.
#' 
#' If the source object's storage class is GLACIER, you must restore a copy
#' of this object before you can use it as a source object for the copy
#' operation. For more information, see
#' [`restore_object`][s3_restore_object].
#' 
#' The following operations are related to [`copy_object`][s3_copy_object]:
#' 
#' -   [`put_object`][s3_put_object]
#' 
#' -   [`get_object`][s3_get_object]
#' 
#' For more information, see [Copying
#' Objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/copy-object.html).
#'
#' @usage
#' s3_copy_object(ACL, Bucket, CacheControl, ContentDisposition,
#'   ContentEncoding, ContentLanguage, ContentType, CopySource,
#'   CopySourceIfMatch, CopySourceIfModifiedSince, CopySourceIfNoneMatch,
#'   CopySourceIfUnmodifiedSince, Expires, GrantFullControl, GrantRead,
#'   GrantReadACP, GrantWriteACP, Key, Metadata, MetadataDirective,
#'   TaggingDirective, ServerSideEncryption, StorageClass,
#'   WebsiteRedirectLocation, SSECustomerAlgorithm, SSECustomerKey,
#'   SSECustomerKeyMD5, SSEKMSKeyId, SSEKMSEncryptionContext,
#'   BucketKeyEnabled, CopySourceSSECustomerAlgorithm,
#'   CopySourceSSECustomerKey, CopySourceSSECustomerKeyMD5, RequestPayer,
#'   Tagging, ObjectLockMode, ObjectLockRetainUntilDate,
#'   ObjectLockLegalHoldStatus, ExpectedBucketOwner,
#'   ExpectedSourceBucketOwner)
#'
#' @param ACL The canned ACL to apply to the object.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param Bucket &#91;required&#93; The name of the destination bucket.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param CacheControl Specifies caching behavior along the request/reply chain.
#' @param ContentDisposition Specifies presentational information for the object.
#' @param ContentEncoding 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.
#' @param ContentLanguage The language the content is in.
#' @param ContentType A standard MIME type describing the format of the object data.
#' @param CopySource &#91;required&#93; Specifies the source object for the copy operation. You specify the
#' value in one of two formats, depending on whether you want to access the
#' source object through an [access
#' point](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html):
#' 
#' -   For objects not accessed through an access point, specify the name
#'     of the source bucket and the key of the source object, separated by
#'     a slash (/). For example, to copy the object `reports/january.pdf`
#'     from the bucket `awsexamplebucket`, use
#'     `awsexamplebucket/reports/january.pdf`. The value must be URL
#'     encoded.
#' 
#' -   For objects accessed through access points, specify the Amazon
#'     Resource Name (ARN) of the object as accessed through the access
#'     point, in the format
#'     `arn:aws:s3:<Region>:<account-id>:accesspoint/<access-point-name>/object/<key>`.
#'     For example, to copy the object `reports/january.pdf` through access
#'     point `my-access-point` owned by account `123456789012` in Region
#'     `us-west-2`, use the URL encoding of
#'     `arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/reports/january.pdf`.
#'     The value must be URL encoded.
#' 
#'     Amazon S3 supports copy operations using access points only when the
#'     source and destination buckets are in the same AWS Region.
#' 
#'     Alternatively, for objects accessed through Amazon S3 on Outposts,
#'     specify the ARN of the object as accessed in the format
#'     `arn:aws:s3-outposts:<Region>:<account-id>:outpost/<outpost-id>/object/<key>`.
#'     For example, to copy the object `reports/january.pdf` through
#'     outpost `my-outpost` owned by account `123456789012` in Region
#'     `us-west-2`, use the URL encoding of
#'     `arn:aws:s3-outposts:us-west-2:123456789012:outpost/my-outpost/object/reports/january.pdf`.
#'     The value must be URL encoded.
#' 
#' To copy a specific version of an object, append
#' `?versionId=<version-id>` to the value (for example,
#' `awsexamplebucket/reports/january.pdf?versionId=QUpfdndhfd8438MNFDN93jdnJFkdmqnh893`).
#' If you don't specify a version ID, Amazon S3 copies the latest version
#' of the source object.
#' @param CopySourceIfMatch Copies the object if its entity tag (ETag) matches the specified tag.
#' @param CopySourceIfModifiedSince Copies the object if it has been modified since the specified time.
#' @param CopySourceIfNoneMatch Copies the object if its entity tag (ETag) is different than the
#' specified ETag.
#' @param CopySourceIfUnmodifiedSince Copies the object if it hasn't been modified since the specified time.
#' @param Expires The date and time at which the object is no longer cacheable.
#' @param GrantFullControl Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
#' object.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param GrantRead Allows grantee to read the object data and its metadata.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param GrantReadACP Allows grantee to read the object ACL.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param GrantWriteACP Allows grantee to write the ACL for the applicable object.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param Key &#91;required&#93; The key of the destination object.
#' @param Metadata A map of metadata to store with the object in S3.
#' @param MetadataDirective Specifies whether the metadata is copied from the source object or
#' replaced with metadata provided in the request.
#' @param TaggingDirective Specifies whether the object tag-set are copied from the source object
#' or replaced with tag-set provided in the request.
#' @param ServerSideEncryption The server-side encryption algorithm used when storing this object in
#' Amazon S3 (for example, AES256, aws:kms).
#' @param StorageClass By default, Amazon S3 uses the STANDARD Storage Class to store newly
#' created objects. The STANDARD storage class provides high durability and
#' high availability. Depending on performance needs, you can specify a
#' different Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS
#' Storage Class. For more information, see [Storage
#' Classes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html)
#' in the *Amazon S3 Service Developer Guide*.
#' @param WebsiteRedirectLocation 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.
#' @param SSECustomerAlgorithm Specifies the algorithm to use to when encrypting the object (for
#' example, AES256).
#' @param SSECustomerKey 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 S3 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.
#' @param SSECustomerKeyMD5 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
#' that the encryption key was transmitted without error.
#' @param SSEKMSKeyId 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. For information about configuring using any of
#' the officially supported AWS SDKs and AWS CLI, see [Specifying the
#' Signature Version in Request
#' Authentication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingAWSSDK.html#specify-signature-version)
#' in the *Amazon S3 Developer Guide*.
#' @param SSEKMSEncryptionContext 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.
#' @param BucketKeyEnabled Specifies whether Amazon S3 should use an S3 Bucket Key for object
#' encryption with server-side encryption using AWS KMS (SSE-KMS). Setting
#' this header to `true` causes Amazon S3 to use an S3 Bucket Key for
#' object encryption with SSE-KMS.
#' 
#' Specifying this header with a COPY operation doesn’t affect bucket-level
#' settings for S3 Bucket Key.
#' @param CopySourceSSECustomerAlgorithm Specifies the algorithm to use when decrypting the source object (for
#' example, AES256).
#' @param CopySourceSSECustomerKey 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.
#' @param CopySourceSSECustomerKeyMD5 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
#' that the encryption key was transmitted without error.
#' @param RequestPayer 
#' @param 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.
#' @param ObjectLockMode The Object Lock mode that you want to apply to the copied object.
#' @param ObjectLockRetainUntilDate The date and time when you want the copied object's Object Lock to
#' expire.
#' @param ObjectLockLegalHoldStatus Specifies whether you want to apply a Legal Hold to the copied object.
#' @param ExpectedBucketOwner The account id of the expected destination bucket owner. If the
#' destination bucket is owned by a different account, the request will
#' fail with an HTTP `403 (Access Denied)` error.
#' @param ExpectedSourceBucketOwner The account id of the expected source bucket owner. If the source bucket
#' is owned by a different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   CopyObjectResult = list(
#'     ETag = "string",
#'     LastModified = as.POSIXct(
#'       "2015-01-01"
#'     )
#'   ),
#'   Expiration = "string",
#'   CopySourceVersionId = "string",
#'   VersionId = "string",
#'   ServerSideEncryption = "AES256"|"aws:kms",
#'   SSECustomerAlgorithm = "string",
#'   SSECustomerKeyMD5 = "string",
#'   SSEKMSKeyId = "string",
#'   SSEKMSEncryptionContext = "string",
#'   BucketKeyEnabled = TRUE|FALSE,
#'   RequestCharged = "requester"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$copy_object(
#'   ACL = "private"|"public-read"|"public-read-write"|"authenticated-read"|"aws-exec-read"|"bucket-owner-read"|"bucket-owner-full-control",
#'   Bucket = "string",
#'   CacheControl = "string",
#'   ContentDisposition = "string",
#'   ContentEncoding = "string",
#'   ContentLanguage = "string",
#'   ContentType = "string",
#'   CopySource = "string",
#'   CopySourceIfMatch = "string",
#'   CopySourceIfModifiedSince = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   CopySourceIfNoneMatch = "string",
#'   CopySourceIfUnmodifiedSince = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   Expires = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   GrantFullControl = "string",
#'   GrantRead = "string",
#'   GrantReadACP = "string",
#'   GrantWriteACP = "string",
#'   Key = "string",
#'   Metadata = list(
#'     "string"
#'   ),
#'   MetadataDirective = "COPY"|"REPLACE",
#'   TaggingDirective = "COPY"|"REPLACE",
#'   ServerSideEncryption = "AES256"|"aws:kms",
#'   StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"GLACIER"|"DEEP_ARCHIVE"|"OUTPOSTS",
#'   WebsiteRedirectLocation = "string",
#'   SSECustomerAlgorithm = "string",
#'   SSECustomerKey = raw,
#'   SSECustomerKeyMD5 = "string",
#'   SSEKMSKeyId = "string",
#'   SSEKMSEncryptionContext = "string",
#'   BucketKeyEnabled = TRUE|FALSE,
#'   CopySourceSSECustomerAlgorithm = "string",
#'   CopySourceSSECustomerKey = raw,
#'   CopySourceSSECustomerKeyMD5 = "string",
#'   RequestPayer = "requester",
#'   Tagging = "string",
#'   ObjectLockMode = "GOVERNANCE"|"COMPLIANCE",
#'   ObjectLockRetainUntilDate = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   ObjectLockLegalHoldStatus = "ON"|"OFF",
#'   ExpectedBucketOwner = "string",
#'   ExpectedSourceBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example copies an object from one bucket to another.
#' svc$copy_object(
#'   Bucket = "destinationbucket",
#'   CopySource = "/sourcebucket/HappyFacejpg",
#'   Key = "HappyFaceCopyjpg"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_copy_object
s3_copy_object <- function(ACL = NULL, Bucket, CacheControl = NULL, ContentDisposition = NULL, ContentEncoding = NULL, ContentLanguage = NULL, ContentType = NULL, CopySource, CopySourceIfMatch = NULL, CopySourceIfModifiedSince = NULL, CopySourceIfNoneMatch = NULL, CopySourceIfUnmodifiedSince = NULL, Expires = NULL, GrantFullControl = NULL, GrantRead = NULL, GrantReadACP = NULL, GrantWriteACP = NULL, Key, Metadata = NULL, MetadataDirective = NULL, TaggingDirective = NULL, ServerSideEncryption = NULL, StorageClass = NULL, WebsiteRedirectLocation = NULL, SSECustomerAlgorithm = NULL, SSECustomerKey = NULL, SSECustomerKeyMD5 = NULL, SSEKMSKeyId = NULL, SSEKMSEncryptionContext = NULL, BucketKeyEnabled = NULL, CopySourceSSECustomerAlgorithm = NULL, CopySourceSSECustomerKey = NULL, CopySourceSSECustomerKeyMD5 = NULL, RequestPayer = NULL, Tagging = NULL, ObjectLockMode = NULL, ObjectLockRetainUntilDate = NULL, ObjectLockLegalHoldStatus = NULL, ExpectedBucketOwner = NULL, ExpectedSourceBucketOwner = NULL) {
  op <- new_operation(
    name = "CopyObject",
    http_method = "PUT",
    http_path = "/{Bucket}/{Key+}",
    paginator = list()
  )
  input <- .s3$copy_object_input(ACL = ACL, Bucket = Bucket, CacheControl = CacheControl, ContentDisposition = ContentDisposition, ContentEncoding = ContentEncoding, ContentLanguage = ContentLanguage, ContentType = ContentType, CopySource = CopySource, CopySourceIfMatch = CopySourceIfMatch, CopySourceIfModifiedSince = CopySourceIfModifiedSince, CopySourceIfNoneMatch = CopySourceIfNoneMatch, CopySourceIfUnmodifiedSince = CopySourceIfUnmodifiedSince, Expires = Expires, GrantFullControl = GrantFullControl, GrantRead = GrantRead, GrantReadACP = GrantReadACP, GrantWriteACP = GrantWriteACP, Key = Key, Metadata = Metadata, MetadataDirective = MetadataDirective, TaggingDirective = TaggingDirective, ServerSideEncryption = ServerSideEncryption, StorageClass = StorageClass, WebsiteRedirectLocation = WebsiteRedirectLocation, SSECustomerAlgorithm = SSECustomerAlgorithm, SSECustomerKey = SSECustomerKey, SSECustomerKeyMD5 = SSECustomerKeyMD5, SSEKMSKeyId = SSEKMSKeyId, SSEKMSEncryptionContext = SSEKMSEncryptionContext, BucketKeyEnabled = BucketKeyEnabled, CopySourceSSECustomerAlgorithm = CopySourceSSECustomerAlgorithm, CopySourceSSECustomerKey = CopySourceSSECustomerKey, CopySourceSSECustomerKeyMD5 = CopySourceSSECustomerKeyMD5, RequestPayer = RequestPayer, Tagging = Tagging, ObjectLockMode = ObjectLockMode, ObjectLockRetainUntilDate = ObjectLockRetainUntilDate, ObjectLockLegalHoldStatus = ObjectLockLegalHoldStatus, ExpectedBucketOwner = ExpectedBucketOwner, ExpectedSourceBucketOwner = ExpectedSourceBucketOwner)
  output <- .s3$copy_object_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$copy_object <- s3_copy_object

#' Creates a new S3 bucket
#'
#' @description
#' Creates a new S3 bucket. To create a bucket, you must register with
#' Amazon S3 and have a valid AWS Access Key ID to authenticate requests.
#' Anonymous requests are never allowed to create buckets. By creating the
#' bucket, you become the bucket owner.
#' 
#' Not every string is an acceptable bucket name. For information about
#' bucket naming restrictions, see [Working with Amazon S3
#' buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html).
#' 
#' If you want to create an Amazon S3 on Outposts bucket, see [Create
#' Bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html).
#' 
#' By default, the bucket is created in the US East (N. Virginia) Region.
#' You can optionally specify a Region in the request body. You might
#' choose a Region to optimize latency, minimize costs, or address
#' regulatory requirements. For example, if you reside in Europe, you will
#' probably find it advantageous to create buckets in the Europe (Ireland)
#' Region. For more information, see [Accessing a
#' bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html#access-bucket-intro).
#' 
#' If you send your create bucket request to the `s3.amazonaws.com`
#' endpoint, the request goes to the us-east-1 Region. Accordingly, the
#' signature calculations in Signature Version 4 must use us-east-1 as the
#' Region, even if the location constraint in the request specifies another
#' Region where the bucket is to be created. If you create a bucket in a
#' Region other than US East (N. Virginia), your application must be able
#' to handle 307 redirect. For more information, see [Virtual hosting of
#' buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html).
#' 
#' When creating a bucket using this operation, you can optionally specify
#' the accounts or groups that should be granted specific permissions on
#' the bucket. There are two ways to grant the appropriate permissions
#' using the request headers.
#' 
#' -   Specify a canned ACL using the `x-amz-acl` request header. Amazon S3
#'     supports a set of predefined ACLs, known as *canned ACLs*. Each
#'     canned ACL has a predefined set of grantees and permissions. For
#'     more information, see [Canned
#'     ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#CannedACL).
#' 
#' -   Specify access permissions explicitly using the `x-amz-grant-read`,
#'     `x-amz-grant-write`, `x-amz-grant-read-acp`,
#'     `x-amz-grant-write-acp`, and `x-amz-grant-full-control` headers.
#'     These headers map to the set of permissions Amazon S3 supports in an
#'     ACL. For more information, see [Access control list (ACL)
#'     overview](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html).
#' 
#'     You specify each grantee as a type=value pair, where the type is one
#'     of the following:
#' 
#'     -   `id` – if the value specified is the canonical user ID of an AWS
#'         account
#' 
#'     -   `uri` – if you are granting permissions to a predefined group
#' 
#'     -   `emailAddress` – if the value specified is the email address of
#'         an AWS account
#' 
#'         Using email addresses to specify a grantee is only supported in
#'         the following AWS Regions:
#' 
#'         -   US East (N. Virginia)
#' 
#'         -   US West (N. California)
#' 
#'         -   US West (Oregon)
#' 
#'         -   Asia Pacific (Singapore)
#' 
#'         -   Asia Pacific (Sydney)
#' 
#'         -   Asia Pacific (Tokyo)
#' 
#'         -   Europe (Ireland)
#' 
#'         -   South America (São Paulo)
#' 
#'         For a list of all the Amazon S3 supported Regions and endpoints,
#'         see [Regions and
#'         Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)
#'         in the AWS General Reference.
#' 
#'     For example, the following `x-amz-grant-read` header grants the AWS
#'     accounts identified by account IDs permissions to read object data
#'     and its metadata:
#' 
#'     `x-amz-grant-read: id="11112222333", id="444455556666" `
#' 
#' You can use either a canned ACL or specify access permissions
#' explicitly. You cannot do both.
#' 
#' The following operations are related to
#' [`create_bucket`][s3_create_bucket]:
#' 
#' -   [`put_object`][s3_put_object]
#' 
#' -   [`delete_bucket`][s3_delete_bucket]
#'
#' @usage
#' s3_create_bucket(ACL, Bucket, CreateBucketConfiguration,
#'   GrantFullControl, GrantRead, GrantReadACP, GrantWrite, GrantWriteACP,
#'   ObjectLockEnabledForBucket)
#'
#' @param ACL The canned ACL to apply to the bucket.
#' @param Bucket &#91;required&#93; The name of the bucket to create.
#' @param CreateBucketConfiguration The configuration information for the bucket.
#' @param GrantFullControl Allows grantee the read, write, read ACP, and write ACP permissions on
#' the bucket.
#' @param GrantRead Allows grantee to list the objects in the bucket.
#' @param GrantReadACP Allows grantee to read the bucket ACL.
#' @param GrantWrite Allows grantee to create, overwrite, and delete any object in the
#' bucket.
#' @param GrantWriteACP Allows grantee to write the ACL for the applicable bucket.
#' @param ObjectLockEnabledForBucket Specifies whether you want S3 Object Lock to be enabled for the new
#' bucket.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Location = "string"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$create_bucket(
#'   ACL = "private"|"public-read"|"public-read-write"|"authenticated-read",
#'   Bucket = "string",
#'   CreateBucketConfiguration = list(
#'     LocationConstraint = "af-south-1"|"ap-east-1"|"ap-northeast-1"|"ap-northeast-2"|"ap-northeast-3"|"ap-south-1"|"ap-southeast-1"|"ap-southeast-2"|"ca-central-1"|"cn-north-1"|"cn-northwest-1"|"EU"|"eu-central-1"|"eu-north-1"|"eu-south-1"|"eu-west-1"|"eu-west-2"|"eu-west-3"|"me-south-1"|"sa-east-1"|"us-east-2"|"us-gov-east-1"|"us-gov-west-1"|"us-west-1"|"us-west-2"
#'   ),
#'   GrantFullControl = "string",
#'   GrantRead = "string",
#'   GrantReadACP = "string",
#'   GrantWrite = "string",
#'   GrantWriteACP = "string",
#'   ObjectLockEnabledForBucket = TRUE|FALSE
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example creates a bucket.
#' svc$create_bucket(
#'   Bucket = "examplebucket"
#' )
#' 
#' # The following example creates a bucket. The request specifies an AWS
#' # region where to create the bucket.
#' svc$create_bucket(
#'   Bucket = "examplebucket",
#'   CreateBucketConfiguration = list(
#'     LocationConstraint = "eu-west-1"
#'   )
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_create_bucket
s3_create_bucket <- function(ACL = NULL, Bucket, CreateBucketConfiguration = NULL, GrantFullControl = NULL, GrantRead = NULL, GrantReadACP = NULL, GrantWrite = NULL, GrantWriteACP = NULL, ObjectLockEnabledForBucket = NULL) {
  op <- new_operation(
    name = "CreateBucket",
    http_method = "PUT",
    http_path = "/{Bucket}",
    paginator = list()
  )
  input <- .s3$create_bucket_input(ACL = ACL, Bucket = Bucket, CreateBucketConfiguration = CreateBucketConfiguration, GrantFullControl = GrantFullControl, GrantRead = GrantRead, GrantReadACP = GrantReadACP, GrantWrite = GrantWrite, GrantWriteACP = GrantWriteACP, ObjectLockEnabledForBucket = ObjectLockEnabledForBucket)
  output <- .s3$create_bucket_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$create_bucket <- s3_create_bucket

#' This operation initiates a multipart upload and returns an upload ID
#'
#' @description
#' This operation initiates a multipart upload and returns an upload ID.
#' This upload ID is used to associate all of the parts in the specific
#' multipart upload. You specify this upload ID in each of your subsequent
#' upload part requests (see [`upload_part`][s3_upload_part]). You also
#' include this upload ID in the final request to either complete or abort
#' the multipart upload request.
#' 
#' For more information about multipart uploads, see [Multipart Upload
#' Overview](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html).
#' 
#' If you have configured a lifecycle rule to abort incomplete multipart
#' uploads, the upload must complete within the number of days specified in
#' the bucket lifecycle configuration. Otherwise, the incomplete multipart
#' upload becomes eligible for an abort operation and Amazon S3 aborts the
#' multipart upload. For more information, see [Aborting Incomplete
#' Multipart Uploads Using a Bucket Lifecycle
#' Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config).
#' 
#' For information about the permissions required to use the multipart
#' upload API, see [Multipart Upload API and
#' Permissions](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html).
#' 
#' For request signing, multipart upload is just a series of regular
#' requests. You initiate a multipart upload, send one or more requests to
#' upload parts, and then complete the multipart upload process. You sign
#' each request individually. There is nothing special about signing
#' multipart upload requests. For more information about signing, see
#' [Authenticating Requests (AWS Signature Version
#' 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html).
#' 
#' After you initiate a multipart upload and upload one or more parts, to
#' stop being charged for storing the uploaded parts, you must either
#' complete or abort the multipart upload. Amazon S3 frees up the space
#' used to store the parts and stop charging you for storing them only
#' after you either complete or abort a multipart upload.
#' 
#' You can optionally request server-side encryption. For server-side
#' encryption, Amazon S3 encrypts your data as it writes it to disks in its
#' data centers and decrypts it when you access it. You can provide your
#' own encryption key, or use AWS Key Management Service (AWS KMS) customer
#' master keys (CMKs) or Amazon S3-managed encryption keys. If you choose
#' to provide your own encryption key, the request headers you provide in
#' [`upload_part`][s3_upload_part] and
#' [`upload_part_copy`][s3_upload_part_copy] requests must match the
#' headers you used in the request to initiate the upload by using
#' [`create_multipart_upload`][s3_create_multipart_upload].
#' 
#' To perform a multipart upload with encryption using an AWS KMS CMK, the
#' requester must have permission to the `kms:Encrypt`, `kms:Decrypt`,
#' `kms:ReEncrypt*`, `kms:GenerateDataKey*`, and `kms:DescribeKey` actions
#' on the key. These permissions are required because Amazon S3 must
#' decrypt and read data from the encrypted file parts before it completes
#' the multipart upload.
#' 
#' If your AWS Identity and Access Management (IAM) user or role is in the
#' same AWS account as the AWS KMS CMK, then you must have these
#' permissions on the key policy. If your IAM user or role belongs to a
#' different account than the key, then you must have the permissions on
#' both the key policy and your IAM user or role.
#' 
#' For more information, see [Protecting Data Using Server-Side
#' Encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).
#' 
#' ### Access Permissions
#' 
#' When copying an object, you can optionally specify the accounts or
#' groups that should be granted specific permissions on the new object.
#' There are two ways to grant the permissions using the request headers:
#' 
#' -   Specify a canned ACL with the `x-amz-acl` request header. For more
#'     information, see [Canned
#'     ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#CannedACL).
#' 
#' -   Specify access permissions explicitly with the `x-amz-grant-read`,
#'     `x-amz-grant-read-acp`, `x-amz-grant-write-acp`, and
#'     `x-amz-grant-full-control` headers. These parameters map to the set
#'     of permissions that Amazon S3 supports in an ACL. For more
#'     information, see [Access Control List (ACL)
#'     Overview](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html).
#' 
#' You can use either a canned ACL or specify access permissions
#' explicitly. You cannot do both.
#' 
#' ### Server-Side- Encryption-Specific Request Headers
#' 
#' You can optionally tell Amazon S3 to encrypt data at rest using
#' server-side encryption. Server-side encryption is for data encryption at
#' rest. Amazon S3 encrypts your data as it writes it to disks in its data
#' centers and decrypts it when you access it. The option you use depends
#' on whether you want to use AWS managed encryption keys or provide your
#' own encryption key.
#' 
#' -   Use encryption keys managed by Amazon S3 or customer master keys
#'     (CMKs) stored in AWS Key Management Service (AWS KMS) – If you want
#'     AWS to manage the keys used to encrypt data, specify the following
#'     headers in the request.
#' 
#'     -   x-amz-server-side-encryption
#' 
#'     -   x-amz-server-side-encryption-aws-kms-key-id
#' 
#'     -   x-amz-server-side-encryption-context
#' 
#'     If you specify `x-amz-server-side-encryption:aws:kms`, but don't
#'     provide `x-amz-server-side-encryption-aws-kms-key-id`, Amazon S3
#'     uses the AWS managed CMK in AWS KMS to protect the data.
#' 
#'     All GET and PUT requests for an object protected by AWS KMS fail if
#'     you don't make them with SSL or by using SigV4.
#' 
#'     For more information about server-side encryption with CMKs stored
#'     in AWS KMS (SSE-KMS), see [Protecting Data Using Server-Side
#'     Encryption with CMKs stored in AWS
#'     KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html).
#' 
#' -   Use customer-provided encryption keys – If you want to manage your
#'     own encryption keys, provide all the following headers in the
#'     request.
#' 
#'     -   x-amz-server-side-encryption-customer-algorithm
#' 
#'     -   x-amz-server-side-encryption-customer-key
#' 
#'     -   x-amz-server-side-encryption-customer-key-MD5
#' 
#'     For more information about server-side encryption with CMKs stored
#'     in AWS KMS (SSE-KMS), see [Protecting Data Using Server-Side
#'     Encryption with CMKs stored in AWS
#'     KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html).
#' 
#' ### Access-Control-List (ACL)-Specific Request Headers
#' 
#' You also can use the following access control–related headers with this
#' operation. By default, all objects are private. Only the owner has full
#' access control. When adding a new object, you can grant permissions to
#' individual AWS accounts or to predefined groups defined by Amazon S3.
#' These permissions are then added to the access control list (ACL) on the
#' object. For more information, see [Using
#' ACLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl_overview.html).
#' With this operation, you can grant access permissions using one of the
#' following two methods:
#' 
#' -   Specify a canned ACL (`x-amz-acl`) — Amazon S3 supports a set of
#'     predefined ACLs, known as *canned ACLs*. Each canned ACL has a
#'     predefined set of grantees and permissions. For more information,
#'     see [Canned
#'     ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#CannedACL).
#' 
#' -   Specify access permissions explicitly — To explicitly grant access
#'     permissions to specific AWS accounts or groups, use the following
#'     headers. Each header maps to specific permissions that Amazon S3
#'     supports in an ACL. For more information, see [Access Control List
#'     (ACL)
#'     Overview](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html).
#'     In the header, you specify a list of grantees who get the specific
#'     permission. To grant permissions explicitly, use:
#' 
#'     -   x-amz-grant-read
#' 
#'     -   x-amz-grant-write
#' 
#'     -   x-amz-grant-read-acp
#' 
#'     -   x-amz-grant-write-acp
#' 
#'     -   x-amz-grant-full-control
#' 
#'     You specify each grantee as a type=value pair, where the type is one
#'     of the following:
#' 
#'     -   `id` – if the value specified is the canonical user ID of an AWS
#'         account
#' 
#'     -   `uri` – if you are granting permissions to a predefined group
#' 
#'     -   `emailAddress` – if the value specified is the email address of
#'         an AWS account
#' 
#'         Using email addresses to specify a grantee is only supported in
#'         the following AWS Regions:
#' 
#'         -   US East (N. Virginia)
#' 
#'         -   US West (N. California)
#' 
#'         -   US West (Oregon)
#' 
#'         -   Asia Pacific (Singapore)
#' 
#'         -   Asia Pacific (Sydney)
#' 
#'         -   Asia Pacific (Tokyo)
#' 
#'         -   Europe (Ireland)
#' 
#'         -   South America (São Paulo)
#' 
#'         For a list of all the Amazon S3 supported Regions and endpoints,
#'         see [Regions and
#'         Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)
#'         in the AWS General Reference.
#' 
#'     For example, the following `x-amz-grant-read` header grants the AWS
#'     accounts identified by account IDs permissions to read object data
#'     and its metadata:
#' 
#'     `x-amz-grant-read: id="11112222333", id="444455556666" `
#' 
#' The following operations are related to
#' [`create_multipart_upload`][s3_create_multipart_upload]:
#' 
#' -   [`upload_part`][s3_upload_part]
#' 
#' -   [`complete_multipart_upload`][s3_complete_multipart_upload]
#' 
#' -   [`abort_multipart_upload`][s3_abort_multipart_upload]
#' 
#' -   [`list_parts`][s3_list_parts]
#' 
#' -   [`list_multipart_uploads`][s3_list_multipart_uploads]
#'
#' @usage
#' s3_create_multipart_upload(ACL, Bucket, CacheControl,
#'   ContentDisposition, ContentEncoding, ContentLanguage, ContentType,
#'   Expires, GrantFullControl, GrantRead, GrantReadACP, GrantWriteACP, Key,
#'   Metadata, ServerSideEncryption, StorageClass, WebsiteRedirectLocation,
#'   SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5, SSEKMSKeyId,
#'   SSEKMSEncryptionContext, BucketKeyEnabled, RequestPayer, Tagging,
#'   ObjectLockMode, ObjectLockRetainUntilDate, ObjectLockLegalHoldStatus,
#'   ExpectedBucketOwner)
#'
#' @param ACL The canned ACL to apply to the object.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param Bucket &#91;required&#93; The name of the bucket to which to initiate the upload
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param CacheControl Specifies caching behavior along the request/reply chain.
#' @param ContentDisposition Specifies presentational information for the object.
#' @param ContentEncoding 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.
#' @param ContentLanguage The language the content is in.
#' @param ContentType A standard MIME type describing the format of the object data.
#' @param Expires The date and time at which the object is no longer cacheable.
#' @param GrantFullControl Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the
#' object.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param GrantRead Allows grantee to read the object data and its metadata.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param GrantReadACP Allows grantee to read the object ACL.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param GrantWriteACP Allows grantee to write the ACL for the applicable object.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' @param Key &#91;required&#93; Object key for which the multipart upload is to be initiated.
#' @param Metadata A map of metadata to store with the object in S3.
#' @param ServerSideEncryption The server-side encryption algorithm used when storing this object in
#' Amazon S3 (for example, AES256, aws:kms).
#' @param StorageClass By default, Amazon S3 uses the STANDARD Storage Class to store newly
#' created objects. The STANDARD storage class provides high durability and
#' high availability. Depending on performance needs, you can specify a
#' different Storage Class. Amazon S3 on Outposts only uses the OUTPOSTS
#' Storage Class. For more information, see [Storage
#' Classes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html)
#' in the *Amazon S3 Service Developer Guide*.
#' @param WebsiteRedirectLocation 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.
#' @param SSECustomerAlgorithm Specifies the algorithm to use to when encrypting the object (for
#' example, AES256).
#' @param SSECustomerKey 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 S3 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.
#' @param SSECustomerKeyMD5 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
#' that the encryption key was transmitted without error.
#' @param SSEKMSKeyId Specifies the ID of the symmetric customer managed AWS KMS CMK 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. For information
#' about configuring using any of the officially supported AWS SDKs and AWS
#' CLI, see Specifying the Signature Version in Request Authentication in
#' the *Amazon S3 Developer Guide*.
#' @param SSEKMSEncryptionContext 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.
#' @param BucketKeyEnabled Specifies whether Amazon S3 should use an S3 Bucket Key for object
#' encryption with server-side encryption using AWS KMS (SSE-KMS). Setting
#' this header to `true` causes Amazon S3 to use an S3 Bucket Key for
#' object encryption with SSE-KMS.
#' 
#' Specifying this header with an object operation doesn’t affect
#' bucket-level settings for S3 Bucket Key.
#' @param RequestPayer 
#' @param Tagging The tag-set for the object. The tag-set must be encoded as URL Query
#' parameters.
#' @param ObjectLockMode Specifies the Object Lock mode that you want to apply to the uploaded
#' object.
#' @param ObjectLockRetainUntilDate Specifies the date and time when you want the Object Lock to expire.
#' @param ObjectLockLegalHoldStatus Specifies whether you want to apply a Legal Hold to the uploaded object.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   AbortDate = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   AbortRuleId = "string",
#'   Bucket = "string",
#'   Key = "string",
#'   UploadId = "string",
#'   ServerSideEncryption = "AES256"|"aws:kms",
#'   SSECustomerAlgorithm = "string",
#'   SSECustomerKeyMD5 = "string",
#'   SSEKMSKeyId = "string",
#'   SSEKMSEncryptionContext = "string",
#'   BucketKeyEnabled = TRUE|FALSE,
#'   RequestCharged = "requester"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$create_multipart_upload(
#'   ACL = "private"|"public-read"|"public-read-write"|"authenticated-read"|"aws-exec-read"|"bucket-owner-read"|"bucket-owner-full-control",
#'   Bucket = "string",
#'   CacheControl = "string",
#'   ContentDisposition = "string",
#'   ContentEncoding = "string",
#'   ContentLanguage = "string",
#'   ContentType = "string",
#'   Expires = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   GrantFullControl = "string",
#'   GrantRead = "string",
#'   GrantReadACP = "string",
#'   GrantWriteACP = "string",
#'   Key = "string",
#'   Metadata = list(
#'     "string"
#'   ),
#'   ServerSideEncryption = "AES256"|"aws:kms",
#'   StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"GLACIER"|"DEEP_ARCHIVE"|"OUTPOSTS",
#'   WebsiteRedirectLocation = "string",
#'   SSECustomerAlgorithm = "string",
#'   SSECustomerKey = raw,
#'   SSECustomerKeyMD5 = "string",
#'   SSEKMSKeyId = "string",
#'   SSEKMSEncryptionContext = "string",
#'   BucketKeyEnabled = TRUE|FALSE,
#'   RequestPayer = "requester",
#'   Tagging = "string",
#'   ObjectLockMode = "GOVERNANCE"|"COMPLIANCE",
#'   ObjectLockRetainUntilDate = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   ObjectLockLegalHoldStatus = "ON"|"OFF",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example initiates a multipart upload.
#' svc$create_multipart_upload(
#'   Bucket = "examplebucket",
#'   Key = "largeobject"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_create_multipart_upload
s3_create_multipart_upload <- function(ACL = NULL, Bucket, CacheControl = NULL, ContentDisposition = NULL, ContentEncoding = NULL, ContentLanguage = NULL, ContentType = NULL, Expires = NULL, GrantFullControl = NULL, GrantRead = NULL, GrantReadACP = NULL, GrantWriteACP = NULL, Key, Metadata = NULL, ServerSideEncryption = NULL, StorageClass = NULL, WebsiteRedirectLocation = NULL, SSECustomerAlgorithm = NULL, SSECustomerKey = NULL, SSECustomerKeyMD5 = NULL, SSEKMSKeyId = NULL, SSEKMSEncryptionContext = NULL, BucketKeyEnabled = NULL, RequestPayer = NULL, Tagging = NULL, ObjectLockMode = NULL, ObjectLockRetainUntilDate = NULL, ObjectLockLegalHoldStatus = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "CreateMultipartUpload",
    http_method = "POST",
    http_path = "/{Bucket}/{Key+}?uploads",
    paginator = list()
  )
  input <- .s3$create_multipart_upload_input(ACL = ACL, Bucket = Bucket, CacheControl = CacheControl, ContentDisposition = ContentDisposition, ContentEncoding = ContentEncoding, ContentLanguage = ContentLanguage, ContentType = ContentType, Expires = Expires, GrantFullControl = GrantFullControl, GrantRead = GrantRead, GrantReadACP = GrantReadACP, GrantWriteACP = GrantWriteACP, Key = Key, Metadata = Metadata, ServerSideEncryption = ServerSideEncryption, StorageClass = StorageClass, WebsiteRedirectLocation = WebsiteRedirectLocation, SSECustomerAlgorithm = SSECustomerAlgorithm, SSECustomerKey = SSECustomerKey, SSECustomerKeyMD5 = SSECustomerKeyMD5, SSEKMSKeyId = SSEKMSKeyId, SSEKMSEncryptionContext = SSEKMSEncryptionContext, BucketKeyEnabled = BucketKeyEnabled, RequestPayer = RequestPayer, Tagging = Tagging, ObjectLockMode = ObjectLockMode, ObjectLockRetainUntilDate = ObjectLockRetainUntilDate, ObjectLockLegalHoldStatus = ObjectLockLegalHoldStatus, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$create_multipart_upload_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$create_multipart_upload <- s3_create_multipart_upload

#' Deletes the S3 bucket
#'
#' @description
#' Deletes the S3 bucket. All objects (including all object versions and
#' delete markers) in the bucket must be deleted before the bucket itself
#' can be deleted.
#' 
#' **Related Resources**
#' 
#' -   [`create_bucket`][s3_create_bucket]
#' 
#' -   [`delete_object`][s3_delete_object]
#'
#' @usage
#' s3_delete_bucket(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; Specifies the bucket being deleted.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example deletes the specified bucket.
#' svc$delete_bucket(
#'   Bucket = "forrandall2"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket
s3_delete_bucket <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucket",
    http_method = "DELETE",
    http_path = "/{Bucket}",
    paginator = list()
  )
  input <- .s3$delete_bucket_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket <- s3_delete_bucket

#' Deletes an analytics configuration for the bucket (specified by the
#' analytics configuration ID)
#'
#' @description
#' Deletes an analytics configuration for the bucket (specified by the
#' analytics configuration ID).
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:PutAnalyticsConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' For information about the Amazon S3 analytics feature, see [Amazon S3
#' Analytics – Storage Class
#' Analysis](https://docs.aws.amazon.com/AmazonS3/latest/userguide/analytics-storage-class.html).
#' 
#' The following operations are related to
#' [`delete_bucket_analytics_configuration`][s3_delete_bucket_analytics_configuration]:
#' 
#' -   [`get_bucket_analytics_configuration`][s3_get_bucket_analytics_configuration]
#' 
#' -   [`list_bucket_analytics_configurations`][s3_list_bucket_analytics_configurations]
#' 
#' -   [`put_bucket_analytics_configuration`][s3_put_bucket_analytics_configuration]
#'
#' @usage
#' s3_delete_bucket_analytics_configuration(Bucket, Id,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket from which an analytics configuration is deleted.
#' @param Id &#91;required&#93; The ID that identifies the analytics configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_analytics_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_analytics_configuration
s3_delete_bucket_analytics_configuration <- function(Bucket, Id, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketAnalyticsConfiguration",
    http_method = "DELETE",
    http_path = "/{Bucket}?analytics",
    paginator = list()
  )
  input <- .s3$delete_bucket_analytics_configuration_input(Bucket = Bucket, Id = Id, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_analytics_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_analytics_configuration <- s3_delete_bucket_analytics_configuration

#' Deletes the cors configuration information set for the bucket
#'
#' @description
#' Deletes the `cors` configuration information set for the bucket.
#' 
#' To use this operation, you must have permission to perform the
#' `s3:PutBucketCORS` action. The bucket owner has this permission by
#' default and can grant this permission to others.
#' 
#' For information about `cors`, see [Enabling Cross-Origin Resource
#' Sharing](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' **Related Resources:**
#' 
#' -   [`put_bucket_cors`][s3_put_bucket_cors]
#' 
#' -   [RESTOPTIONSobject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html)
#'
#' @usage
#' s3_delete_bucket_cors(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; Specifies the bucket whose `cors` configuration is being deleted.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_cors(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example deletes CORS configuration on a bucket.
#' svc$delete_bucket_cors(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_cors
s3_delete_bucket_cors <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketCors",
    http_method = "DELETE",
    http_path = "/{Bucket}?cors",
    paginator = list()
  )
  input <- .s3$delete_bucket_cors_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_cors_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_cors <- s3_delete_bucket_cors

#' This implementation of the DELETE operation removes default encryption
#' from the bucket
#'
#' @description
#' This implementation of the DELETE operation removes default encryption
#' from the bucket. For information about the Amazon S3 default encryption
#' feature, see [Amazon S3 Default Bucket
#' Encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:PutEncryptionConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' **Related Resources**
#' 
#' -   [`put_bucket_encryption`][s3_put_bucket_encryption]
#' 
#' -   [`get_bucket_encryption`][s3_get_bucket_encryption]
#'
#' @usage
#' s3_delete_bucket_encryption(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the server-side encryption
#' configuration to delete.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_encryption(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_encryption
s3_delete_bucket_encryption <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketEncryption",
    http_method = "DELETE",
    http_path = "/{Bucket}?encryption",
    paginator = list()
  )
  input <- .s3$delete_bucket_encryption_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_encryption_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_encryption <- s3_delete_bucket_encryption

#' Deletes the S3 Intelligent-Tiering configuration from the specified
#' bucket
#'
#' @description
#' Deletes the S3 Intelligent-Tiering configuration from the specified
#' bucket.
#' 
#' The S3 Intelligent-Tiering storage class is designed to optimize storage
#' costs by automatically moving data to the most cost-effective storage
#' access tier, without additional operational overhead. S3
#' Intelligent-Tiering delivers automatic cost savings by moving data
#' between access tiers, when access patterns change.
#' 
#' The S3 Intelligent-Tiering storage class is suitable for objects larger
#' than 128 KB that you plan to store for at least 30 days. If the size of
#' an object is less than 128 KB, it is not eligible for auto-tiering.
#' Smaller objects can be stored, but they are always charged at the
#' frequent access tier rates in the S3 Intelligent-Tiering storage class.
#' 
#' If you delete an object before the end of the 30-day minimum storage
#' duration period, you are charged for 30 days. For more information, see
#' [Storage class for automatically optimizing frequently and infrequently
#' accessed
#' objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-dynamic-data-access).
#' 
#' Operations related to
#' [`delete_bucket_intelligent_tiering_configuration`][s3_delete_bucket_intelligent_tiering_configuration]
#' include:
#' 
#' -   [`get_bucket_intelligent_tiering_configuration`][s3_get_bucket_intelligent_tiering_configuration]
#' 
#' -   [`put_bucket_intelligent_tiering_configuration`][s3_put_bucket_intelligent_tiering_configuration]
#' 
#' -   [`list_bucket_intelligent_tiering_configurations`][s3_list_bucket_intelligent_tiering_configurations]
#'
#' @usage
#' s3_delete_bucket_intelligent_tiering_configuration(Bucket, Id)
#'
#' @param Bucket &#91;required&#93; The name of the Amazon S3 bucket whose configuration you want to modify
#' or retrieve.
#' @param Id &#91;required&#93; The ID used to identify the S3 Intelligent-Tiering configuration.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_intelligent_tiering_configuration(
#'   Bucket = "string",
#'   Id = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_intelligent_tiering_configuration
s3_delete_bucket_intelligent_tiering_configuration <- function(Bucket, Id) {
  op <- new_operation(
    name = "DeleteBucketIntelligentTieringConfiguration",
    http_method = "DELETE",
    http_path = "/{Bucket}?intelligent-tiering",
    paginator = list()
  )
  input <- .s3$delete_bucket_intelligent_tiering_configuration_input(Bucket = Bucket, Id = Id)
  output <- .s3$delete_bucket_intelligent_tiering_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_intelligent_tiering_configuration <- s3_delete_bucket_intelligent_tiering_configuration

#' Deletes an inventory configuration (identified by the inventory ID) from
#' the bucket
#'
#' @description
#' Deletes an inventory configuration (identified by the inventory ID) from
#' the bucket.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:PutInventoryConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' For information about the Amazon S3 inventory feature, see [Amazon S3
#' Inventory](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html).
#' 
#' Operations related to
#' [`delete_bucket_inventory_configuration`][s3_delete_bucket_inventory_configuration]
#' include:
#' 
#' -   [`get_bucket_inventory_configuration`][s3_get_bucket_inventory_configuration]
#' 
#' -   [`put_bucket_inventory_configuration`][s3_put_bucket_inventory_configuration]
#' 
#' -   [`list_bucket_inventory_configurations`][s3_list_bucket_inventory_configurations]
#'
#' @usage
#' s3_delete_bucket_inventory_configuration(Bucket, Id,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the inventory configuration to delete.
#' @param Id &#91;required&#93; The ID used to identify the inventory configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_inventory_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_inventory_configuration
s3_delete_bucket_inventory_configuration <- function(Bucket, Id, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketInventoryConfiguration",
    http_method = "DELETE",
    http_path = "/{Bucket}?inventory",
    paginator = list()
  )
  input <- .s3$delete_bucket_inventory_configuration_input(Bucket = Bucket, Id = Id, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_inventory_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_inventory_configuration <- s3_delete_bucket_inventory_configuration

#' Deletes the lifecycle configuration from the specified bucket
#'
#' @description
#' Deletes the lifecycle configuration from the specified bucket. Amazon S3
#' removes all the lifecycle configuration rules in the lifecycle
#' subresource associated with the bucket. Your objects never expire, and
#' Amazon S3 no longer automatically deletes any objects on the basis of
#' rules contained in the deleted lifecycle configuration.
#' 
#' To use this operation, you must have permission to perform the
#' `s3:PutLifecycleConfiguration` action. By default, the bucket owner has
#' this permission and the bucket owner can grant this permission to
#' others.
#' 
#' There is usually some time lag before lifecycle configuration deletion
#' is fully propagated to all the Amazon S3 systems.
#' 
#' For more information about the object expiration, see [Elements to
#' Describe Lifecycle
#' Actions](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html#intro-lifecycle-rules-actions).
#' 
#' Related actions include:
#' 
#' -   [`put_bucket_lifecycle_configuration`][s3_put_bucket_lifecycle_configuration]
#' 
#' -   [`get_bucket_lifecycle_configuration`][s3_get_bucket_lifecycle_configuration]
#'
#' @usage
#' s3_delete_bucket_lifecycle(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name of the lifecycle to delete.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_lifecycle(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example deletes lifecycle configuration on a bucket.
#' svc$delete_bucket_lifecycle(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_lifecycle
s3_delete_bucket_lifecycle <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketLifecycle",
    http_method = "DELETE",
    http_path = "/{Bucket}?lifecycle",
    paginator = list()
  )
  input <- .s3$delete_bucket_lifecycle_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_lifecycle_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_lifecycle <- s3_delete_bucket_lifecycle

#' Deletes a metrics configuration for the Amazon CloudWatch request
#' metrics (specified by the metrics configuration ID) from the bucket
#'
#' @description
#' Deletes a metrics configuration for the Amazon CloudWatch request
#' metrics (specified by the metrics configuration ID) from the bucket.
#' Note that this doesn't include the daily storage metrics.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:PutMetricsConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' For information about CloudWatch request metrics for Amazon S3, see
#' [Monitoring Metrics with Amazon
#' CloudWatch](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cloudwatch-monitoring.html).
#' 
#' The following operations are related to
#' [`delete_bucket_metrics_configuration`][s3_delete_bucket_metrics_configuration]:
#' 
#' -   [`get_bucket_metrics_configuration`][s3_get_bucket_metrics_configuration]
#' 
#' -   [`put_bucket_metrics_configuration`][s3_put_bucket_metrics_configuration]
#' 
#' -   [`list_bucket_metrics_configurations`][s3_list_bucket_metrics_configurations]
#' 
#' -   [Monitoring Metrics with Amazon
#'     CloudWatch](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cloudwatch-monitoring.html)
#'
#' @usage
#' s3_delete_bucket_metrics_configuration(Bucket, Id, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the metrics configuration to delete.
#' @param Id &#91;required&#93; The ID used to identify the metrics configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_metrics_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_metrics_configuration
s3_delete_bucket_metrics_configuration <- function(Bucket, Id, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketMetricsConfiguration",
    http_method = "DELETE",
    http_path = "/{Bucket}?metrics",
    paginator = list()
  )
  input <- .s3$delete_bucket_metrics_configuration_input(Bucket = Bucket, Id = Id, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_metrics_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_metrics_configuration <- s3_delete_bucket_metrics_configuration

#' Removes OwnershipControls for an Amazon S3 bucket
#'
#' @description
#' Removes `OwnershipControls` for an Amazon S3 bucket. To use this
#' operation, you must have the `s3:PutBucketOwnershipControls` permission.
#' For more information about Amazon S3 permissions, see [Specifying
#' Permissions in a
#' Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html).
#' 
#' For information about Amazon S3 Object Ownership, see [Using Object
#' Ownership](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html).
#' 
#' The following operations are related to
#' [`delete_bucket_ownership_controls`][s3_delete_bucket_ownership_controls]:
#' 
#' -   [`get_bucket_ownership_controls`][s3_get_bucket_ownership_controls]
#' 
#' -   [`put_bucket_ownership_controls`][s3_put_bucket_ownership_controls]
#'
#' @usage
#' s3_delete_bucket_ownership_controls(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The Amazon S3 bucket whose `OwnershipControls` you want to delete.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_ownership_controls(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_ownership_controls
s3_delete_bucket_ownership_controls <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketOwnershipControls",
    http_method = "DELETE",
    http_path = "/{Bucket}?ownershipControls",
    paginator = list()
  )
  input <- .s3$delete_bucket_ownership_controls_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_ownership_controls_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_ownership_controls <- s3_delete_bucket_ownership_controls

#' This implementation of the DELETE operation uses the policy subresource
#' to delete the policy of a specified bucket
#'
#' @description
#' This implementation of the DELETE operation uses the policy subresource
#' to delete the policy of a specified bucket. If you are using an identity
#' other than the root user of the AWS account that owns the bucket, the
#' calling identity must have the
#' [`delete_bucket_policy`][s3_delete_bucket_policy] permissions on the
#' specified bucket and belong to the bucket owner's account to use this
#' operation.
#' 
#' If you don't have [`delete_bucket_policy`][s3_delete_bucket_policy]
#' permissions, Amazon S3 returns a `403 Access Denied` error. If you have
#' the correct permissions, but you're not using an identity that belongs
#' to the bucket owner's account, Amazon S3 returns a
#' `405 Method Not Allowed` error.
#' 
#' As a security precaution, the root user of the AWS account that owns a
#' bucket can always use this operation, even if the policy explicitly
#' denies the root user the ability to perform this action.
#' 
#' For more information about bucket policies, see Using Bucket Policies
#' and UserPolicies.
#' 
#' The following operations are related to
#' [`delete_bucket_policy`][s3_delete_bucket_policy]
#' 
#' -   [`create_bucket`][s3_create_bucket]
#' 
#' -   [`delete_object`][s3_delete_object]
#'
#' @usage
#' s3_delete_bucket_policy(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_policy(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example deletes bucket policy on the specified bucket.
#' svc$delete_bucket_policy(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_policy
s3_delete_bucket_policy <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketPolicy",
    http_method = "DELETE",
    http_path = "/{Bucket}?policy",
    paginator = list()
  )
  input <- .s3$delete_bucket_policy_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_policy_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_policy <- s3_delete_bucket_policy

#' Deletes the replication configuration from the bucket
#'
#' @description
#' Deletes the replication configuration from the bucket.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:PutReplicationConfiguration` action. The bucket owner has these
#' permissions by default and can grant it to others. For more information
#' about permissions, see [Permissions Related to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' It can take a while for the deletion of a replication configuration to
#' fully propagate.
#' 
#' For information about replication configuration, see Replication in the
#' *Amazon S3 Developer Guide*.
#' 
#' The following operations are related to
#' [`delete_bucket_replication`][s3_delete_bucket_replication]:
#' 
#' -   [`put_bucket_replication`][s3_put_bucket_replication]
#' 
#' -   [`get_bucket_replication`][s3_get_bucket_replication]
#'
#' @usage
#' s3_delete_bucket_replication(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_replication(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example deletes replication configuration set on bucket.
#' svc$delete_bucket_replication(
#'   Bucket = "example"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_replication
s3_delete_bucket_replication <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketReplication",
    http_method = "DELETE",
    http_path = "/{Bucket}?replication",
    paginator = list()
  )
  input <- .s3$delete_bucket_replication_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_replication_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_replication <- s3_delete_bucket_replication

#' Deletes the tags from the bucket
#'
#' @description
#' Deletes the tags from the bucket.
#' 
#' To use this operation, you must have permission to perform the
#' `s3:PutBucketTagging` action. By default, the bucket owner has this
#' permission and can grant this permission to others.
#' 
#' The following operations are related to
#' [`delete_bucket_tagging`][s3_delete_bucket_tagging]:
#' 
#' -   [`get_bucket_tagging`][s3_get_bucket_tagging]
#' 
#' -   [`put_bucket_tagging`][s3_put_bucket_tagging]
#'
#' @usage
#' s3_delete_bucket_tagging(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket that has the tag set to be removed.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_tagging(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example deletes bucket tags.
#' svc$delete_bucket_tagging(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_tagging
s3_delete_bucket_tagging <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketTagging",
    http_method = "DELETE",
    http_path = "/{Bucket}?tagging",
    paginator = list()
  )
  input <- .s3$delete_bucket_tagging_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_tagging_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_tagging <- s3_delete_bucket_tagging

#' This operation removes the website configuration for a bucket
#'
#' @description
#' This operation removes the website configuration for a bucket. Amazon S3
#' returns a `200 OK` response upon successfully deleting a website
#' configuration on the specified bucket. You will get a `200 OK` response
#' if the website configuration you are trying to delete does not exist on
#' the bucket. Amazon S3 returns a `404` response if the bucket specified
#' in the request does not exist.
#' 
#' This DELETE operation requires the `S3:DeleteBucketWebsite` permission.
#' By default, only the bucket owner can delete the website configuration
#' attached to a bucket. However, bucket owners can grant other users
#' permission to delete the website configuration by writing a bucket
#' policy granting them the `S3:DeleteBucketWebsite` permission.
#' 
#' For more information about hosting websites, see [Hosting Websites on
#' Amazon
#' S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html).
#' 
#' The following operations are related to
#' [`delete_bucket_website`][s3_delete_bucket_website]:
#' 
#' -   [`get_bucket_website`][s3_get_bucket_website]
#' 
#' -   [`put_bucket_website`][s3_put_bucket_website]
#'
#' @usage
#' s3_delete_bucket_website(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name for which you want to remove the website configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_bucket_website(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example deletes bucket website configuration.
#' svc$delete_bucket_website(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_bucket_website
s3_delete_bucket_website <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteBucketWebsite",
    http_method = "DELETE",
    http_path = "/{Bucket}?website",
    paginator = list()
  )
  input <- .s3$delete_bucket_website_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_bucket_website_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_bucket_website <- s3_delete_bucket_website

#' Removes the null version (if there is one) of an object and inserts a
#' delete marker, which becomes the latest version of the object
#'
#' @description
#' Removes the null version (if there is one) of an object and inserts a
#' delete marker, which becomes the latest version of the object. If there
#' isn't a null version, Amazon S3 does not remove any objects.
#' 
#' To remove a specific version, you must be the bucket owner and you must
#' use the version Id subresource. Using this subresource permanently
#' deletes the version. If the object deleted is a delete marker, Amazon S3
#' sets the response header, `x-amz-delete-marker`, to true.
#' 
#' If the object you want to delete is in a bucket where the bucket
#' versioning configuration is MFA Delete enabled, you must include the
#' `x-amz-mfa` request header in the DELETE `versionId` request. Requests
#' that include `x-amz-mfa` must use HTTPS.
#' 
#' For more information about MFA Delete, see [Using MFA
#' Delete](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMFADelete.html).
#' To see sample requests that use versioning, see [Sample
#' Request](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html#ExampleVersionObjectDelete).
#' 
#' You can delete objects by explicitly calling the DELETE Object API or
#' configure its lifecycle
#' ([`put_bucket_lifecycle`][s3_put_bucket_lifecycle]) to enable Amazon S3
#' to remove them for you. If you want to block users or accounts from
#' removing or deleting objects from your bucket, you must deny them the
#' `s3:DeleteObject`, `s3:DeleteObjectVersion`, and
#' `s3:PutLifeCycleConfiguration` actions.
#' 
#' The following operation is related to
#' [`delete_object`][s3_delete_object]:
#' 
#' -   [`put_object`][s3_put_object]
#'
#' @usage
#' s3_delete_object(Bucket, Key, MFA, VersionId, RequestPayer,
#'   BypassGovernanceRetention, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name of the bucket containing the object.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Key &#91;required&#93; Key name of the object to delete.
#' @param MFA The concatenation of the authentication device's serial number, a space,
#' and the value that is displayed on your authentication device. Required
#' to permanently delete a versioned object if versioning is configured
#' with MFA delete enabled.
#' @param VersionId VersionId used to reference a specific version of the object.
#' @param RequestPayer 
#' @param BypassGovernanceRetention Indicates whether S3 Object Lock should bypass Governance-mode
#' restrictions to process this operation.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   DeleteMarker = TRUE|FALSE,
#'   VersionId = "string",
#'   RequestCharged = "requester"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$delete_object(
#'   Bucket = "string",
#'   Key = "string",
#'   MFA = "string",
#'   VersionId = "string",
#'   RequestPayer = "requester",
#'   BypassGovernanceRetention = TRUE|FALSE,
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example deletes an object from an S3 bucket.
#' svc$delete_object(
#'   Bucket = "examplebucket",
#'   Key = "objectkey.jpg"
#' )
#' 
#' # The following example deletes an object from a non-versioned bucket.
#' svc$delete_object(
#'   Bucket = "ExampleBucket",
#'   Key = "HappyFace.jpg"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_object
s3_delete_object <- function(Bucket, Key, MFA = NULL, VersionId = NULL, RequestPayer = NULL, BypassGovernanceRetention = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteObject",
    http_method = "DELETE",
    http_path = "/{Bucket}/{Key+}",
    paginator = list()
  )
  input <- .s3$delete_object_input(Bucket = Bucket, Key = Key, MFA = MFA, VersionId = VersionId, RequestPayer = RequestPayer, BypassGovernanceRetention = BypassGovernanceRetention, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_object_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_object <- s3_delete_object

#' Removes the entire tag set from the specified object
#'
#' @description
#' Removes the entire tag set from the specified object. For more
#' information about managing object tags, see [Object
#' Tagging](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html).
#' 
#' To use this operation, you must have permission to perform the
#' `s3:DeleteObjectTagging` action.
#' 
#' To delete tags of a specific object version, add the `versionId` query
#' parameter in the request. You will need permission for the
#' `s3:DeleteObjectVersionTagging` action.
#' 
#' The following operations are related to
#' [`delete_bucket_metrics_configuration`][s3_delete_bucket_metrics_configuration]:
#' 
#' -   [`put_object_tagging`][s3_put_object_tagging]
#' 
#' -   [`get_object_tagging`][s3_get_object_tagging]
#'
#' @usage
#' s3_delete_object_tagging(Bucket, Key, VersionId, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name containing the objects from which to remove the tags.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Key &#91;required&#93; Name of the object key.
#' @param VersionId The versionId of the object that the tag-set will be removed from.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   VersionId = "string"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$delete_object_tagging(
#'   Bucket = "string",
#'   Key = "string",
#'   VersionId = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example removes tag set associated with the specified
#' # object version. The request specifies both the object key and object
#' # version.
#' svc$delete_object_tagging(
#'   Bucket = "examplebucket",
#'   Key = "HappyFace.jpg",
#'   VersionId = "ydlaNkwWm0SfKJR.T1b1fIdPRbldTYRI"
#' )
#' 
#' # The following example removes tag set associated with the specified
#' # object. If the bucket is versioning enabled, the operation removes tag
#' # set from the latest object version.
#' svc$delete_object_tagging(
#'   Bucket = "examplebucket",
#'   Key = "HappyFace.jpg"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_object_tagging
s3_delete_object_tagging <- function(Bucket, Key, VersionId = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteObjectTagging",
    http_method = "DELETE",
    http_path = "/{Bucket}/{Key+}?tagging",
    paginator = list()
  )
  input <- .s3$delete_object_tagging_input(Bucket = Bucket, Key = Key, VersionId = VersionId, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_object_tagging_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_object_tagging <- s3_delete_object_tagging

#' This operation enables you to delete multiple objects from a bucket
#' using a single HTTP request
#'
#' @description
#' This operation enables you to delete multiple objects from a bucket
#' using a single HTTP request. If you know the object keys that you want
#' to delete, then this operation provides a suitable alternative to
#' sending individual delete requests, reducing per-request overhead.
#' 
#' The request contains a list of up to 1000 keys that you want to delete.
#' In the XML, you provide the object key names, and optionally, version
#' IDs if you want to delete a specific version of the object from a
#' versioning-enabled bucket. For each key, Amazon S3 performs a delete
#' operation and returns the result of that delete, success, or failure, in
#' the response. Note that if the object specified in the request is not
#' found, Amazon S3 returns the result as deleted.
#' 
#' The operation supports two modes for the response: verbose and quiet. By
#' default, the operation uses verbose mode in which the response includes
#' the result of deletion of each key in your request. In quiet mode the
#' response includes only keys where the delete operation encountered an
#' error. For a successful deletion, the operation does not return any
#' information about the delete in the response body.
#' 
#' When performing this operation on an MFA Delete enabled bucket, that
#' attempts to delete any versioned objects, you must include an MFA token.
#' If you do not provide one, the entire request will fail, even if there
#' are non-versioned objects you are trying to delete. If you provide an
#' invalid token, whether there are versioned keys in the request or not,
#' the entire Multi-Object Delete request will fail. For information about
#' MFA Delete, see [MFA
#' Delete](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html#MultiFactorAuthenticationDelete).
#' 
#' Finally, the Content-MD5 header is required for all Multi-Object Delete
#' requests. Amazon S3 uses the header value to ensure that your request
#' body has not been altered in transit.
#' 
#' The following operations are related to
#' [`delete_objects`][s3_delete_objects]:
#' 
#' -   [`create_multipart_upload`][s3_create_multipart_upload]
#' 
#' -   [`upload_part`][s3_upload_part]
#' 
#' -   [`complete_multipart_upload`][s3_complete_multipart_upload]
#' 
#' -   [`list_parts`][s3_list_parts]
#' 
#' -   [`abort_multipart_upload`][s3_abort_multipart_upload]
#'
#' @usage
#' s3_delete_objects(Bucket, Delete, MFA, RequestPayer,
#'   BypassGovernanceRetention, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name containing the objects to delete.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Delete &#91;required&#93; Container for the request.
#' @param MFA The concatenation of the authentication device's serial number, a space,
#' and the value that is displayed on your authentication device. Required
#' to permanently delete a versioned object if versioning is configured
#' with MFA delete enabled.
#' @param RequestPayer 
#' @param BypassGovernanceRetention 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.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Deleted = list(
#'     list(
#'       Key = "string",
#'       VersionId = "string",
#'       DeleteMarker = TRUE|FALSE,
#'       DeleteMarkerVersionId = "string"
#'     )
#'   ),
#'   RequestCharged = "requester",
#'   Errors = list(
#'     list(
#'       Key = "string",
#'       VersionId = "string",
#'       Code = "string",
#'       Message = "string"
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$delete_objects(
#'   Bucket = "string",
#'   Delete = list(
#'     Objects = list(
#'       list(
#'         Key = "string",
#'         VersionId = "string"
#'       )
#'     ),
#'     Quiet = TRUE|FALSE
#'   ),
#'   MFA = "string",
#'   RequestPayer = "requester",
#'   BypassGovernanceRetention = TRUE|FALSE,
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example deletes objects from a bucket. The request
#' # specifies object versions. S3 deletes specific object versions and
#' # returns the key and versions of deleted objects in the response.
#' svc$delete_objects(
#'   Bucket = "examplebucket",
#'   Delete = list(
#'     Objects = list(
#'       list(
#'         Key = "HappyFace.jpg",
#'         VersionId = "2LWg7lQLnY41.maGB5Z6SWW.dcq0vx7b"
#'       ),
#'       list(
#'         Key = "HappyFace.jpg",
#'         VersionId = "yoz3HB.ZhCS_tKVEmIOr7qYyyAaZSKVd"
#'       )
#'     ),
#'     Quiet = FALSE
#'   )
#' )
#' 
#' # The following example deletes objects from a bucket. The bucket is
#' # versioned, and the request does not specify the object version to
#' # delete. In this case, all versions remain in the bucket and S3 adds a
#' # delete marker.
#' svc$delete_objects(
#'   Bucket = "examplebucket",
#'   Delete = list(
#'     Objects = list(
#'       list(
#'         Key = "objectkey1"
#'       ),
#'       list(
#'         Key = "objectkey2"
#'       )
#'     ),
#'     Quiet = FALSE
#'   )
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_delete_objects
s3_delete_objects <- function(Bucket, Delete, MFA = NULL, RequestPayer = NULL, BypassGovernanceRetention = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeleteObjects",
    http_method = "POST",
    http_path = "/{Bucket}?delete",
    paginator = list()
  )
  input <- .s3$delete_objects_input(Bucket = Bucket, Delete = Delete, MFA = MFA, RequestPayer = RequestPayer, BypassGovernanceRetention = BypassGovernanceRetention, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_objects_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_objects <- s3_delete_objects

#' Removes the PublicAccessBlock configuration for an Amazon S3 bucket
#'
#' @description
#' Removes the `PublicAccessBlock` configuration for an Amazon S3 bucket.
#' To use this operation, you must have the `s3:PutBucketPublicAccessBlock`
#' permission. For more information about permissions, see [Permissions
#' Related to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' The following operations are related to
#' [`delete_public_access_block`][s3_delete_public_access_block]:
#' 
#' -   [Using Amazon S3 Block Public
#'     Access](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)
#' 
#' -   [`get_public_access_block`][s3_get_public_access_block]
#' 
#' -   [`put_public_access_block`][s3_put_public_access_block]
#' 
#' -   [`get_bucket_policy_status`][s3_get_bucket_policy_status]
#'
#' @usage
#' s3_delete_public_access_block(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The Amazon S3 bucket whose `PublicAccessBlock` configuration you want to
#' delete.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$delete_public_access_block(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_delete_public_access_block
s3_delete_public_access_block <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "DeletePublicAccessBlock",
    http_method = "DELETE",
    http_path = "/{Bucket}?publicAccessBlock",
    paginator = list()
  )
  input <- .s3$delete_public_access_block_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$delete_public_access_block_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$delete_public_access_block <- s3_delete_public_access_block

#' This implementation of the GET operation uses the accelerate subresource
#' to return the Transfer Acceleration state of a bucket, which is either
#' Enabled or Suspended
#'
#' @description
#' This implementation of the GET operation uses the `accelerate`
#' subresource to return the Transfer Acceleration state of a bucket, which
#' is either `Enabled` or `Suspended`. Amazon S3 Transfer Acceleration is a
#' bucket-level feature that enables you to perform faster data transfers
#' to and from Amazon S3.
#' 
#' To use this operation, you must have permission to perform the
#' `s3:GetAccelerateConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' You set the Transfer Acceleration state of an existing bucket to
#' `Enabled` or `Suspended` by using the
#' [`put_bucket_accelerate_configuration`][s3_put_bucket_accelerate_configuration]
#' operation.
#' 
#' A GET `accelerate` request does not return a state value for a bucket
#' that has no transfer acceleration state. A bucket has no Transfer
#' Acceleration state if a state has never been set on the bucket.
#' 
#' For more information about transfer acceleration, see [Transfer
#' Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html)
#' in the Amazon Simple Storage Service Developer Guide.
#' 
#' **Related Resources**
#' 
#' -   [`put_bucket_accelerate_configuration`][s3_put_bucket_accelerate_configuration]
#'
#' @usage
#' s3_get_bucket_accelerate_configuration(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which the accelerate configuration is
#' retrieved.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Status = "Enabled"|"Suspended"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_accelerate_configuration(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_accelerate_configuration
s3_get_bucket_accelerate_configuration <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketAccelerateConfiguration",
    http_method = "GET",
    http_path = "/{Bucket}?accelerate",
    paginator = list()
  )
  input <- .s3$get_bucket_accelerate_configuration_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_accelerate_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_accelerate_configuration <- s3_get_bucket_accelerate_configuration

#' This implementation of the GET operation uses the acl subresource to
#' return the access control list (ACL) of a bucket
#'
#' @description
#' This implementation of the `GET` operation uses the `acl` subresource to
#' return the access control list (ACL) of a bucket. To use `GET` to return
#' the ACL of the bucket, you must have `READ_ACP` access to the bucket. If
#' `READ_ACP` permission is granted to the anonymous user, you can return
#' the ACL of the bucket without using an authorization header.
#' 
#' **Related Resources**
#' 
#' -   [`list_objects`][s3_list_objects]
#'
#' @usage
#' s3_get_bucket_acl(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; Specifies the S3 bucket whose ACL is being requested.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Owner = list(
#'     DisplayName = "string",
#'     ID = "string"
#'   ),
#'   Grants = list(
#'     list(
#'       Grantee = list(
#'         DisplayName = "string",
#'         EmailAddress = "string",
#'         ID = "string",
#'         Type = "CanonicalUser"|"AmazonCustomerByEmail"|"Group",
#'         URI = "string"
#'       ),
#'       Permission = "FULL_CONTROL"|"WRITE"|"WRITE_ACP"|"READ"|"READ_ACP"
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_acl(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_acl
s3_get_bucket_acl <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketAcl",
    http_method = "GET",
    http_path = "/{Bucket}?acl",
    paginator = list()
  )
  input <- .s3$get_bucket_acl_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_acl_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_acl <- s3_get_bucket_acl

#' This implementation of the GET operation returns an analytics
#' configuration (identified by the analytics configuration ID) from the
#' bucket
#'
#' @description
#' This implementation of the GET operation returns an analytics
#' configuration (identified by the analytics configuration ID) from the
#' bucket.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:GetAnalyticsConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' For information about Amazon S3 analytics feature, see [Amazon S3
#' Analytics – Storage Class
#' Analysis](https://docs.aws.amazon.com/AmazonS3/latest/userguide/analytics-storage-class.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' **Related Resources**
#' 
#' -   [`delete_bucket_analytics_configuration`][s3_delete_bucket_analytics_configuration]
#' 
#' -   [`list_bucket_analytics_configurations`][s3_list_bucket_analytics_configurations]
#' 
#' -   [`put_bucket_analytics_configuration`][s3_put_bucket_analytics_configuration]
#'
#' @usage
#' s3_get_bucket_analytics_configuration(Bucket, Id, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket from which an analytics configuration is
#' retrieved.
#' @param Id &#91;required&#93; The ID that identifies the analytics configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   AnalyticsConfiguration = list(
#'     Id = "string",
#'     Filter = list(
#'       Prefix = "string",
#'       Tag = list(
#'         Key = "string",
#'         Value = "string"
#'       ),
#'       And = list(
#'         Prefix = "string",
#'         Tags = list(
#'           list(
#'             Key = "string",
#'             Value = "string"
#'           )
#'         )
#'       )
#'     ),
#'     StorageClassAnalysis = list(
#'       DataExport = list(
#'         OutputSchemaVersion = "V_1",
#'         Destination = list(
#'           S3BucketDestination = list(
#'             Format = "CSV",
#'             BucketAccountId = "string",
#'             Bucket = "string",
#'             Prefix = "string"
#'           )
#'         )
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_analytics_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_analytics_configuration
s3_get_bucket_analytics_configuration <- function(Bucket, Id, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketAnalyticsConfiguration",
    http_method = "GET",
    http_path = "/{Bucket}?analytics",
    paginator = list()
  )
  input <- .s3$get_bucket_analytics_configuration_input(Bucket = Bucket, Id = Id, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_analytics_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_analytics_configuration <- s3_get_bucket_analytics_configuration

#' Returns the cors configuration information set for the bucket
#'
#' @description
#' Returns the cors configuration information set for the bucket.
#' 
#' To use this operation, you must have permission to perform the
#' s3:GetBucketCORS action. By default, the bucket owner has this
#' permission and can grant it to others.
#' 
#' For more information about cors, see [Enabling Cross-Origin Resource
#' Sharing](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html).
#' 
#' The following operations are related to
#' [`get_bucket_cors`][s3_get_bucket_cors]:
#' 
#' -   [`put_bucket_cors`][s3_put_bucket_cors]
#' 
#' -   [`delete_bucket_cors`][s3_delete_bucket_cors]
#'
#' @usage
#' s3_get_bucket_cors(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name for which to get the cors configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   CORSRules = list(
#'     list(
#'       AllowedHeaders = list(
#'         "string"
#'       ),
#'       AllowedMethods = list(
#'         "string"
#'       ),
#'       AllowedOrigins = list(
#'         "string"
#'       ),
#'       ExposeHeaders = list(
#'         "string"
#'       ),
#'       MaxAgeSeconds = 123
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_cors(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example returns cross-origin resource sharing (CORS)
#' # configuration set on a bucket.
#' svc$get_bucket_cors(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_cors
s3_get_bucket_cors <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketCors",
    http_method = "GET",
    http_path = "/{Bucket}?cors",
    paginator = list()
  )
  input <- .s3$get_bucket_cors_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_cors_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_cors <- s3_get_bucket_cors

#' Returns the default encryption configuration for an Amazon S3 bucket
#'
#' @description
#' Returns the default encryption configuration for an Amazon S3 bucket.
#' For information about the Amazon S3 default encryption feature, see
#' [Amazon S3 Default Bucket
#' Encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html).
#' 
#' To use this operation, you must have permission to perform the
#' `s3:GetEncryptionConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' The following operations are related to
#' [`get_bucket_encryption`][s3_get_bucket_encryption]:
#' 
#' -   [`put_bucket_encryption`][s3_put_bucket_encryption]
#' 
#' -   [`delete_bucket_encryption`][s3_delete_bucket_encryption]
#'
#' @usage
#' s3_get_bucket_encryption(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket from which the server-side encryption
#' configuration is retrieved.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   ServerSideEncryptionConfiguration = list(
#'     Rules = list(
#'       list(
#'         ApplyServerSideEncryptionByDefault = list(
#'           SSEAlgorithm = "AES256"|"aws:kms",
#'           KMSMasterKeyID = "string"
#'         ),
#'         BucketKeyEnabled = TRUE|FALSE
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_encryption(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_encryption
s3_get_bucket_encryption <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketEncryption",
    http_method = "GET",
    http_path = "/{Bucket}?encryption",
    paginator = list()
  )
  input <- .s3$get_bucket_encryption_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_encryption_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_encryption <- s3_get_bucket_encryption

#' Gets the S3 Intelligent-Tiering configuration from the specified bucket
#'
#' @description
#' Gets the S3 Intelligent-Tiering configuration from the specified bucket.
#' 
#' The S3 Intelligent-Tiering storage class is designed to optimize storage
#' costs by automatically moving data to the most cost-effective storage
#' access tier, without additional operational overhead. S3
#' Intelligent-Tiering delivers automatic cost savings by moving data
#' between access tiers, when access patterns change.
#' 
#' The S3 Intelligent-Tiering storage class is suitable for objects larger
#' than 128 KB that you plan to store for at least 30 days. If the size of
#' an object is less than 128 KB, it is not eligible for auto-tiering.
#' Smaller objects can be stored, but they are always charged at the
#' frequent access tier rates in the S3 Intelligent-Tiering storage class.
#' 
#' If you delete an object before the end of the 30-day minimum storage
#' duration period, you are charged for 30 days. For more information, see
#' [Storage class for automatically optimizing frequently and infrequently
#' accessed
#' objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-dynamic-data-access).
#' 
#' Operations related to
#' [`get_bucket_intelligent_tiering_configuration`][s3_get_bucket_intelligent_tiering_configuration]
#' include:
#' 
#' -   [`delete_bucket_intelligent_tiering_configuration`][s3_delete_bucket_intelligent_tiering_configuration]
#' 
#' -   [`put_bucket_intelligent_tiering_configuration`][s3_put_bucket_intelligent_tiering_configuration]
#' 
#' -   [`list_bucket_intelligent_tiering_configurations`][s3_list_bucket_intelligent_tiering_configurations]
#'
#' @usage
#' s3_get_bucket_intelligent_tiering_configuration(Bucket, Id)
#'
#' @param Bucket &#91;required&#93; The name of the Amazon S3 bucket whose configuration you want to modify
#' or retrieve.
#' @param Id &#91;required&#93; The ID used to identify the S3 Intelligent-Tiering configuration.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   IntelligentTieringConfiguration = list(
#'     Id = "string",
#'     Filter = list(
#'       Prefix = "string",
#'       Tag = list(
#'         Key = "string",
#'         Value = "string"
#'       ),
#'       And = list(
#'         Prefix = "string",
#'         Tags = list(
#'           list(
#'             Key = "string",
#'             Value = "string"
#'           )
#'         )
#'       )
#'     ),
#'     Status = "Enabled"|"Disabled",
#'     Tierings = list(
#'       list(
#'         Days = 123,
#'         AccessTier = "ARCHIVE_ACCESS"|"DEEP_ARCHIVE_ACCESS"
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_intelligent_tiering_configuration(
#'   Bucket = "string",
#'   Id = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_intelligent_tiering_configuration
s3_get_bucket_intelligent_tiering_configuration <- function(Bucket, Id) {
  op <- new_operation(
    name = "GetBucketIntelligentTieringConfiguration",
    http_method = "GET",
    http_path = "/{Bucket}?intelligent-tiering",
    paginator = list()
  )
  input <- .s3$get_bucket_intelligent_tiering_configuration_input(Bucket = Bucket, Id = Id)
  output <- .s3$get_bucket_intelligent_tiering_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_intelligent_tiering_configuration <- s3_get_bucket_intelligent_tiering_configuration

#' Returns an inventory configuration (identified by the inventory
#' configuration ID) from the bucket
#'
#' @description
#' Returns an inventory configuration (identified by the inventory
#' configuration ID) from the bucket.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:GetInventoryConfiguration` action. The bucket owner has this
#' permission by default and can grant this permission to others. For more
#' information about permissions, see [Permissions Related to Bucket
#' Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' For information about the Amazon S3 inventory feature, see [Amazon S3
#' Inventory](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html).
#' 
#' The following operations are related to
#' [`get_bucket_inventory_configuration`][s3_get_bucket_inventory_configuration]:
#' 
#' -   [`delete_bucket_inventory_configuration`][s3_delete_bucket_inventory_configuration]
#' 
#' -   [`list_bucket_inventory_configurations`][s3_list_bucket_inventory_configurations]
#' 
#' -   [`put_bucket_inventory_configuration`][s3_put_bucket_inventory_configuration]
#'
#' @usage
#' s3_get_bucket_inventory_configuration(Bucket, Id, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the inventory configuration to
#' retrieve.
#' @param Id &#91;required&#93; The ID used to identify the inventory configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   InventoryConfiguration = list(
#'     Destination = list(
#'       S3BucketDestination = list(
#'         AccountId = "string",
#'         Bucket = "string",
#'         Format = "CSV"|"ORC"|"Parquet",
#'         Prefix = "string",
#'         Encryption = list(
#'           SSES3 = list(),
#'           SSEKMS = list(
#'             KeyId = "string"
#'           )
#'         )
#'       )
#'     ),
#'     IsEnabled = TRUE|FALSE,
#'     Filter = list(
#'       Prefix = "string"
#'     ),
#'     Id = "string",
#'     IncludedObjectVersions = "All"|"Current",
#'     OptionalFields = list(
#'       "Size"|"LastModifiedDate"|"StorageClass"|"ETag"|"IsMultipartUploaded"|"ReplicationStatus"|"EncryptionStatus"|"ObjectLockRetainUntilDate"|"ObjectLockMode"|"ObjectLockLegalHoldStatus"|"IntelligentTieringAccessTier"
#'     ),
#'     Schedule = list(
#'       Frequency = "Daily"|"Weekly"
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_inventory_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_inventory_configuration
s3_get_bucket_inventory_configuration <- function(Bucket, Id, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketInventoryConfiguration",
    http_method = "GET",
    http_path = "/{Bucket}?inventory",
    paginator = list()
  )
  input <- .s3$get_bucket_inventory_configuration_input(Bucket = Bucket, Id = Id, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_inventory_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_inventory_configuration <- s3_get_bucket_inventory_configuration

#' For an updated version of this API, see GetBucketLifecycleConfiguration
#'
#' @description
#' For an updated version of this API, see
#' [`get_bucket_lifecycle_configuration`][s3_get_bucket_lifecycle_configuration].
#' If you configured a bucket lifecycle using the `filter` element, you
#' should see the updated version of this topic. This topic is provided for
#' backward compatibility.
#' 
#' Returns the lifecycle configuration information set on the bucket. For
#' information about lifecycle configuration, see [Object Lifecycle
#' Management](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html).
#' 
#' To use this operation, you must have permission to perform the
#' `s3:GetLifecycleConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' [`get_bucket_lifecycle`][s3_get_bucket_lifecycle] has the following
#' special error:
#' 
#' -   Error code: `NoSuchLifecycleConfiguration`
#' 
#'     -   Description: The lifecycle configuration does not exist.
#' 
#'     -   HTTP Status Code: 404 Not Found
#' 
#'     -   SOAP Fault Code Prefix: Client
#' 
#' The following operations are related to
#' [`get_bucket_lifecycle`][s3_get_bucket_lifecycle]:
#' 
#' -   [`get_bucket_lifecycle_configuration`][s3_get_bucket_lifecycle_configuration]
#' 
#' -   [`put_bucket_lifecycle`][s3_put_bucket_lifecycle]
#' 
#' -   [`delete_bucket_lifecycle`][s3_delete_bucket_lifecycle]
#'
#' @usage
#' s3_get_bucket_lifecycle(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to get the lifecycle information.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Rules = list(
#'     list(
#'       Expiration = list(
#'         Date = as.POSIXct(
#'           "2015-01-01"
#'         ),
#'         Days = 123,
#'         ExpiredObjectDeleteMarker = TRUE|FALSE
#'       ),
#'       ID = "string",
#'       Prefix = "string",
#'       Status = "Enabled"|"Disabled",
#'       Transition = list(
#'         Date = as.POSIXct(
#'           "2015-01-01"
#'         ),
#'         Days = 123,
#'         StorageClass = "GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"
#'       ),
#'       NoncurrentVersionTransition = list(
#'         NoncurrentDays = 123,
#'         StorageClass = "GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"
#'       ),
#'       NoncurrentVersionExpiration = list(
#'         NoncurrentDays = 123
#'       ),
#'       AbortIncompleteMultipartUpload = list(
#'         DaysAfterInitiation = 123
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_lifecycle(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example gets ACL on the specified bucket.
#' svc$get_bucket_lifecycle(
#'   Bucket = "acl1"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_lifecycle
s3_get_bucket_lifecycle <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketLifecycle",
    http_method = "GET",
    http_path = "/{Bucket}?lifecycle",
    paginator = list()
  )
  input <- .s3$get_bucket_lifecycle_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_lifecycle_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_lifecycle <- s3_get_bucket_lifecycle

#' Bucket lifecycle configuration now supports specifying a lifecycle rule
#' using an object key name prefix, one or more object tags, or a
#' combination of both
#'
#' @description
#' Bucket lifecycle configuration now supports specifying a lifecycle rule
#' using an object key name prefix, one or more object tags, or a
#' combination of both. Accordingly, this section describes the latest API.
#' The response describes the new filter element that you can use to
#' specify a filter to select a subset of objects to which the rule
#' applies. If you are using a previous version of the lifecycle
#' configuration, it still works. For the earlier API description, see
#' [`get_bucket_lifecycle`][s3_get_bucket_lifecycle].
#' 
#' Returns the lifecycle configuration information set on the bucket. For
#' information about lifecycle configuration, see [Object Lifecycle
#' Management](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html).
#' 
#' To use this operation, you must have permission to perform the
#' `s3:GetLifecycleConfiguration` action. The bucket owner has this
#' permission, by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' [`get_bucket_lifecycle_configuration`][s3_get_bucket_lifecycle_configuration]
#' has the following special error:
#' 
#' -   Error code: `NoSuchLifecycleConfiguration`
#' 
#'     -   Description: The lifecycle configuration does not exist.
#' 
#'     -   HTTP Status Code: 404 Not Found
#' 
#'     -   SOAP Fault Code Prefix: Client
#' 
#' The following operations are related to
#' [`get_bucket_lifecycle_configuration`][s3_get_bucket_lifecycle_configuration]:
#' 
#' -   [`get_bucket_lifecycle`][s3_get_bucket_lifecycle]
#' 
#' -   [`put_bucket_lifecycle`][s3_put_bucket_lifecycle]
#' 
#' -   [`delete_bucket_lifecycle`][s3_delete_bucket_lifecycle]
#'
#' @usage
#' s3_get_bucket_lifecycle_configuration(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to get the lifecycle information.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Rules = list(
#'     list(
#'       Expiration = list(
#'         Date = as.POSIXct(
#'           "2015-01-01"
#'         ),
#'         Days = 123,
#'         ExpiredObjectDeleteMarker = TRUE|FALSE
#'       ),
#'       ID = "string",
#'       Prefix = "string",
#'       Filter = list(
#'         Prefix = "string",
#'         Tag = list(
#'           Key = "string",
#'           Value = "string"
#'         ),
#'         And = list(
#'           Prefix = "string",
#'           Tags = list(
#'             list(
#'               Key = "string",
#'               Value = "string"
#'             )
#'           )
#'         )
#'       ),
#'       Status = "Enabled"|"Disabled",
#'       Transitions = list(
#'         list(
#'           Date = as.POSIXct(
#'             "2015-01-01"
#'           ),
#'           Days = 123,
#'           StorageClass = "GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"
#'         )
#'       ),
#'       NoncurrentVersionTransitions = list(
#'         list(
#'           NoncurrentDays = 123,
#'           StorageClass = "GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"
#'         )
#'       ),
#'       NoncurrentVersionExpiration = list(
#'         NoncurrentDays = 123
#'       ),
#'       AbortIncompleteMultipartUpload = list(
#'         DaysAfterInitiation = 123
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_lifecycle_configuration(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves lifecycle configuration on set on a
#' # bucket.
#' svc$get_bucket_lifecycle_configuration(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_lifecycle_configuration
s3_get_bucket_lifecycle_configuration <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketLifecycleConfiguration",
    http_method = "GET",
    http_path = "/{Bucket}?lifecycle",
    paginator = list()
  )
  input <- .s3$get_bucket_lifecycle_configuration_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_lifecycle_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_lifecycle_configuration <- s3_get_bucket_lifecycle_configuration

#' Returns the Region the bucket resides in
#'
#' @description
#' Returns the Region the bucket resides in. You set the bucket's Region
#' using the `LocationConstraint` request parameter in a
#' [`create_bucket`][s3_create_bucket] request. For more information, see
#' [`create_bucket`][s3_create_bucket].
#' 
#' To use this implementation of the operation, you must be the bucket
#' owner.
#' 
#' The following operations are related to
#' [`get_bucket_location`][s3_get_bucket_location]:
#' 
#' -   [`get_object`][s3_get_object]
#' 
#' -   [`create_bucket`][s3_create_bucket]
#'
#' @usage
#' s3_get_bucket_location(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to get the location.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   LocationConstraint = "af-south-1"|"ap-east-1"|"ap-northeast-1"|"ap-northeast-2"|"ap-northeast-3"|"ap-south-1"|"ap-southeast-1"|"ap-southeast-2"|"ca-central-1"|"cn-north-1"|"cn-northwest-1"|"EU"|"eu-central-1"|"eu-north-1"|"eu-south-1"|"eu-west-1"|"eu-west-2"|"eu-west-3"|"me-south-1"|"sa-east-1"|"us-east-2"|"us-gov-east-1"|"us-gov-west-1"|"us-west-1"|"us-west-2"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_location(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example returns bucket location.
#' svc$get_bucket_location(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_location
s3_get_bucket_location <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketLocation",
    http_method = "GET",
    http_path = "/{Bucket}?location",
    paginator = list()
  )
  input <- .s3$get_bucket_location_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_location_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_location <- s3_get_bucket_location

#' Returns the logging status of a bucket and the permissions users have to
#' view and modify that status
#'
#' @description
#' Returns the logging status of a bucket and the permissions users have to
#' view and modify that status. To use GET, you must be the bucket owner.
#' 
#' The following operations are related to
#' [`get_bucket_logging`][s3_get_bucket_logging]:
#' 
#' -   [`create_bucket`][s3_create_bucket]
#' 
#' -   [`put_bucket_logging`][s3_put_bucket_logging]
#'
#' @usage
#' s3_get_bucket_logging(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name for which to get the logging information.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   LoggingEnabled = list(
#'     TargetBucket = "string",
#'     TargetGrants = list(
#'       list(
#'         Grantee = list(
#'           DisplayName = "string",
#'           EmailAddress = "string",
#'           ID = "string",
#'           Type = "CanonicalUser"|"AmazonCustomerByEmail"|"Group",
#'           URI = "string"
#'         ),
#'         Permission = "FULL_CONTROL"|"READ"|"WRITE"
#'       )
#'     ),
#'     TargetPrefix = "string"
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_logging(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_logging
s3_get_bucket_logging <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketLogging",
    http_method = "GET",
    http_path = "/{Bucket}?logging",
    paginator = list()
  )
  input <- .s3$get_bucket_logging_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_logging_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_logging <- s3_get_bucket_logging

#' Gets a metrics configuration (specified by the metrics configuration ID)
#' from the bucket
#'
#' @description
#' Gets a metrics configuration (specified by the metrics configuration ID)
#' from the bucket. Note that this doesn't include the daily storage
#' metrics.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:GetMetricsConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' For information about CloudWatch request metrics for Amazon S3, see
#' [Monitoring Metrics with Amazon
#' CloudWatch](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cloudwatch-monitoring.html).
#' 
#' The following operations are related to
#' [`get_bucket_metrics_configuration`][s3_get_bucket_metrics_configuration]:
#' 
#' -   [`put_bucket_metrics_configuration`][s3_put_bucket_metrics_configuration]
#' 
#' -   [`delete_bucket_metrics_configuration`][s3_delete_bucket_metrics_configuration]
#' 
#' -   [`list_bucket_metrics_configurations`][s3_list_bucket_metrics_configurations]
#' 
#' -   [Monitoring Metrics with Amazon
#'     CloudWatch](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cloudwatch-monitoring.html)
#'
#' @usage
#' s3_get_bucket_metrics_configuration(Bucket, Id, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the metrics configuration to retrieve.
#' @param Id &#91;required&#93; The ID used to identify the metrics configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   MetricsConfiguration = list(
#'     Id = "string",
#'     Filter = list(
#'       Prefix = "string",
#'       Tag = list(
#'         Key = "string",
#'         Value = "string"
#'       ),
#'       And = list(
#'         Prefix = "string",
#'         Tags = list(
#'           list(
#'             Key = "string",
#'             Value = "string"
#'           )
#'         )
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_metrics_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_metrics_configuration
s3_get_bucket_metrics_configuration <- function(Bucket, Id, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketMetricsConfiguration",
    http_method = "GET",
    http_path = "/{Bucket}?metrics",
    paginator = list()
  )
  input <- .s3$get_bucket_metrics_configuration_input(Bucket = Bucket, Id = Id, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_metrics_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_metrics_configuration <- s3_get_bucket_metrics_configuration

#' No longer used, see GetBucketNotificationConfiguration
#'
#' @description
#' No longer used, see
#' [`get_bucket_notification_configuration`][s3_get_bucket_notification_configuration].
#'
#' @usage
#' s3_get_bucket_notification(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to get the notification configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   TopicConfiguration = list(
#'     Id = "string",
#'     Events = list(
#'       "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'     ),
#'     Event = "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold",
#'     Topic = "string"
#'   ),
#'   QueueConfiguration = list(
#'     Id = "string",
#'     Event = "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold",
#'     Events = list(
#'       "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'     ),
#'     Queue = "string"
#'   ),
#'   CloudFunctionConfiguration = list(
#'     Id = "string",
#'     Event = "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold",
#'     Events = list(
#'       "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'     ),
#'     CloudFunction = "string",
#'     InvocationRole = "string"
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_notification(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example returns notification configuration set on a
#' # bucket.
#' svc$get_bucket_notification(
#'   Bucket = "examplebucket"
#' )
#' 
#' # The following example returns notification configuration set on a
#' # bucket.
#' svc$get_bucket_notification(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_notification
s3_get_bucket_notification <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketNotification",
    http_method = "GET",
    http_path = "/{Bucket}?notification",
    paginator = list()
  )
  input <- .s3$get_bucket_notification_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_notification_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_notification <- s3_get_bucket_notification

#' Returns the notification configuration of a bucket
#'
#' @description
#' Returns the notification configuration of a bucket.
#' 
#' If notifications are not enabled on the bucket, the operation returns an
#' empty `NotificationConfiguration` element.
#' 
#' By default, you must be the bucket owner to read the notification
#' configuration of a bucket. However, the bucket owner can use a bucket
#' policy to grant permission to other users to read this configuration
#' with the `s3:GetBucketNotification` permission.
#' 
#' For more information about setting and reading the notification
#' configuration on a bucket, see [Setting Up Notification of Bucket
#' Events](https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html).
#' For more information about bucket policies, see [Using Bucket
#' Policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html).
#' 
#' The following operation is related to
#' [`get_bucket_notification`][s3_get_bucket_notification]:
#' 
#' -   [`put_bucket_notification`][s3_put_bucket_notification]
#'
#' @usage
#' s3_get_bucket_notification_configuration(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to get the notification configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   TopicConfigurations = list(
#'     list(
#'       Id = "string",
#'       TopicArn = "string",
#'       Events = list(
#'         "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'       ),
#'       Filter = list(
#'         Key = list(
#'           FilterRules = list(
#'             list(
#'               Name = "prefix"|"suffix",
#'               Value = "string"
#'             )
#'           )
#'         )
#'       )
#'     )
#'   ),
#'   QueueConfigurations = list(
#'     list(
#'       Id = "string",
#'       QueueArn = "string",
#'       Events = list(
#'         "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'       ),
#'       Filter = list(
#'         Key = list(
#'           FilterRules = list(
#'             list(
#'               Name = "prefix"|"suffix",
#'               Value = "string"
#'             )
#'           )
#'         )
#'       )
#'     )
#'   ),
#'   LambdaFunctionConfigurations = list(
#'     list(
#'       Id = "string",
#'       LambdaFunctionArn = "string",
#'       Events = list(
#'         "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'       ),
#'       Filter = list(
#'         Key = list(
#'           FilterRules = list(
#'             list(
#'               Name = "prefix"|"suffix",
#'               Value = "string"
#'             )
#'           )
#'         )
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_notification_configuration(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_notification_configuration
s3_get_bucket_notification_configuration <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketNotificationConfiguration",
    http_method = "GET",
    http_path = "/{Bucket}?notification",
    paginator = list()
  )
  input <- .s3$get_bucket_notification_configuration_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_notification_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_notification_configuration <- s3_get_bucket_notification_configuration

#' Retrieves OwnershipControls for an Amazon S3 bucket
#'
#' @description
#' Retrieves `OwnershipControls` for an Amazon S3 bucket. To use this
#' operation, you must have the `s3:GetBucketOwnershipControls` permission.
#' For more information about Amazon S3 permissions, see [Specifying
#' Permissions in a
#' Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html).
#' 
#' For information about Amazon S3 Object Ownership, see [Using Object
#' Ownership](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html).
#' 
#' The following operations are related to
#' [`get_bucket_ownership_controls`][s3_get_bucket_ownership_controls]:
#' 
#' -   [`put_bucket_ownership_controls`][s3_put_bucket_ownership_controls]
#' 
#' -   [`delete_bucket_ownership_controls`][s3_delete_bucket_ownership_controls]
#'
#' @usage
#' s3_get_bucket_ownership_controls(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the Amazon S3 bucket whose `OwnershipControls` you want to
#' retrieve.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   OwnershipControls = list(
#'     Rules = list(
#'       list(
#'         ObjectOwnership = "BucketOwnerPreferred"|"ObjectWriter"
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_ownership_controls(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_ownership_controls
s3_get_bucket_ownership_controls <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketOwnershipControls",
    http_method = "GET",
    http_path = "/{Bucket}?ownershipControls",
    paginator = list()
  )
  input <- .s3$get_bucket_ownership_controls_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_ownership_controls_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_ownership_controls <- s3_get_bucket_ownership_controls

#' Returns the policy of a specified bucket
#'
#' @description
#' Returns the policy of a specified bucket. If you are using an identity
#' other than the root user of the AWS account that owns the bucket, the
#' calling identity must have the
#' [`get_bucket_policy`][s3_get_bucket_policy] permissions on the specified
#' bucket and belong to the bucket owner's account in order to use this
#' operation.
#' 
#' If you don't have [`get_bucket_policy`][s3_get_bucket_policy]
#' permissions, Amazon S3 returns a `403 Access Denied` error. If you have
#' the correct permissions, but you're not using an identity that belongs
#' to the bucket owner's account, Amazon S3 returns a
#' `405 Method Not Allowed` error.
#' 
#' As a security precaution, the root user of the AWS account that owns a
#' bucket can always use this operation, even if the policy explicitly
#' denies the root user the ability to perform this action.
#' 
#' For more information about bucket policies, see [Using Bucket Policies
#' and User
#' Policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html).
#' 
#' The following operation is related to
#' [`get_bucket_policy`][s3_get_bucket_policy]:
#' 
#' -   [`get_object`][s3_get_object]
#'
#' @usage
#' s3_get_bucket_policy(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name for which to get the bucket policy.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Policy = "string"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_policy(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example returns bucket policy associated with a bucket.
#' svc$get_bucket_policy(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_policy
s3_get_bucket_policy <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketPolicy",
    http_method = "GET",
    http_path = "/{Bucket}?policy",
    paginator = list()
  )
  input <- .s3$get_bucket_policy_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_policy_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_policy <- s3_get_bucket_policy

#' Retrieves the policy status for an Amazon S3 bucket, indicating whether
#' the bucket is public
#'
#' @description
#' Retrieves the policy status for an Amazon S3 bucket, indicating whether
#' the bucket is public. In order to use this operation, you must have the
#' `s3:GetBucketPolicyStatus` permission. For more information about Amazon
#' S3 permissions, see [Specifying Permissions in a
#' Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html).
#' 
#' For more information about when Amazon S3 considers a bucket public, see
#' [The Meaning of
#' "Public"](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html#access-control-block-public-access-policy-status).
#' 
#' The following operations are related to
#' [`get_bucket_policy_status`][s3_get_bucket_policy_status]:
#' 
#' -   [Using Amazon S3 Block Public
#'     Access](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)
#' 
#' -   [`get_public_access_block`][s3_get_public_access_block]
#' 
#' -   [`put_public_access_block`][s3_put_public_access_block]
#' 
#' -   [`delete_public_access_block`][s3_delete_public_access_block]
#'
#' @usage
#' s3_get_bucket_policy_status(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the Amazon S3 bucket whose policy status you want to
#' retrieve.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   PolicyStatus = list(
#'     IsPublic = TRUE|FALSE
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_policy_status(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_policy_status
s3_get_bucket_policy_status <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketPolicyStatus",
    http_method = "GET",
    http_path = "/{Bucket}?policyStatus",
    paginator = list()
  )
  input <- .s3$get_bucket_policy_status_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_policy_status_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_policy_status <- s3_get_bucket_policy_status

#' Returns the replication configuration of a bucket
#'
#' @description
#' Returns the replication configuration of a bucket.
#' 
#' It can take a while to propagate the put or delete a replication
#' configuration to all Amazon S3 systems. Therefore, a get request soon
#' after put or delete can return a wrong result.
#' 
#' For information about replication configuration, see
#' [Replication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' This operation requires permissions for the
#' `s3:GetReplicationConfiguration` action. For more information about
#' permissions, see [Using Bucket Policies and User
#' Policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-iam-policies.html).
#' 
#' If you include the `Filter` element in a replication configuration, you
#' must also include the `DeleteMarkerReplication` and `Priority` elements.
#' The response also returns those elements.
#' 
#' For information about
#' [`get_bucket_replication`][s3_get_bucket_replication] errors, see [List
#' of replication-related error
#' codes](https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList)
#' 
#' The following operations are related to
#' [`get_bucket_replication`][s3_get_bucket_replication]:
#' 
#' -   [`put_bucket_replication`][s3_put_bucket_replication]
#' 
#' -   [`delete_bucket_replication`][s3_delete_bucket_replication]
#'
#' @usage
#' s3_get_bucket_replication(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name for which to get the replication information.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   ReplicationConfiguration = list(
#'     Role = "string",
#'     Rules = list(
#'       list(
#'         ID = "string",
#'         Priority = 123,
#'         Prefix = "string",
#'         Filter = list(
#'           Prefix = "string",
#'           Tag = list(
#'             Key = "string",
#'             Value = "string"
#'           ),
#'           And = list(
#'             Prefix = "string",
#'             Tags = list(
#'               list(
#'                 Key = "string",
#'                 Value = "string"
#'               )
#'             )
#'           )
#'         ),
#'         Status = "Enabled"|"Disabled",
#'         SourceSelectionCriteria = list(
#'           SseKmsEncryptedObjects = list(
#'             Status = "Enabled"|"Disabled"
#'           ),
#'           ReplicaModifications = list(
#'             Status = "Enabled"|"Disabled"
#'           )
#'         ),
#'         ExistingObjectReplication = list(
#'           Status = "Enabled"|"Disabled"
#'         ),
#'         Destination = list(
#'           Bucket = "string",
#'           Account = "string",
#'           StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"GLACIER"|"DEEP_ARCHIVE"|"OUTPOSTS",
#'           AccessControlTranslation = list(
#'             Owner = "Destination"
#'           ),
#'           EncryptionConfiguration = list(
#'             ReplicaKmsKeyID = "string"
#'           ),
#'           ReplicationTime = list(
#'             Status = "Enabled"|"Disabled",
#'             Time = list(
#'               Minutes = 123
#'             )
#'           ),
#'           Metrics = list(
#'             Status = "Enabled"|"Disabled",
#'             EventThreshold = list(
#'               Minutes = 123
#'             )
#'           )
#'         ),
#'         DeleteMarkerReplication = list(
#'           Status = "Enabled"|"Disabled"
#'         )
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_replication(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example returns replication configuration set on a bucket.
#' svc$get_bucket_replication(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_replication
s3_get_bucket_replication <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketReplication",
    http_method = "GET",
    http_path = "/{Bucket}?replication",
    paginator = list()
  )
  input <- .s3$get_bucket_replication_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_replication_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_replication <- s3_get_bucket_replication

#' Returns the request payment configuration of a bucket
#'
#' @description
#' Returns the request payment configuration of a bucket. To use this
#' version of the operation, you must be the bucket owner. For more
#' information, see [Requester Pays
#' Buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html).
#' 
#' The following operations are related to
#' [`get_bucket_request_payment`][s3_get_bucket_request_payment]:
#' 
#' -   [`list_objects`][s3_list_objects]
#'
#' @usage
#' s3_get_bucket_request_payment(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to get the payment request
#' configuration
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Payer = "Requester"|"BucketOwner"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_request_payment(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves bucket versioning configuration.
#' svc$get_bucket_request_payment(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_request_payment
s3_get_bucket_request_payment <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketRequestPayment",
    http_method = "GET",
    http_path = "/{Bucket}?requestPayment",
    paginator = list()
  )
  input <- .s3$get_bucket_request_payment_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_request_payment_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_request_payment <- s3_get_bucket_request_payment

#' Returns the tag set associated with the bucket
#'
#' @description
#' Returns the tag set associated with the bucket.
#' 
#' To use this operation, you must have permission to perform the
#' `s3:GetBucketTagging` action. By default, the bucket owner has this
#' permission and can grant this permission to others.
#' 
#' [`get_bucket_tagging`][s3_get_bucket_tagging] has the following special
#' error:
#' 
#' -   Error code: `NoSuchTagSetError`
#' 
#'     -   Description: There is no tag set associated with the bucket.
#' 
#' The following operations are related to
#' [`get_bucket_tagging`][s3_get_bucket_tagging]:
#' 
#' -   [`put_bucket_tagging`][s3_put_bucket_tagging]
#' 
#' -   [`delete_bucket_tagging`][s3_delete_bucket_tagging]
#'
#' @usage
#' s3_get_bucket_tagging(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to get the tagging information.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   TagSet = list(
#'     list(
#'       Key = "string",
#'       Value = "string"
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_tagging(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example returns tag set associated with a bucket
#' svc$get_bucket_tagging(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_tagging
s3_get_bucket_tagging <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketTagging",
    http_method = "GET",
    http_path = "/{Bucket}?tagging",
    paginator = list()
  )
  input <- .s3$get_bucket_tagging_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_tagging_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_tagging <- s3_get_bucket_tagging

#' Returns the versioning state of a bucket
#'
#' @description
#' Returns the versioning state of a bucket.
#' 
#' To retrieve the versioning state of a bucket, you must be the bucket
#' owner.
#' 
#' This implementation also returns the MFA Delete status of the versioning
#' state. If the MFA Delete status is `enabled`, the bucket owner must use
#' an authentication device to change the versioning state of the bucket.
#' 
#' The following operations are related to
#' [`get_bucket_versioning`][s3_get_bucket_versioning]:
#' 
#' -   [`get_object`][s3_get_object]
#' 
#' -   [`put_object`][s3_put_object]
#' 
#' -   [`delete_object`][s3_delete_object]
#'
#' @usage
#' s3_get_bucket_versioning(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to get the versioning information.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Status = "Enabled"|"Suspended",
#'   MFADelete = "Enabled"|"Disabled"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_versioning(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves bucket versioning configuration.
#' svc$get_bucket_versioning(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_versioning
s3_get_bucket_versioning <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketVersioning",
    http_method = "GET",
    http_path = "/{Bucket}?versioning",
    paginator = list()
  )
  input <- .s3$get_bucket_versioning_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_versioning_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_versioning <- s3_get_bucket_versioning

#' Returns the website configuration for a bucket
#'
#' @description
#' Returns the website configuration for a bucket. To host website on
#' Amazon S3, you can configure a bucket as website by adding a website
#' configuration. For more information about hosting websites, see [Hosting
#' Websites on Amazon
#' S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html).
#' 
#' This GET operation requires the `S3:GetBucketWebsite` permission. By
#' default, only the bucket owner can read the bucket website
#' configuration. However, bucket owners can allow other users to read the
#' website configuration by writing a bucket policy granting them the
#' `S3:GetBucketWebsite` permission.
#' 
#' The following operations are related to
#' [`delete_bucket_website`][s3_delete_bucket_website]:
#' 
#' -   [`delete_bucket_website`][s3_delete_bucket_website]
#' 
#' -   [`put_bucket_website`][s3_put_bucket_website]
#'
#' @usage
#' s3_get_bucket_website(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name for which to get the website configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   RedirectAllRequestsTo = list(
#'     HostName = "string",
#'     Protocol = "http"|"https"
#'   ),
#'   IndexDocument = list(
#'     Suffix = "string"
#'   ),
#'   ErrorDocument = list(
#'     Key = "string"
#'   ),
#'   RoutingRules = list(
#'     list(
#'       Condition = list(
#'         HttpErrorCodeReturnedEquals = "string",
#'         KeyPrefixEquals = "string"
#'       ),
#'       Redirect = list(
#'         HostName = "string",
#'         HttpRedirectCode = "string",
#'         Protocol = "http"|"https",
#'         ReplaceKeyPrefixWith = "string",
#'         ReplaceKeyWith = "string"
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_bucket_website(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves website configuration of a bucket.
#' svc$get_bucket_website(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_bucket_website
s3_get_bucket_website <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetBucketWebsite",
    http_method = "GET",
    http_path = "/{Bucket}?website",
    paginator = list()
  )
  input <- .s3$get_bucket_website_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_bucket_website_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_bucket_website <- s3_get_bucket_website

#' Retrieves objects from Amazon S3
#'
#' @description
#' Retrieves objects from Amazon S3. To use `GET`, you must have `READ`
#' access to the object. If you grant `READ` access to the anonymous user,
#' you can return the object without using an authorization header.
#' 
#' An Amazon S3 bucket has no directory hierarchy such as you would find in
#' a typical computer file system. You can, however, create a logical
#' hierarchy by using object key names that imply a folder structure. For
#' example, instead of naming an object `sample.jpg`, you can name it
#' `photos/2006/February/sample.jpg`.
#' 
#' To get an object from such a logical hierarchy, specify the full key
#' name for the object in the `GET` operation. For a virtual hosted-style
#' request example, if you have the object
#' `photos/2006/February/sample.jpg`, specify the resource as
#' `/photos/2006/February/sample.jpg`. For a path-style request example, if
#' you have the object `photos/2006/February/sample.jpg` in the bucket
#' named `examplebucket`, specify the resource as
#' `/examplebucket/photos/2006/February/sample.jpg`. For more information
#' about request types, see [HTTP Host Header Bucket
#' Specification](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html#VirtualHostingSpecifyBucket).
#' 
#' To distribute large files to many people, you can save bandwidth costs
#' by using BitTorrent. For more information, see [Amazon S3
#' Torrent](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3Torrent.html).
#' For more information about returning the ACL of an object, see
#' [`get_object_acl`][s3_get_object_acl].
#' 
#' If the object you are retrieving is stored in the S3 Glacier or S3
#' Glacier Deep Archive storage class, or S3 Intelligent-Tiering Archive or
#' S3 Intelligent-Tiering Deep Archive tiers, before you can retrieve the
#' object you must first restore a copy using
#' [`restore_object`][s3_restore_object]. Otherwise, this operation returns
#' an `InvalidObjectStateError` error. For information about restoring
#' archived objects, see [Restoring Archived
#' Objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/restoring-objects.html).
#' 
#' Encryption request headers, like `x-amz-server-side-encryption`, should
#' not be sent for GET requests if your object uses server-side encryption
#' with CMKs stored in AWS KMS (SSE-KMS) or server-side encryption with
#' Amazon S3–managed encryption keys (SSE-S3). If your object does use
#' these types of keys, you’ll get an HTTP 400 BadRequest error.
#' 
#' If you encrypt an object by using server-side encryption with
#' customer-provided encryption keys (SSE-C) when you store the object in
#' Amazon S3, then when you GET the object, you must use the following
#' headers:
#' 
#' -   x-amz-server-side-encryption-customer-algorithm
#' 
#' -   x-amz-server-side-encryption-customer-key
#' 
#' -   x-amz-server-side-encryption-customer-key-MD5
#' 
#' For more information about SSE-C, see [Server-Side Encryption (Using
#' Customer-Provided Encryption
#' Keys)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html).
#' 
#' Assuming you have permission to read object tags (permission for the
#' `s3:GetObjectVersionTagging` action), the response also returns the
#' `x-amz-tagging-count` header that provides the count of number of tags
#' associated with the object. You can use
#' [`get_object_tagging`][s3_get_object_tagging] to retrieve the tag set
#' associated with an object.
#' 
#' **Permissions**
#' 
#' You need the `s3:GetObject` permission for this operation. For more
#' information, see [Specifying Permissions in a
#' Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html).
#' If the object you request does not exist, the error Amazon S3 returns
#' depends on whether you also have the `s3:ListBucket` permission.
#' 
#' -   If you have the `s3:ListBucket` permission on the bucket, Amazon S3
#'     will return an HTTP status code 404 ("no such key") error.
#' 
#' -   If you don’t have the `s3:ListBucket` permission, Amazon S3 will
#'     return an HTTP status code 403 ("access denied") error.
#' 
#' **Versioning**
#' 
#' By default, the GET operation returns the current version of an object.
#' To return a different version, use the `versionId` subresource.
#' 
#' If the current version of the object is a delete marker, Amazon S3
#' behaves as if the object was deleted and includes
#' `x-amz-delete-marker: true` in the response.
#' 
#' For more information about versioning, see
#' [`put_bucket_versioning`][s3_put_bucket_versioning].
#' 
#' **Overriding Response Header Values**
#' 
#' There are times when you want to override certain response header values
#' in a GET response. For example, you might override the
#' Content-Disposition response header value in your GET request.
#' 
#' You can override values for a set of response headers using the
#' following query parameters. These response header values are sent only
#' on a successful request, that is, when status code 200 OK is returned.
#' The set of headers you can override using these parameters is a subset
#' of the headers that Amazon S3 accepts when you create an object. The
#' response headers that you can override for the GET response are
#' `Content-Type`, `Content-Language`, `Expires`, `Cache-Control`,
#' `Content-Disposition`, and `Content-Encoding`. To override these header
#' values in the GET response, you use the following request parameters.
#' 
#' You must sign the request, either using an Authorization header or a
#' presigned URL, when using these parameters. They cannot be used with an
#' unsigned (anonymous) request.
#' 
#' -   `response-content-type`
#' 
#' -   `response-content-language`
#' 
#' -   `response-expires`
#' 
#' -   `response-cache-control`
#' 
#' -   `response-content-disposition`
#' 
#' -   `response-content-encoding`
#' 
#' **Additional Considerations about Request Headers**
#' 
#' If both of the `If-Match` and `If-Unmodified-Since` headers are present
#' in the request as follows: `If-Match` condition evaluates to `true`,
#' and; `If-Unmodified-Since` condition evaluates to `false`; then, S3
#' returns 200 OK and the data requested.
#' 
#' If both of the `If-None-Match` and `If-Modified-Since` headers are
#' present in the request as follows:` If-None-Match` condition evaluates
#' to `false`, and; `If-Modified-Since` condition evaluates to `true`;
#' then, S3 returns 304 Not Modified response code.
#' 
#' For more information about conditional requests, see [RFC
#' 7232](https://tools.ietf.org/html/rfc7232).
#' 
#' The following operations are related to [`get_object`][s3_get_object]:
#' 
#' -   [`list_buckets`][s3_list_buckets]
#' 
#' -   [`get_object_acl`][s3_get_object_acl]
#'
#' @usage
#' s3_get_object(Bucket, IfMatch, IfModifiedSince, IfNoneMatch,
#'   IfUnmodifiedSince, Key, Range, ResponseCacheControl,
#'   ResponseContentDisposition, ResponseContentEncoding,
#'   ResponseContentLanguage, ResponseContentType, ResponseExpires,
#'   VersionId, SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5,
#'   RequestPayer, PartNumber, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name containing the object.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param IfMatch Return the object only if its entity tag (ETag) is the same as the one
#' specified, otherwise return a 412 (precondition failed).
#' @param IfModifiedSince Return the object only if it has been modified since the specified time,
#' otherwise return a 304 (not modified).
#' @param IfNoneMatch Return the object only if its entity tag (ETag) is different from the
#' one specified, otherwise return a 304 (not modified).
#' @param IfUnmodifiedSince Return the object only if it has not been modified since the specified
#' time, otherwise return a 412 (precondition failed).
#' @param Key &#91;required&#93; Key of the object to get.
#' @param Range Downloads the specified range bytes of an object. For more information
#' about the HTTP Range header, see
#' <https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35>.
#' 
#' Amazon S3 doesn't support retrieving multiple ranges of data per `GET`
#' request.
#' @param ResponseCacheControl Sets the `Cache-Control` header of the response.
#' @param ResponseContentDisposition Sets the `Content-Disposition` header of the response
#' @param ResponseContentEncoding Sets the `Content-Encoding` header of the response.
#' @param ResponseContentLanguage Sets the `Content-Language` header of the response.
#' @param ResponseContentType Sets the `Content-Type` header of the response.
#' @param ResponseExpires Sets the `Expires` header of the response.
#' @param VersionId VersionId used to reference a specific version of the object.
#' @param SSECustomerAlgorithm Specifies the algorithm to use to when encrypting the object (for
#' example, AES256).
#' @param SSECustomerKey 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 S3 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.
#' @param SSECustomerKeyMD5 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
#' that the encryption key was transmitted without error.
#' @param RequestPayer 
#' @param PartNumber 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.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Body = raw,
#'   DeleteMarker = TRUE|FALSE,
#'   AcceptRanges = "string",
#'   Expiration = "string",
#'   Restore = "string",
#'   LastModified = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   ContentLength = 123,
#'   ETag = "string",
#'   MissingMeta = 123,
#'   VersionId = "string",
#'   CacheControl = "string",
#'   ContentDisposition = "string",
#'   ContentEncoding = "string",
#'   ContentLanguage = "string",
#'   ContentRange = "string",
#'   ContentType = "string",
#'   Expires = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   WebsiteRedirectLocation = "string",
#'   ServerSideEncryption = "AES256"|"aws:kms",
#'   Metadata = list(
#'     "string"
#'   ),
#'   SSECustomerAlgorithm = "string",
#'   SSECustomerKeyMD5 = "string",
#'   SSEKMSKeyId = "string",
#'   BucketKeyEnabled = TRUE|FALSE,
#'   StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"GLACIER"|"DEEP_ARCHIVE"|"OUTPOSTS",
#'   RequestCharged = "requester",
#'   ReplicationStatus = "COMPLETE"|"PENDING"|"FAILED"|"REPLICA",
#'   PartsCount = 123,
#'   TagCount = 123,
#'   ObjectLockMode = "GOVERNANCE"|"COMPLIANCE",
#'   ObjectLockRetainUntilDate = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   ObjectLockLegalHoldStatus = "ON"|"OFF"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_object(
#'   Bucket = "string",
#'   IfMatch = "string",
#'   IfModifiedSince = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   IfNoneMatch = "string",
#'   IfUnmodifiedSince = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   Key = "string",
#'   Range = "string",
#'   ResponseCacheControl = "string",
#'   ResponseContentDisposition = "string",
#'   ResponseContentEncoding = "string",
#'   ResponseContentLanguage = "string",
#'   ResponseContentType = "string",
#'   ResponseExpires = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   VersionId = "string",
#'   SSECustomerAlgorithm = "string",
#'   SSECustomerKey = raw,
#'   SSECustomerKeyMD5 = "string",
#'   RequestPayer = "requester",
#'   PartNumber = 123,
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves an object for an S3 bucket. The request
#' # specifies the range header to retrieve a specific byte range.
#' svc$get_object(
#'   Bucket = "examplebucket",
#'   Key = "SampleFile.txt",
#'   Range = "bytes=0-9"
#' )
#' 
#' # The following example retrieves an object for an S3 bucket.
#' svc$get_object(
#'   Bucket = "examplebucket",
#'   Key = "HappyFace.jpg"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_object
s3_get_object <- function(Bucket, IfMatch = NULL, IfModifiedSince = NULL, IfNoneMatch = NULL, IfUnmodifiedSince = NULL, Key, Range = NULL, ResponseCacheControl = NULL, ResponseContentDisposition = NULL, ResponseContentEncoding = NULL, ResponseContentLanguage = NULL, ResponseContentType = NULL, ResponseExpires = NULL, VersionId = NULL, SSECustomerAlgorithm = NULL, SSECustomerKey = NULL, SSECustomerKeyMD5 = NULL, RequestPayer = NULL, PartNumber = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetObject",
    http_method = "GET",
    http_path = "/{Bucket}/{Key+}",
    paginator = list()
  )
  input <- .s3$get_object_input(Bucket = Bucket, IfMatch = IfMatch, IfModifiedSince = IfModifiedSince, IfNoneMatch = IfNoneMatch, IfUnmodifiedSince = IfUnmodifiedSince, Key = Key, Range = Range, ResponseCacheControl = ResponseCacheControl, ResponseContentDisposition = ResponseContentDisposition, ResponseContentEncoding = ResponseContentEncoding, ResponseContentLanguage = ResponseContentLanguage, ResponseContentType = ResponseContentType, ResponseExpires = ResponseExpires, VersionId = VersionId, SSECustomerAlgorithm = SSECustomerAlgorithm, SSECustomerKey = SSECustomerKey, SSECustomerKeyMD5 = SSECustomerKeyMD5, RequestPayer = RequestPayer, PartNumber = PartNumber, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_object_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_object <- s3_get_object

#' Returns the access control list (ACL) of an object
#'
#' @description
#' Returns the access control list (ACL) of an object. To use this
#' operation, you must have `READ_ACP` access to the object.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' 
#' **Versioning**
#' 
#' By default, GET returns ACL information about the current version of an
#' object. To return ACL information about a different version, use the
#' versionId subresource.
#' 
#' The following operations are related to
#' [`get_object_acl`][s3_get_object_acl]:
#' 
#' -   [`get_object`][s3_get_object]
#' 
#' -   [`delete_object`][s3_delete_object]
#' 
#' -   [`put_object`][s3_put_object]
#'
#' @usage
#' s3_get_object_acl(Bucket, Key, VersionId, RequestPayer,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name that contains the object for which to get the ACL
#' information.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Key &#91;required&#93; The key of the object for which to get the ACL information.
#' @param VersionId VersionId used to reference a specific version of the object.
#' @param RequestPayer 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Owner = list(
#'     DisplayName = "string",
#'     ID = "string"
#'   ),
#'   Grants = list(
#'     list(
#'       Grantee = list(
#'         DisplayName = "string",
#'         EmailAddress = "string",
#'         ID = "string",
#'         Type = "CanonicalUser"|"AmazonCustomerByEmail"|"Group",
#'         URI = "string"
#'       ),
#'       Permission = "FULL_CONTROL"|"WRITE"|"WRITE_ACP"|"READ"|"READ_ACP"
#'     )
#'   ),
#'   RequestCharged = "requester"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_object_acl(
#'   Bucket = "string",
#'   Key = "string",
#'   VersionId = "string",
#'   RequestPayer = "requester",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves access control list (ACL) of an object.
#' svc$get_object_acl(
#'   Bucket = "examplebucket",
#'   Key = "HappyFace.jpg"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_object_acl
s3_get_object_acl <- function(Bucket, Key, VersionId = NULL, RequestPayer = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetObjectAcl",
    http_method = "GET",
    http_path = "/{Bucket}/{Key+}?acl",
    paginator = list()
  )
  input <- .s3$get_object_acl_input(Bucket = Bucket, Key = Key, VersionId = VersionId, RequestPayer = RequestPayer, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_object_acl_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_object_acl <- s3_get_object_acl

#' Gets an object's current Legal Hold status
#'
#' @description
#' Gets an object's current Legal Hold status. For more information, see
#' [Locking
#' Objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html).
#' 
#' This action is not supported by Amazon S3 on Outposts.
#'
#' @usage
#' s3_get_object_legal_hold(Bucket, Key, VersionId, RequestPayer,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name containing the object whose Legal Hold status you want
#' to retrieve.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Key &#91;required&#93; The key name for the object whose Legal Hold status you want to
#' retrieve.
#' @param VersionId The version ID of the object whose Legal Hold status you want to
#' retrieve.
#' @param RequestPayer 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   LegalHold = list(
#'     Status = "ON"|"OFF"
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_object_legal_hold(
#'   Bucket = "string",
#'   Key = "string",
#'   VersionId = "string",
#'   RequestPayer = "requester",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_object_legal_hold
s3_get_object_legal_hold <- function(Bucket, Key, VersionId = NULL, RequestPayer = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetObjectLegalHold",
    http_method = "GET",
    http_path = "/{Bucket}/{Key+}?legal-hold",
    paginator = list()
  )
  input <- .s3$get_object_legal_hold_input(Bucket = Bucket, Key = Key, VersionId = VersionId, RequestPayer = RequestPayer, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_object_legal_hold_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_object_legal_hold <- s3_get_object_legal_hold

#' Gets the Object Lock configuration for a bucket
#'
#' @description
#' Gets the Object Lock configuration for a bucket. The rule specified in
#' the Object Lock configuration will be applied by default to every new
#' object placed in the specified bucket. For more information, see
#' [Locking
#' Objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html).
#'
#' @usage
#' s3_get_object_lock_configuration(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket whose Object Lock configuration you want to retrieve.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   ObjectLockConfiguration = list(
#'     ObjectLockEnabled = "Enabled",
#'     Rule = list(
#'       DefaultRetention = list(
#'         Mode = "GOVERNANCE"|"COMPLIANCE",
#'         Days = 123,
#'         Years = 123
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_object_lock_configuration(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_object_lock_configuration
s3_get_object_lock_configuration <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetObjectLockConfiguration",
    http_method = "GET",
    http_path = "/{Bucket}?object-lock",
    paginator = list()
  )
  input <- .s3$get_object_lock_configuration_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_object_lock_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_object_lock_configuration <- s3_get_object_lock_configuration

#' Retrieves an object's retention settings
#'
#' @description
#' Retrieves an object's retention settings. For more information, see
#' [Locking
#' Objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html).
#' 
#' This action is not supported by Amazon S3 on Outposts.
#'
#' @usage
#' s3_get_object_retention(Bucket, Key, VersionId, RequestPayer,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name containing the object whose retention settings you want
#' to retrieve.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Key &#91;required&#93; The key name for the object whose retention settings you want to
#' retrieve.
#' @param VersionId The version ID for the object whose retention settings you want to
#' retrieve.
#' @param RequestPayer 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Retention = list(
#'     Mode = "GOVERNANCE"|"COMPLIANCE",
#'     RetainUntilDate = as.POSIXct(
#'       "2015-01-01"
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_object_retention(
#'   Bucket = "string",
#'   Key = "string",
#'   VersionId = "string",
#'   RequestPayer = "requester",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_object_retention
s3_get_object_retention <- function(Bucket, Key, VersionId = NULL, RequestPayer = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetObjectRetention",
    http_method = "GET",
    http_path = "/{Bucket}/{Key+}?retention",
    paginator = list()
  )
  input <- .s3$get_object_retention_input(Bucket = Bucket, Key = Key, VersionId = VersionId, RequestPayer = RequestPayer, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_object_retention_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_object_retention <- s3_get_object_retention

#' Returns the tag-set of an object
#'
#' @description
#' Returns the tag-set of an object. You send the GET request against the
#' tagging subresource associated with the object.
#' 
#' To use this operation, you must have permission to perform the
#' `s3:GetObjectTagging` action. By default, the GET operation returns
#' information about current version of an object. For a versioned bucket,
#' you can have multiple versions of an object in your bucket. To retrieve
#' tags of any other version, use the versionId query parameter. You also
#' need permission for the `s3:GetObjectVersionTagging` action.
#' 
#' By default, the bucket owner has this permission and can grant this
#' permission to others.
#' 
#' For information about the Amazon S3 object tagging feature, see [Object
#' Tagging](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html).
#' 
#' The following operation is related to
#' [`get_object_tagging`][s3_get_object_tagging]:
#' 
#' -   [`put_object_tagging`][s3_put_object_tagging]
#'
#' @usage
#' s3_get_object_tagging(Bucket, Key, VersionId, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name containing the object for which to get the tagging
#' information.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Key &#91;required&#93; Object key for which to get the tagging information.
#' @param VersionId The versionId of the object for which to get the tagging information.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   VersionId = "string",
#'   TagSet = list(
#'     list(
#'       Key = "string",
#'       Value = "string"
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_object_tagging(
#'   Bucket = "string",
#'   Key = "string",
#'   VersionId = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves tag set of an object.
#' svc$get_object_tagging(
#'   Bucket = "examplebucket",
#'   Key = "HappyFace.jpg"
#' )
#' 
#' # The following example retrieves tag set of an object. The request
#' # specifies object version.
#' svc$get_object_tagging(
#'   Bucket = "examplebucket",
#'   Key = "exampleobject",
#'   VersionId = "ydlaNkwWm0SfKJR.T1b1fIdPRbldTYRI"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_object_tagging
s3_get_object_tagging <- function(Bucket, Key, VersionId = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetObjectTagging",
    http_method = "GET",
    http_path = "/{Bucket}/{Key+}?tagging",
    paginator = list()
  )
  input <- .s3$get_object_tagging_input(Bucket = Bucket, Key = Key, VersionId = VersionId, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_object_tagging_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_object_tagging <- s3_get_object_tagging

#' Returns torrent files from a bucket
#'
#' @description
#' Returns torrent files from a bucket. BitTorrent can save you bandwidth
#' when you're distributing large files. For more information about
#' BitTorrent, see [Using BitTorrent with Amazon
#' S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3Torrent.html).
#' 
#' You can get torrent only for objects that are less than 5 GB in size,
#' and that are not encrypted using server-side encryption with a
#' customer-provided encryption key.
#' 
#' To use GET, you must have READ access to the object.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' 
#' The following operation is related to
#' [`get_object_torrent`][s3_get_object_torrent]:
#' 
#' -   [`get_object`][s3_get_object]
#'
#' @usage
#' s3_get_object_torrent(Bucket, Key, RequestPayer, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the object for which to get the
#' torrent files.
#' @param Key &#91;required&#93; The object key for which to get the information.
#' @param RequestPayer 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Body = raw,
#'   RequestCharged = "requester"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_object_torrent(
#'   Bucket = "string",
#'   Key = "string",
#'   RequestPayer = "requester",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves torrent files of an object.
#' svc$get_object_torrent(
#'   Bucket = "examplebucket",
#'   Key = "HappyFace.jpg"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_get_object_torrent
s3_get_object_torrent <- function(Bucket, Key, RequestPayer = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetObjectTorrent",
    http_method = "GET",
    http_path = "/{Bucket}/{Key+}?torrent",
    paginator = list()
  )
  input <- .s3$get_object_torrent_input(Bucket = Bucket, Key = Key, RequestPayer = RequestPayer, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_object_torrent_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_object_torrent <- s3_get_object_torrent

#' Retrieves the PublicAccessBlock configuration for an Amazon S3 bucket
#'
#' @description
#' Retrieves the `PublicAccessBlock` configuration for an Amazon S3 bucket.
#' To use this operation, you must have the `s3:GetBucketPublicAccessBlock`
#' permission. For more information about Amazon S3 permissions, see
#' [Specifying Permissions in a
#' Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html).
#' 
#' When Amazon S3 evaluates the `PublicAccessBlock` configuration for a
#' bucket or an object, it checks the `PublicAccessBlock` configuration for
#' both the bucket (or the bucket that contains the object) and the bucket
#' owner's account. If the `PublicAccessBlock` settings are different
#' between the bucket and the account, Amazon S3 uses the most restrictive
#' combination of the bucket-level and account-level settings.
#' 
#' For more information about when Amazon S3 considers a bucket or an
#' object public, see [The Meaning of
#' "Public"](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html#access-control-block-public-access-policy-status).
#' 
#' The following operations are related to
#' [`get_public_access_block`][s3_get_public_access_block]:
#' 
#' -   [Using Amazon S3 Block Public
#'     Access](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html)
#' 
#' -   [`put_public_access_block`][s3_put_public_access_block]
#' 
#' -   [`get_public_access_block`][s3_get_public_access_block]
#' 
#' -   [`delete_public_access_block`][s3_delete_public_access_block]
#'
#' @usage
#' s3_get_public_access_block(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the Amazon S3 bucket whose `PublicAccessBlock` configuration
#' you want to retrieve.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   PublicAccessBlockConfiguration = list(
#'     BlockPublicAcls = TRUE|FALSE,
#'     IgnorePublicAcls = TRUE|FALSE,
#'     BlockPublicPolicy = TRUE|FALSE,
#'     RestrictPublicBuckets = TRUE|FALSE
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$get_public_access_block(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_get_public_access_block
s3_get_public_access_block <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "GetPublicAccessBlock",
    http_method = "GET",
    http_path = "/{Bucket}?publicAccessBlock",
    paginator = list()
  )
  input <- .s3$get_public_access_block_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$get_public_access_block_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$get_public_access_block <- s3_get_public_access_block

#' This operation is useful to determine if a bucket exists and you have
#' permission to access it
#'
#' @description
#' This operation is useful to determine if a bucket exists and you have
#' permission to access it. The operation returns a `200 OK` if the bucket
#' exists and you have permission to access it. Otherwise, the operation
#' might return responses such as `404 Not Found` and `403 Forbidden`.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:ListBucket` action. The bucket owner has this permission by default
#' and can grant this permission to others. For more information about
#' permissions, see [Permissions Related to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#'
#' @usage
#' s3_head_bucket(Bucket, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$head_bucket(
#'   Bucket = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # This operation checks to see if a bucket exists.
#' svc$head_bucket(
#'   Bucket = "acl1"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_head_bucket
s3_head_bucket <- function(Bucket, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "HeadBucket",
    http_method = "HEAD",
    http_path = "/{Bucket}",
    paginator = list()
  )
  input <- .s3$head_bucket_input(Bucket = Bucket, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$head_bucket_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$head_bucket <- s3_head_bucket

#' The HEAD operation retrieves metadata from an object without returning
#' the object itself
#'
#' @description
#' The HEAD operation retrieves metadata from an object without returning
#' the object itself. This operation is useful if you're only interested in
#' an object's metadata. To use HEAD, you must have READ access to the
#' object.
#' 
#' A `HEAD` request has the same options as a `GET` operation on an object.
#' The response is identical to the `GET` response except that there is no
#' response body.
#' 
#' If you encrypt an object by using server-side encryption with
#' customer-provided encryption keys (SSE-C) when you store the object in
#' Amazon S3, then when you retrieve the metadata from the object, you must
#' use the following headers:
#' 
#' -   x-amz-server-side-encryption-customer-algorithm
#' 
#' -   x-amz-server-side-encryption-customer-key
#' 
#' -   x-amz-server-side-encryption-customer-key-MD5
#' 
#' For more information about SSE-C, see [Server-Side Encryption (Using
#' Customer-Provided Encryption
#' Keys)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html).
#' 
#' Encryption request headers, like `x-amz-server-side-encryption`, should
#' not be sent for GET requests if your object uses server-side encryption
#' with CMKs stored in AWS KMS (SSE-KMS) or server-side encryption with
#' Amazon S3–managed encryption keys (SSE-S3). If your object does use
#' these types of keys, you’ll get an HTTP 400 BadRequest error.
#' 
#' Request headers are limited to 8 KB in size. For more information, see
#' [Common Request
#' Headers](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html).
#' 
#' Consider the following when using request headers:
#' 
#' -   Consideration 1 – If both of the `If-Match` and
#'     `If-Unmodified-Since` headers are present in the request as follows:
#' 
#'     -   `If-Match` condition evaluates to `true`, and;
#' 
#'     -   `If-Unmodified-Since` condition evaluates to `false`;
#' 
#'     Then Amazon S3 returns `200 OK` and the data requested.
#' 
#' -   Consideration 2 – If both of the `If-None-Match` and
#'     `If-Modified-Since` headers are present in the request as follows:
#' 
#'     -   `If-None-Match` condition evaluates to `false`, and;
#' 
#'     -   `If-Modified-Since` condition evaluates to `true`;
#' 
#'     Then Amazon S3 returns the `304 Not Modified` response code.
#' 
#' For more information about conditional requests, see [RFC
#' 7232](https://tools.ietf.org/html/rfc7232).
#' 
#' **Permissions**
#' 
#' You need the `s3:GetObject` permission for this operation. For more
#' information, see [Specifying Permissions in a
#' Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html).
#' If the object you request does not exist, the error Amazon S3 returns
#' depends on whether you also have the s3:ListBucket permission.
#' 
#' -   If you have the `s3:ListBucket` permission on the bucket, Amazon S3
#'     returns an HTTP status code 404 ("no such key") error.
#' 
#' -   If you don’t have the `s3:ListBucket` permission, Amazon S3 returns
#'     an HTTP status code 403 ("access denied") error.
#' 
#' The following operation is related to [`head_object`][s3_head_object]:
#' 
#' -   [`get_object`][s3_get_object]
#'
#' @usage
#' s3_head_object(Bucket, IfMatch, IfModifiedSince, IfNoneMatch,
#'   IfUnmodifiedSince, Key, Range, VersionId, SSECustomerAlgorithm,
#'   SSECustomerKey, SSECustomerKeyMD5, RequestPayer, PartNumber,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the object.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param IfMatch Return the object only if its entity tag (ETag) is the same as the one
#' specified, otherwise return a 412 (precondition failed).
#' @param IfModifiedSince Return the object only if it has been modified since the specified time,
#' otherwise return a 304 (not modified).
#' @param IfNoneMatch Return the object only if its entity tag (ETag) is different from the
#' one specified, otherwise return a 304 (not modified).
#' @param IfUnmodifiedSince Return the object only if it has not been modified since the specified
#' time, otherwise return a 412 (precondition failed).
#' @param Key &#91;required&#93; The object key.
#' @param Range Downloads the specified range bytes of an object. For more information
#' about the HTTP Range header, see
#' <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35>.
#' 
#' Amazon S3 doesn't support retrieving multiple ranges of data per `GET`
#' request.
#' @param VersionId VersionId used to reference a specific version of the object.
#' @param SSECustomerAlgorithm Specifies the algorithm to use to when encrypting the object (for
#' example, AES256).
#' @param SSECustomerKey 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 S3 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.
#' @param SSECustomerKeyMD5 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
#' that the encryption key was transmitted without error.
#' @param RequestPayer 
#' @param PartNumber 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.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   DeleteMarker = TRUE|FALSE,
#'   AcceptRanges = "string",
#'   Expiration = "string",
#'   Restore = "string",
#'   ArchiveStatus = "ARCHIVE_ACCESS"|"DEEP_ARCHIVE_ACCESS",
#'   LastModified = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   ContentLength = 123,
#'   ETag = "string",
#'   MissingMeta = 123,
#'   VersionId = "string",
#'   CacheControl = "string",
#'   ContentDisposition = "string",
#'   ContentEncoding = "string",
#'   ContentLanguage = "string",
#'   ContentType = "string",
#'   Expires = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   WebsiteRedirectLocation = "string",
#'   ServerSideEncryption = "AES256"|"aws:kms",
#'   Metadata = list(
#'     "string"
#'   ),
#'   SSECustomerAlgorithm = "string",
#'   SSECustomerKeyMD5 = "string",
#'   SSEKMSKeyId = "string",
#'   BucketKeyEnabled = TRUE|FALSE,
#'   StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"GLACIER"|"DEEP_ARCHIVE"|"OUTPOSTS",
#'   RequestCharged = "requester",
#'   ReplicationStatus = "COMPLETE"|"PENDING"|"FAILED"|"REPLICA",
#'   PartsCount = 123,
#'   ObjectLockMode = "GOVERNANCE"|"COMPLIANCE",
#'   ObjectLockRetainUntilDate = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   ObjectLockLegalHoldStatus = "ON"|"OFF"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$head_object(
#'   Bucket = "string",
#'   IfMatch = "string",
#'   IfModifiedSince = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   IfNoneMatch = "string",
#'   IfUnmodifiedSince = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   Key = "string",
#'   Range = "string",
#'   VersionId = "string",
#'   SSECustomerAlgorithm = "string",
#'   SSECustomerKey = raw,
#'   SSECustomerKeyMD5 = "string",
#'   RequestPayer = "requester",
#'   PartNumber = 123,
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves an object metadata.
#' svc$head_object(
#'   Bucket = "examplebucket",
#'   Key = "HappyFace.jpg"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_head_object
s3_head_object <- function(Bucket, IfMatch = NULL, IfModifiedSince = NULL, IfNoneMatch = NULL, IfUnmodifiedSince = NULL, Key, Range = NULL, VersionId = NULL, SSECustomerAlgorithm = NULL, SSECustomerKey = NULL, SSECustomerKeyMD5 = NULL, RequestPayer = NULL, PartNumber = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "HeadObject",
    http_method = "HEAD",
    http_path = "/{Bucket}/{Key+}",
    paginator = list()
  )
  input <- .s3$head_object_input(Bucket = Bucket, IfMatch = IfMatch, IfModifiedSince = IfModifiedSince, IfNoneMatch = IfNoneMatch, IfUnmodifiedSince = IfUnmodifiedSince, Key = Key, Range = Range, VersionId = VersionId, SSECustomerAlgorithm = SSECustomerAlgorithm, SSECustomerKey = SSECustomerKey, SSECustomerKeyMD5 = SSECustomerKeyMD5, RequestPayer = RequestPayer, PartNumber = PartNumber, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$head_object_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$head_object <- s3_head_object

#' Lists the analytics configurations for the bucket
#'
#' @description
#' Lists the analytics configurations for the bucket. You can have up to
#' 1,000 analytics configurations per bucket.
#' 
#' This operation supports list pagination and does not return more than
#' 100 configurations at a time. You should always check the `IsTruncated`
#' element in the response. If there are no more configurations to list,
#' `IsTruncated` is set to false. If there are more configurations to list,
#' `IsTruncated` is set to true, and there will be a value in
#' `NextContinuationToken`. You use the `NextContinuationToken` value to
#' continue the pagination of the list by passing the value in
#' continuation-token in the request to `GET` the next page.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:GetAnalyticsConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' For information about Amazon S3 analytics feature, see [Amazon S3
#' Analytics – Storage Class
#' Analysis](https://docs.aws.amazon.com/AmazonS3/latest/userguide/analytics-storage-class.html).
#' 
#' The following operations are related to
#' [`list_bucket_analytics_configurations`][s3_list_bucket_analytics_configurations]:
#' 
#' -   [`get_bucket_analytics_configuration`][s3_get_bucket_analytics_configuration]
#' 
#' -   [`delete_bucket_analytics_configuration`][s3_delete_bucket_analytics_configuration]
#' 
#' -   [`put_bucket_analytics_configuration`][s3_put_bucket_analytics_configuration]
#'
#' @usage
#' s3_list_bucket_analytics_configurations(Bucket, ContinuationToken,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket from which analytics configurations are
#' retrieved.
#' @param ContinuationToken The ContinuationToken that represents a placeholder from where this
#' request should begin.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   IsTruncated = TRUE|FALSE,
#'   ContinuationToken = "string",
#'   NextContinuationToken = "string",
#'   AnalyticsConfigurationList = list(
#'     list(
#'       Id = "string",
#'       Filter = list(
#'         Prefix = "string",
#'         Tag = list(
#'           Key = "string",
#'           Value = "string"
#'         ),
#'         And = list(
#'           Prefix = "string",
#'           Tags = list(
#'             list(
#'               Key = "string",
#'               Value = "string"
#'             )
#'           )
#'         )
#'       ),
#'       StorageClassAnalysis = list(
#'         DataExport = list(
#'           OutputSchemaVersion = "V_1",
#'           Destination = list(
#'             S3BucketDestination = list(
#'               Format = "CSV",
#'               BucketAccountId = "string",
#'               Bucket = "string",
#'               Prefix = "string"
#'             )
#'           )
#'         )
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$list_bucket_analytics_configurations(
#'   Bucket = "string",
#'   ContinuationToken = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_list_bucket_analytics_configurations
s3_list_bucket_analytics_configurations <- function(Bucket, ContinuationToken = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "ListBucketAnalyticsConfigurations",
    http_method = "GET",
    http_path = "/{Bucket}?analytics",
    paginator = list()
  )
  input <- .s3$list_bucket_analytics_configurations_input(Bucket = Bucket, ContinuationToken = ContinuationToken, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$list_bucket_analytics_configurations_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_bucket_analytics_configurations <- s3_list_bucket_analytics_configurations

#' Lists the S3 Intelligent-Tiering configuration from the specified bucket
#'
#' @description
#' Lists the S3 Intelligent-Tiering configuration from the specified
#' bucket.
#' 
#' The S3 Intelligent-Tiering storage class is designed to optimize storage
#' costs by automatically moving data to the most cost-effective storage
#' access tier, without additional operational overhead. S3
#' Intelligent-Tiering delivers automatic cost savings by moving data
#' between access tiers, when access patterns change.
#' 
#' The S3 Intelligent-Tiering storage class is suitable for objects larger
#' than 128 KB that you plan to store for at least 30 days. If the size of
#' an object is less than 128 KB, it is not eligible for auto-tiering.
#' Smaller objects can be stored, but they are always charged at the
#' frequent access tier rates in the S3 Intelligent-Tiering storage class.
#' 
#' If you delete an object before the end of the 30-day minimum storage
#' duration period, you are charged for 30 days. For more information, see
#' [Storage class for automatically optimizing frequently and infrequently
#' accessed
#' objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-dynamic-data-access).
#' 
#' Operations related to
#' [`list_bucket_intelligent_tiering_configurations`][s3_list_bucket_intelligent_tiering_configurations]
#' include:
#' 
#' -   [`delete_bucket_intelligent_tiering_configuration`][s3_delete_bucket_intelligent_tiering_configuration]
#' 
#' -   [`put_bucket_intelligent_tiering_configuration`][s3_put_bucket_intelligent_tiering_configuration]
#' 
#' -   [`get_bucket_intelligent_tiering_configuration`][s3_get_bucket_intelligent_tiering_configuration]
#'
#' @usage
#' s3_list_bucket_intelligent_tiering_configurations(Bucket,
#'   ContinuationToken)
#'
#' @param Bucket &#91;required&#93; The name of the Amazon S3 bucket whose configuration you want to modify
#' or retrieve.
#' @param ContinuationToken The ContinuationToken that represents a placeholder from where this
#' request should begin.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   IsTruncated = TRUE|FALSE,
#'   ContinuationToken = "string",
#'   NextContinuationToken = "string",
#'   IntelligentTieringConfigurationList = list(
#'     list(
#'       Id = "string",
#'       Filter = list(
#'         Prefix = "string",
#'         Tag = list(
#'           Key = "string",
#'           Value = "string"
#'         ),
#'         And = list(
#'           Prefix = "string",
#'           Tags = list(
#'             list(
#'               Key = "string",
#'               Value = "string"
#'             )
#'           )
#'         )
#'       ),
#'       Status = "Enabled"|"Disabled",
#'       Tierings = list(
#'         list(
#'           Days = 123,
#'           AccessTier = "ARCHIVE_ACCESS"|"DEEP_ARCHIVE_ACCESS"
#'         )
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$list_bucket_intelligent_tiering_configurations(
#'   Bucket = "string",
#'   ContinuationToken = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_list_bucket_intelligent_tiering_configurations
s3_list_bucket_intelligent_tiering_configurations <- function(Bucket, ContinuationToken = NULL) {
  op <- new_operation(
    name = "ListBucketIntelligentTieringConfigurations",
    http_method = "GET",
    http_path = "/{Bucket}?intelligent-tiering",
    paginator = list()
  )
  input <- .s3$list_bucket_intelligent_tiering_configurations_input(Bucket = Bucket, ContinuationToken = ContinuationToken)
  output <- .s3$list_bucket_intelligent_tiering_configurations_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_bucket_intelligent_tiering_configurations <- s3_list_bucket_intelligent_tiering_configurations

#' Returns a list of inventory configurations for the bucket
#'
#' @description
#' Returns a list of inventory configurations for the bucket. You can have
#' up to 1,000 analytics configurations per bucket.
#' 
#' This operation supports list pagination and does not return more than
#' 100 configurations at a time. Always check the `IsTruncated` element in
#' the response. If there are no more configurations to list, `IsTruncated`
#' is set to false. If there are more configurations to list, `IsTruncated`
#' is set to true, and there is a value in `NextContinuationToken`. You use
#' the `NextContinuationToken` value to continue the pagination of the list
#' by passing the value in continuation-token in the request to `GET` the
#' next page.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:GetInventoryConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' For information about the Amazon S3 inventory feature, see [Amazon S3
#' Inventory](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html)
#' 
#' The following operations are related to
#' [`list_bucket_inventory_configurations`][s3_list_bucket_inventory_configurations]:
#' 
#' -   [`get_bucket_inventory_configuration`][s3_get_bucket_inventory_configuration]
#' 
#' -   [`delete_bucket_inventory_configuration`][s3_delete_bucket_inventory_configuration]
#' 
#' -   [`put_bucket_inventory_configuration`][s3_put_bucket_inventory_configuration]
#'
#' @usage
#' s3_list_bucket_inventory_configurations(Bucket, ContinuationToken,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the inventory configurations to
#' retrieve.
#' @param ContinuationToken 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.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   ContinuationToken = "string",
#'   InventoryConfigurationList = list(
#'     list(
#'       Destination = list(
#'         S3BucketDestination = list(
#'           AccountId = "string",
#'           Bucket = "string",
#'           Format = "CSV"|"ORC"|"Parquet",
#'           Prefix = "string",
#'           Encryption = list(
#'             SSES3 = list(),
#'             SSEKMS = list(
#'               KeyId = "string"
#'             )
#'           )
#'         )
#'       ),
#'       IsEnabled = TRUE|FALSE,
#'       Filter = list(
#'         Prefix = "string"
#'       ),
#'       Id = "string",
#'       IncludedObjectVersions = "All"|"Current",
#'       OptionalFields = list(
#'         "Size"|"LastModifiedDate"|"StorageClass"|"ETag"|"IsMultipartUploaded"|"ReplicationStatus"|"EncryptionStatus"|"ObjectLockRetainUntilDate"|"ObjectLockMode"|"ObjectLockLegalHoldStatus"|"IntelligentTieringAccessTier"
#'       ),
#'       Schedule = list(
#'         Frequency = "Daily"|"Weekly"
#'       )
#'     )
#'   ),
#'   IsTruncated = TRUE|FALSE,
#'   NextContinuationToken = "string"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$list_bucket_inventory_configurations(
#'   Bucket = "string",
#'   ContinuationToken = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_list_bucket_inventory_configurations
s3_list_bucket_inventory_configurations <- function(Bucket, ContinuationToken = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "ListBucketInventoryConfigurations",
    http_method = "GET",
    http_path = "/{Bucket}?inventory",
    paginator = list()
  )
  input <- .s3$list_bucket_inventory_configurations_input(Bucket = Bucket, ContinuationToken = ContinuationToken, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$list_bucket_inventory_configurations_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_bucket_inventory_configurations <- s3_list_bucket_inventory_configurations

#' Lists the metrics configurations for the bucket
#'
#' @description
#' Lists the metrics configurations for the bucket. The metrics
#' configurations are only for the request metrics of the bucket and do not
#' provide information on daily storage metrics. You can have up to 1,000
#' configurations per bucket.
#' 
#' This operation supports list pagination and does not return more than
#' 100 configurations at a time. Always check the `IsTruncated` element in
#' the response. If there are no more configurations to list, `IsTruncated`
#' is set to false. If there are more configurations to list, `IsTruncated`
#' is set to true, and there is a value in `NextContinuationToken`. You use
#' the `NextContinuationToken` value to continue the pagination of the list
#' by passing the value in `continuation-token` in the request to `GET` the
#' next page.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:GetMetricsConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' For more information about metrics configurations and CloudWatch request
#' metrics, see [Monitoring Metrics with Amazon
#' CloudWatch](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cloudwatch-monitoring.html).
#' 
#' The following operations are related to
#' [`list_bucket_metrics_configurations`][s3_list_bucket_metrics_configurations]:
#' 
#' -   [`put_bucket_metrics_configuration`][s3_put_bucket_metrics_configuration]
#' 
#' -   [`get_bucket_metrics_configuration`][s3_get_bucket_metrics_configuration]
#' 
#' -   [`delete_bucket_metrics_configuration`][s3_delete_bucket_metrics_configuration]
#'
#' @usage
#' s3_list_bucket_metrics_configurations(Bucket, ContinuationToken,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the metrics configurations to
#' retrieve.
#' @param ContinuationToken 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.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   IsTruncated = TRUE|FALSE,
#'   ContinuationToken = "string",
#'   NextContinuationToken = "string",
#'   MetricsConfigurationList = list(
#'     list(
#'       Id = "string",
#'       Filter = list(
#'         Prefix = "string",
#'         Tag = list(
#'           Key = "string",
#'           Value = "string"
#'         ),
#'         And = list(
#'           Prefix = "string",
#'           Tags = list(
#'             list(
#'               Key = "string",
#'               Value = "string"
#'             )
#'           )
#'         )
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$list_bucket_metrics_configurations(
#'   Bucket = "string",
#'   ContinuationToken = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_list_bucket_metrics_configurations
s3_list_bucket_metrics_configurations <- function(Bucket, ContinuationToken = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "ListBucketMetricsConfigurations",
    http_method = "GET",
    http_path = "/{Bucket}?metrics",
    paginator = list()
  )
  input <- .s3$list_bucket_metrics_configurations_input(Bucket = Bucket, ContinuationToken = ContinuationToken, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$list_bucket_metrics_configurations_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_bucket_metrics_configurations <- s3_list_bucket_metrics_configurations

#' Returns a list of all buckets owned by the authenticated sender of the
#' request
#'
#' @description
#' Returns a list of all buckets owned by the authenticated sender of the
#' request.
#'
#' @usage
#' s3_list_buckets()
#'

#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Buckets = list(
#'     list(
#'       Name = "string",
#'       CreationDate = as.POSIXct(
#'         "2015-01-01"
#'       )
#'     )
#'   ),
#'   Owner = list(
#'     DisplayName = "string",
#'     ID = "string"
#'   )
#' )
#' ```
#'

#'
#' @examples
#' \dontrun{
#' # The following example return versions of an object with specific key
#' # name prefix. The request limits the number of items returned to two. If
#' # there are are more than two object version, S3 returns NextToken in the
#' # response. You can specify this token value in your next request to fetch
#' # next set of object versions.
#' svc$list_buckets()
#' }
#'
#' @keywords internal
#'
#' @rdname s3_list_buckets
s3_list_buckets <- function() {
  op <- new_operation(
    name = "ListBuckets",
    http_method = "GET",
    http_path = "/",
    paginator = list()
  )
  input <- .s3$list_buckets_input()
  output <- .s3$list_buckets_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_buckets <- s3_list_buckets

#' This operation lists in-progress multipart uploads
#'
#' @description
#' This operation lists in-progress multipart uploads. An in-progress
#' multipart upload is a multipart upload that has been initiated using the
#' Initiate Multipart Upload request, but has not yet been completed or
#' aborted.
#' 
#' This operation returns at most 1,000 multipart uploads in the response.
#' 1,000 multipart uploads is the maximum number of uploads a response can
#' include, which is also the default value. You can further limit the
#' number of uploads in a response by specifying the `max-uploads`
#' parameter in the response. If additional multipart uploads satisfy the
#' list criteria, the response will contain an `IsTruncated` element with
#' the value true. To list the additional multipart uploads, use the
#' `key-marker` and `upload-id-marker` request parameters.
#' 
#' In the response, the uploads are sorted by key. If your application has
#' initiated more than one multipart upload using the same object key, then
#' uploads in the response are first sorted by key. Additionally, uploads
#' are sorted in ascending order within each key by the upload initiation
#' time.
#' 
#' For more information on multipart uploads, see [Uploading Objects Using
#' Multipart
#' Upload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html).
#' 
#' For information on permissions required to use the multipart upload API,
#' see [Multipart Upload API and
#' Permissions](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html).
#' 
#' The following operations are related to
#' [`list_multipart_uploads`][s3_list_multipart_uploads]:
#' 
#' -   [`create_multipart_upload`][s3_create_multipart_upload]
#' 
#' -   [`upload_part`][s3_upload_part]
#' 
#' -   [`complete_multipart_upload`][s3_complete_multipart_upload]
#' 
#' -   [`list_parts`][s3_list_parts]
#' 
#' -   [`abort_multipart_upload`][s3_abort_multipart_upload]
#'
#' @usage
#' s3_list_multipart_uploads(Bucket, Delimiter, EncodingType, KeyMarker,
#'   MaxUploads, Prefix, UploadIdMarker, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket to which the multipart upload was initiated.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Delimiter Character you use to group keys.
#' 
#' All keys that contain the same string between the prefix, if specified,
#' and the first occurrence of the delimiter after the prefix are grouped
#' under a single result element, `CommonPrefixes`. If you don't specify
#' the prefix parameter, then the substring starts at the beginning of the
#' key. The keys that are grouped under `CommonPrefixes` result element are
#' not returned elsewhere in the response.
#' @param EncodingType 
#' @param KeyMarker Together with upload-id-marker, this parameter specifies the multipart
#' upload after which listing should begin.
#' 
#' If `upload-id-marker` is not specified, only the keys lexicographically
#' greater than the specified `key-marker` will be included in the list.
#' 
#' If `upload-id-marker` is specified, any multipart uploads for a key
#' equal to the `key-marker` might also be included, provided those
#' multipart uploads have upload IDs lexicographically greater than the
#' specified `upload-id-marker`.
#' @param MaxUploads 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.
#' @param Prefix Lists in-progress uploads only for those keys that begin with the
#' specified prefix. You can use prefixes to separate a bucket into
#' different grouping of keys. (You can think of using prefix to make
#' groups in the same way you'd use a folder in a file system.)
#' @param UploadIdMarker 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. Otherwise, any multipart uploads
#' for a key equal to the key-marker might be included in the list only if
#' they have an upload ID lexicographically greater than the specified
#' `upload-id-marker`.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   Bucket = "string",
#'   KeyMarker = "string",
#'   UploadIdMarker = "string",
#'   NextKeyMarker = "string",
#'   Prefix = "string",
#'   Delimiter = "string",
#'   NextUploadIdMarker = "string",
#'   MaxUploads = 123,
#'   IsTruncated = TRUE|FALSE,
#'   Uploads = list(
#'     list(
#'       UploadId = "string",
#'       Key = "string",
#'       Initiated = as.POSIXct(
#'         "2015-01-01"
#'       ),
#'       StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"GLACIER"|"DEEP_ARCHIVE"|"OUTPOSTS",
#'       Owner = list(
#'         DisplayName = "string",
#'         ID = "string"
#'       ),
#'       Initiator = list(
#'         ID = "string",
#'         DisplayName = "string"
#'       )
#'     )
#'   ),
#'   CommonPrefixes = list(
#'     list(
#'       Prefix = "string"
#'     )
#'   ),
#'   EncodingType = "url"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$list_multipart_uploads(
#'   Bucket = "string",
#'   Delimiter = "string",
#'   EncodingType = "url",
#'   KeyMarker = "string",
#'   MaxUploads = 123,
#'   Prefix = "string",
#'   UploadIdMarker = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example specifies the upload-id-marker and key-marker from
#' # previous truncated response to retrieve next setup of multipart uploads.
#' svc$list_multipart_uploads(
#'   Bucket = "examplebucket",
#'   KeyMarker = "nextkeyfrompreviousresponse",
#'   MaxUploads = "2",
#'   UploadIdMarker = "valuefrompreviousresponse"
#' )
#' 
#' # The following example lists in-progress multipart uploads on a specific
#' # bucket.
#' svc$list_multipart_uploads(
#'   Bucket = "examplebucket"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_list_multipart_uploads
s3_list_multipart_uploads <- function(Bucket, Delimiter = NULL, EncodingType = NULL, KeyMarker = NULL, MaxUploads = NULL, Prefix = NULL, UploadIdMarker = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "ListMultipartUploads",
    http_method = "GET",
    http_path = "/{Bucket}?uploads",
    paginator = list()
  )
  input <- .s3$list_multipart_uploads_input(Bucket = Bucket, Delimiter = Delimiter, EncodingType = EncodingType, KeyMarker = KeyMarker, MaxUploads = MaxUploads, Prefix = Prefix, UploadIdMarker = UploadIdMarker, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$list_multipart_uploads_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_multipart_uploads <- s3_list_multipart_uploads

#' Returns metadata about all versions of the objects in a bucket
#'
#' @description
#' Returns metadata about all versions of the objects in a bucket. You can
#' also use request parameters as selection criteria to return metadata
#' about a subset of all the object versions.
#' 
#' A 200 OK response can contain valid or invalid XML. Make sure to design
#' your application to parse the contents of the response and handle it
#' appropriately.
#' 
#' To use this operation, you must have READ access to the bucket.
#' 
#' This action is not supported by Amazon S3 on Outposts.
#' 
#' The following operations are related to
#' [`list_object_versions`][s3_list_object_versions]:
#' 
#' -   [`list_objects_v2`][s3_list_objects_v2]
#' 
#' -   [`get_object`][s3_get_object]
#' 
#' -   [`put_object`][s3_put_object]
#' 
#' -   [`delete_object`][s3_delete_object]
#'
#' @usage
#' s3_list_object_versions(Bucket, Delimiter, EncodingType, KeyMarker,
#'   MaxKeys, Prefix, VersionIdMarker, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The bucket name that contains the objects.
#' @param Delimiter A delimiter is a character that you specify to group keys. All keys that
#' contain the same string between the `prefix` and the first occurrence of
#' the delimiter are grouped under a single result element in
#' CommonPrefixes. These groups are counted as one result against the
#' max-keys limitation. These keys are not returned elsewhere in the
#' response.
#' @param EncodingType 
#' @param KeyMarker Specifies the key to start with when listing objects in a bucket.
#' @param MaxKeys Sets the maximum number of keys returned in the response. By default the
#' API returns up to 1,000 key names. The response might contain fewer keys
#' but will never contain more. If additional keys satisfy the search
#' criteria, but were not returned because max-keys was exceeded, the
#' response contains &lt;isTruncated&gt;true&lt;/isTruncated&gt;. To return
#' the additional keys, see key-marker and version-id-marker.
#' @param Prefix Use this parameter to select only those keys that begin with the
#' specified prefix. You can use prefixes to separate a bucket into
#' different groupings of keys. (You can think of using prefix to make
#' groups in the same way you'd use a folder in a file system.) You can use
#' prefix with delimiter to roll up numerous objects into a single result
#' under CommonPrefixes.
#' @param VersionIdMarker Specifies the object version you want to start listing from.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   IsTruncated = TRUE|FALSE,
#'   KeyMarker = "string",
#'   VersionIdMarker = "string",
#'   NextKeyMarker = "string",
#'   NextVersionIdMarker = "string",
#'   Versions = list(
#'     list(
#'       ETag = "string",
#'       Size = 123,
#'       StorageClass = "STANDARD",
#'       Key = "string",
#'       VersionId = "string",
#'       IsLatest = TRUE|FALSE,
#'       LastModified = as.POSIXct(
#'         "2015-01-01"
#'       ),
#'       Owner = list(
#'         DisplayName = "string",
#'         ID = "string"
#'       )
#'     )
#'   ),
#'   DeleteMarkers = list(
#'     list(
#'       Owner = list(
#'         DisplayName = "string",
#'         ID = "string"
#'       ),
#'       Key = "string",
#'       VersionId = "string",
#'       IsLatest = TRUE|FALSE,
#'       LastModified = as.POSIXct(
#'         "2015-01-01"
#'       )
#'     )
#'   ),
#'   Name = "string",
#'   Prefix = "string",
#'   Delimiter = "string",
#'   MaxKeys = 123,
#'   CommonPrefixes = list(
#'     list(
#'       Prefix = "string"
#'     )
#'   ),
#'   EncodingType = "url"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$list_object_versions(
#'   Bucket = "string",
#'   Delimiter = "string",
#'   EncodingType = "url",
#'   KeyMarker = "string",
#'   MaxKeys = 123,
#'   Prefix = "string",
#'   VersionIdMarker = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example return versions of an object with specific key
#' # name prefix. The request limits the number of items returned to two. If
#' # there are are more than two object version, S3 returns NextToken in the
#' # response. You can specify this token value in your next request to fetch
#' # next set of object versions.
#' svc$list_object_versions(
#'   Bucket = "examplebucket",
#'   Prefix = "HappyFace.jpg"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_list_object_versions
s3_list_object_versions <- function(Bucket, Delimiter = NULL, EncodingType = NULL, KeyMarker = NULL, MaxKeys = NULL, Prefix = NULL, VersionIdMarker = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "ListObjectVersions",
    http_method = "GET",
    http_path = "/{Bucket}?versions",
    paginator = list()
  )
  input <- .s3$list_object_versions_input(Bucket = Bucket, Delimiter = Delimiter, EncodingType = EncodingType, KeyMarker = KeyMarker, MaxKeys = MaxKeys, Prefix = Prefix, VersionIdMarker = VersionIdMarker, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$list_object_versions_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_object_versions <- s3_list_object_versions

#' Returns some or all (up to 1,000) of the objects in a bucket
#'
#' @description
#' Returns some or all (up to 1,000) of the objects in a bucket. You can
#' use the request parameters as selection criteria to return a subset of
#' the objects in a bucket. A 200 OK response can contain valid or invalid
#' XML. Be sure to design your application to parse the contents of the
#' response and handle it appropriately.
#' 
#' This API has been revised. We recommend that you use the newer version,
#' [`list_objects_v2`][s3_list_objects_v2], when developing applications.
#' For backward compatibility, Amazon S3 continues to support
#' [`list_objects`][s3_list_objects].
#' 
#' The following operations are related to
#' [`list_objects`][s3_list_objects]:
#' 
#' -   [`list_objects_v2`][s3_list_objects_v2]
#' 
#' -   [`get_object`][s3_get_object]
#' 
#' -   [`put_object`][s3_put_object]
#' 
#' -   [`create_bucket`][s3_create_bucket]
#' 
#' -   [`list_buckets`][s3_list_buckets]
#'
#' @usage
#' s3_list_objects(Bucket, Delimiter, EncodingType, Marker, MaxKeys,
#'   Prefix, RequestPayer, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket containing the objects.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Delimiter A delimiter is a character you use to group keys.
#' @param EncodingType 
#' @param Marker Specifies the key to start with when listing objects in a bucket.
#' @param MaxKeys Sets the maximum number of keys returned in the response. By default the
#' API returns up to 1,000 key names. The response might contain fewer keys
#' but will never contain more.
#' @param Prefix Limits the response to keys that begin with the specified prefix.
#' @param RequestPayer 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.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   IsTruncated = TRUE|FALSE,
#'   Marker = "string",
#'   NextMarker = "string",
#'   Contents = list(
#'     list(
#'       Key = "string",
#'       LastModified = as.POSIXct(
#'         "2015-01-01"
#'       ),
#'       ETag = "string",
#'       Size = 123,
#'       StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"|"OUTPOSTS",
#'       Owner = list(
#'         DisplayName = "string",
#'         ID = "string"
#'       )
#'     )
#'   ),
#'   Name = "string",
#'   Prefix = "string",
#'   Delimiter = "string",
#'   MaxKeys = 123,
#'   CommonPrefixes = list(
#'     list(
#'       Prefix = "string"
#'     )
#'   ),
#'   EncodingType = "url"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$list_objects(
#'   Bucket = "string",
#'   Delimiter = "string",
#'   EncodingType = "url",
#'   Marker = "string",
#'   MaxKeys = 123,
#'   Prefix = "string",
#'   RequestPayer = "requester",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example list two objects in a bucket.
#' svc$list_objects(
#'   Bucket = "examplebucket",
#'   MaxKeys = "2"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_list_objects
s3_list_objects <- function(Bucket, Delimiter = NULL, EncodingType = NULL, Marker = NULL, MaxKeys = NULL, Prefix = NULL, RequestPayer = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "ListObjects",
    http_method = "GET",
    http_path = "/{Bucket}",
    paginator = list()
  )
  input <- .s3$list_objects_input(Bucket = Bucket, Delimiter = Delimiter, EncodingType = EncodingType, Marker = Marker, MaxKeys = MaxKeys, Prefix = Prefix, RequestPayer = RequestPayer, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$list_objects_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_objects <- s3_list_objects

#' Returns some or all (up to 1,000) of the objects in a bucket
#'
#' @description
#' Returns some or all (up to 1,000) of the objects in a bucket. You can
#' use the request parameters as selection criteria to return a subset of
#' the objects in a bucket. A `200 OK` response can contain valid or
#' invalid XML. Make sure to design your application to parse the contents
#' of the response and handle it appropriately.
#' 
#' To use this operation, you must have READ access to the bucket.
#' 
#' To use this operation in an AWS Identity and Access Management (IAM)
#' policy, you must have permissions to perform the `s3:ListBucket` action.
#' The bucket owner has this permission by default and can grant this
#' permission to others. For more information about permissions, see
#' [Permissions Related to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' This section describes the latest revision of the API. We recommend that
#' you use this revised API for application development. For backward
#' compatibility, Amazon S3 continues to support the prior version of this
#' API, [`list_objects`][s3_list_objects].
#' 
#' To get a list of your buckets, see [`list_buckets`][s3_list_buckets].
#' 
#' The following operations are related to
#' [`list_objects_v2`][s3_list_objects_v2]:
#' 
#' -   [`get_object`][s3_get_object]
#' 
#' -   [`put_object`][s3_put_object]
#' 
#' -   [`create_bucket`][s3_create_bucket]
#'
#' @usage
#' s3_list_objects_v2(Bucket, Delimiter, EncodingType, MaxKeys, Prefix,
#'   ContinuationToken, FetchOwner, StartAfter, RequestPayer,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; Bucket name to list.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Delimiter A delimiter is a character you use to group keys.
#' @param EncodingType Encoding type used by Amazon S3 to encode object keys in the response.
#' @param MaxKeys Sets the maximum number of keys returned in the response. By default the
#' API returns up to 1,000 key names. The response might contain fewer keys
#' but will never contain more.
#' @param Prefix Limits the response to keys that begin with the specified prefix.
#' @param ContinuationToken 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.
#' @param FetchOwner 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.
#' @param StartAfter 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.
#' @param RequestPayer 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.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   IsTruncated = TRUE|FALSE,
#'   Contents = list(
#'     list(
#'       Key = "string",
#'       LastModified = as.POSIXct(
#'         "2015-01-01"
#'       ),
#'       ETag = "string",
#'       Size = 123,
#'       StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"|"OUTPOSTS",
#'       Owner = list(
#'         DisplayName = "string",
#'         ID = "string"
#'       )
#'     )
#'   ),
#'   Name = "string",
#'   Prefix = "string",
#'   Delimiter = "string",
#'   MaxKeys = 123,
#'   CommonPrefixes = list(
#'     list(
#'       Prefix = "string"
#'     )
#'   ),
#'   EncodingType = "url",
#'   KeyCount = 123,
#'   ContinuationToken = "string",
#'   NextContinuationToken = "string",
#'   StartAfter = "string"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$list_objects_v2(
#'   Bucket = "string",
#'   Delimiter = "string",
#'   EncodingType = "url",
#'   MaxKeys = 123,
#'   Prefix = "string",
#'   ContinuationToken = "string",
#'   FetchOwner = TRUE|FALSE,
#'   StartAfter = "string",
#'   RequestPayer = "requester",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example retrieves object list. The request specifies max
#' # keys to limit response to include only 2 object keys.
#' svc$list_objects_v2(
#'   Bucket = "examplebucket",
#'   MaxKeys = "2"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_list_objects_v2
s3_list_objects_v2 <- function(Bucket, Delimiter = NULL, EncodingType = NULL, MaxKeys = NULL, Prefix = NULL, ContinuationToken = NULL, FetchOwner = NULL, StartAfter = NULL, RequestPayer = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "ListObjectsV2",
    http_method = "GET",
    http_path = "/{Bucket}?list-type=2",
    paginator = list()
  )
  input <- .s3$list_objects_v2_input(Bucket = Bucket, Delimiter = Delimiter, EncodingType = EncodingType, MaxKeys = MaxKeys, Prefix = Prefix, ContinuationToken = ContinuationToken, FetchOwner = FetchOwner, StartAfter = StartAfter, RequestPayer = RequestPayer, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$list_objects_v2_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_objects_v2 <- s3_list_objects_v2

#' Lists the parts that have been uploaded for a specific multipart upload
#'
#' @description
#' Lists the parts that have been uploaded for a specific multipart upload.
#' This operation must include the upload ID, which you obtain by sending
#' the initiate multipart upload request (see
#' [`create_multipart_upload`][s3_create_multipart_upload]). This request
#' returns a maximum of 1,000 uploaded parts. The default number of parts
#' returned is 1,000 parts. You can restrict the number of parts returned
#' by specifying the `max-parts` request parameter. If your multipart
#' upload consists of more than 1,000 parts, the response returns an
#' `IsTruncated` field with the value of true, and a `NextPartNumberMarker`
#' element. In subsequent [`list_parts`][s3_list_parts] requests you can
#' include the part-number-marker query string parameter and set its value
#' to the `NextPartNumberMarker` field value from the previous response.
#' 
#' For more information on multipart uploads, see [Uploading Objects Using
#' Multipart
#' Upload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html).
#' 
#' For information on permissions required to use the multipart upload API,
#' see [Multipart Upload API and
#' Permissions](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html).
#' 
#' The following operations are related to [`list_parts`][s3_list_parts]:
#' 
#' -   [`create_multipart_upload`][s3_create_multipart_upload]
#' 
#' -   [`upload_part`][s3_upload_part]
#' 
#' -   [`complete_multipart_upload`][s3_complete_multipart_upload]
#' 
#' -   [`abort_multipart_upload`][s3_abort_multipart_upload]
#' 
#' -   [`list_multipart_uploads`][s3_list_multipart_uploads]
#'
#' @usage
#' s3_list_parts(Bucket, Key, MaxParts, PartNumberMarker, UploadId,
#'   RequestPayer, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket to which the parts are being uploaded.
#' 
#' When using this API with an access point, you must direct requests to
#' the access point hostname. The access point hostname takes the form
#' *AccessPointName*-*AccountId*.s3-accesspoint.*Region*.amazonaws.com.
#' When using this operation with an access point through the AWS SDKs, you
#' provide the access point ARN in place of the bucket name. For more
#' information about access point ARNs, see [Using Access
#' Points](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' When using this API with Amazon S3 on Outposts, you must direct requests
#' to the S3 on Outposts hostname. The S3 on Outposts hostname takes the
#' form
#' *AccessPointName*-*AccountId*.*outpostID*.s3-outposts.*Region*.amazonaws.com.
#' When using this operation using S3 on Outposts through the AWS SDKs, you
#' provide the Outposts bucket ARN in place of the bucket name. For more
#' information about S3 on Outposts ARNs, see [Using S3 on
#' Outposts](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param Key &#91;required&#93; Object key for which the multipart upload was initiated.
#' @param MaxParts Sets the maximum number of parts to return.
#' @param PartNumberMarker Specifies the part after which listing should begin. Only parts with
#' higher part numbers will be listed.
#' @param UploadId &#91;required&#93; Upload ID identifying the multipart upload whose parts are being listed.
#' @param RequestPayer 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' A list with the following syntax:
#' ```
#' list(
#'   AbortDate = as.POSIXct(
#'     "2015-01-01"
#'   ),
#'   AbortRuleId = "string",
#'   Bucket = "string",
#'   Key = "string",
#'   UploadId = "string",
#'   PartNumberMarker = 123,
#'   NextPartNumberMarker = 123,
#'   MaxParts = 123,
#'   IsTruncated = TRUE|FALSE,
#'   Parts = list(
#'     list(
#'       PartNumber = 123,
#'       LastModified = as.POSIXct(
#'         "2015-01-01"
#'       ),
#'       ETag = "string",
#'       Size = 123
#'     )
#'   ),
#'   Initiator = list(
#'     ID = "string",
#'     DisplayName = "string"
#'   ),
#'   Owner = list(
#'     DisplayName = "string",
#'     ID = "string"
#'   ),
#'   StorageClass = "STANDARD"|"REDUCED_REDUNDANCY"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"GLACIER"|"DEEP_ARCHIVE"|"OUTPOSTS",
#'   RequestCharged = "requester"
#' )
#' ```
#'
#' @section Request syntax:
#' ```
#' svc$list_parts(
#'   Bucket = "string",
#'   Key = "string",
#'   MaxParts = 123,
#'   PartNumberMarker = 123,
#'   UploadId = "string",
#'   RequestPayer = "requester",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example lists parts uploaded for a specific multipart
#' # upload.
#' svc$list_parts(
#'   Bucket = "examplebucket",
#'   Key = "bigobject",
#'   UploadId = "example7YPBOJuoFiQ9cz4P3Pe6FIZwO4f7wN93uHsNBEw97pl5eNwzExg0LA..."
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_list_parts
s3_list_parts <- function(Bucket, Key, MaxParts = NULL, PartNumberMarker = NULL, UploadId, RequestPayer = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "ListParts",
    http_method = "GET",
    http_path = "/{Bucket}/{Key+}",
    paginator = list()
  )
  input <- .s3$list_parts_input(Bucket = Bucket, Key = Key, MaxParts = MaxParts, PartNumberMarker = PartNumberMarker, UploadId = UploadId, RequestPayer = RequestPayer, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$list_parts_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$list_parts <- s3_list_parts

#' Sets the accelerate configuration of an existing bucket
#'
#' @description
#' Sets the accelerate configuration of an existing bucket. Amazon S3
#' Transfer Acceleration is a bucket-level feature that enables you to
#' perform faster data transfers to Amazon S3.
#' 
#' To use this operation, you must have permission to perform the
#' s3:PutAccelerateConfiguration action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' The Transfer Acceleration state of a bucket can be set to one of the
#' following two values:
#' 
#' -   Enabled – Enables accelerated data transfers to the bucket.
#' 
#' -   Suspended – Disables accelerated data transfers to the bucket.
#' 
#' The
#' [`get_bucket_accelerate_configuration`][s3_get_bucket_accelerate_configuration]
#' operation returns the transfer acceleration state of a bucket.
#' 
#' After setting the Transfer Acceleration state of a bucket to Enabled, it
#' might take up to thirty minutes before the data transfer rates to the
#' bucket increase.
#' 
#' The name of the bucket used for Transfer Acceleration must be
#' DNS-compliant and must not contain periods (".").
#' 
#' For more information about transfer acceleration, see [Transfer
#' Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html).
#' 
#' The following operations are related to
#' [`put_bucket_accelerate_configuration`][s3_put_bucket_accelerate_configuration]:
#' 
#' -   [`get_bucket_accelerate_configuration`][s3_get_bucket_accelerate_configuration]
#' 
#' -   [`create_bucket`][s3_create_bucket]
#'
#' @usage
#' s3_put_bucket_accelerate_configuration(Bucket, AccelerateConfiguration,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which the accelerate configuration is set.
#' @param AccelerateConfiguration &#91;required&#93; Container for setting the transfer acceleration state.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_accelerate_configuration(
#'   Bucket = "string",
#'   AccelerateConfiguration = list(
#'     Status = "Enabled"|"Suspended"
#'   ),
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_accelerate_configuration
s3_put_bucket_accelerate_configuration <- function(Bucket, AccelerateConfiguration, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketAccelerateConfiguration",
    http_method = "PUT",
    http_path = "/{Bucket}?accelerate",
    paginator = list()
  )
  input <- .s3$put_bucket_accelerate_configuration_input(Bucket = Bucket, AccelerateConfiguration = AccelerateConfiguration, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_accelerate_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_accelerate_configuration <- s3_put_bucket_accelerate_configuration

#' Sets the permissions on an existing bucket using access control lists
#' (ACL)
#'
#' @description
#' Sets the permissions on an existing bucket using access control lists
#' (ACL). For more information, see [Using
#' ACLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl_overview.html).
#' To set the ACL of a bucket, you must have `WRITE_ACP` permission.
#' 
#' You can use one of the following two ways to set a bucket's permissions:
#' 
#' -   Specify the ACL in the request body
#' 
#' -   Specify permissions using request headers
#' 
#' You cannot specify access permission using both the body and the request
#' headers.
#' 
#' Depending on your application needs, you may choose to set the ACL on a
#' bucket using either the request body or the headers. For example, if you
#' have an existing application that updates a bucket ACL using the request
#' body, then you can continue to use that approach.
#' 
#' **Access Permissions**
#' 
#' You can set access permissions using one of the following methods:
#' 
#' -   Specify a canned ACL with the `x-amz-acl` request header. Amazon S3
#'     supports a set of predefined ACLs, known as *canned ACLs*. Each
#'     canned ACL has a predefined set of grantees and permissions. Specify
#'     the canned ACL name as the value of `x-amz-acl`. If you use this
#'     header, you cannot use other access control-specific headers in your
#'     request. For more information, see [Canned
#'     ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#CannedACL).
#' 
#' -   Specify access permissions explicitly with the `x-amz-grant-read`,
#'     `x-amz-grant-read-acp`, `x-amz-grant-write-acp`, and
#'     `x-amz-grant-full-control` headers. When using these headers, you
#'     specify explicit access permissions and grantees (AWS accounts or
#'     Amazon S3 groups) who will receive the permission. If you use these
#'     ACL-specific headers, you cannot use the `x-amz-acl` header to set a
#'     canned ACL. These parameters map to the set of permissions that
#'     Amazon S3 supports in an ACL. For more information, see [Access
#'     Control List (ACL)
#'     Overview](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html).
#' 
#'     You specify each grantee as a type=value pair, where the type is one
#'     of the following:
#' 
#'     -   `id` – if the value specified is the canonical user ID of an AWS
#'         account
#' 
#'     -   `uri` – if you are granting permissions to a predefined group
#' 
#'     -   `emailAddress` – if the value specified is the email address of
#'         an AWS account
#' 
#'         Using email addresses to specify a grantee is only supported in
#'         the following AWS Regions:
#' 
#'         -   US East (N. Virginia)
#' 
#'         -   US West (N. California)
#' 
#'         -   US West (Oregon)
#' 
#'         -   Asia Pacific (Singapore)
#' 
#'         -   Asia Pacific (Sydney)
#' 
#'         -   Asia Pacific (Tokyo)
#' 
#'         -   Europe (Ireland)
#' 
#'         -   South America (São Paulo)
#' 
#'         For a list of all the Amazon S3 supported Regions and endpoints,
#'         see [Regions and
#'         Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)
#'         in the AWS General Reference.
#' 
#'     For example, the following `x-amz-grant-write` header grants create,
#'     overwrite, and delete objects permission to LogDelivery group
#'     predefined by Amazon S3 and two AWS accounts identified by their
#'     email addresses.
#' 
#'     `x-amz-grant-write: uri="http://acs.amazonaws.com/groups/s3/LogDelivery", id="111122223333", id="555566667777" `
#' 
#' You can use either a canned ACL or specify access permissions
#' explicitly. You cannot do both.
#' 
#' **Grantee Values**
#' 
#' You can specify the person (grantee) to whom you're assigning access
#' rights (using request elements) in the following ways:
#' 
#' -   By the person's ID:
#' 
#'     `<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID><>ID<></ID><DisplayName><>GranteesEmail<></DisplayName> </Grantee>`
#' 
#'     DisplayName is optional and ignored in the request
#' 
#' -   By URI:
#' 
#'     `<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"><URI><>http://acs.amazonaws.com/groups/global/AuthenticatedUsers<></URI></Grantee>`
#' 
#' -   By Email address:
#' 
#'     `<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AmazonCustomerByEmail"><EmailAddress><>Grantees@@email.com<></EmailAddress>lt;/Grantee>`
#' 
#'     The grantee is resolved to the CanonicalUser and, in a response to a
#'     GET Object acl request, appears as the CanonicalUser.
#' 
#'     Using email addresses to specify a grantee is only supported in the
#'     following AWS Regions:
#' 
#'     -   US East (N. Virginia)
#' 
#'     -   US West (N. California)
#' 
#'     -   US West (Oregon)
#' 
#'     -   Asia Pacific (Singapore)
#' 
#'     -   Asia Pacific (Sydney)
#' 
#'     -   Asia Pacific (Tokyo)
#' 
#'     -   Europe (Ireland)
#' 
#'     -   South America (São Paulo)
#' 
#'     For a list of all the Amazon S3 supported Regions and endpoints, see
#'     [Regions and
#'     Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)
#'     in the AWS General Reference.
#' 
#' **Related Resources**
#' 
#' -   [`create_bucket`][s3_create_bucket]
#' 
#' -   [`delete_bucket`][s3_delete_bucket]
#' 
#' -   [`get_object_acl`][s3_get_object_acl]
#'
#' @usage
#' s3_put_bucket_acl(ACL, AccessControlPolicy, Bucket, ContentMD5,
#'   GrantFullControl, GrantRead, GrantReadACP, GrantWrite, GrantWriteACP,
#'   ExpectedBucketOwner)
#'
#' @param ACL The canned ACL to apply to the bucket.
#' @param AccessControlPolicy Contains the elements that set the ACL permissions for an object per
#' grantee.
#' @param Bucket &#91;required&#93; The bucket to which to apply the ACL.
#' @param ContentMD5 The base64-encoded 128-bit MD5 digest of the data. This header must be
#' used as a message integrity check to verify that the request body was
#' not corrupted in transit. For more information, go to [RFC
#' 1864.](https://www.ietf.org/rfc/rfc1864.txt)
#' 
#' For requests made using the AWS Command Line Interface (CLI) or AWS
#' SDKs, this field is calculated automatically.
#' @param GrantFullControl Allows grantee the read, write, read ACP, and write ACP permissions on
#' the bucket.
#' @param GrantRead Allows grantee to list the objects in the bucket.
#' @param GrantReadACP Allows grantee to read the bucket ACL.
#' @param GrantWrite Allows grantee to create, overwrite, and delete any object in the
#' bucket.
#' @param GrantWriteACP Allows grantee to write the ACL for the applicable bucket.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_acl(
#'   ACL = "private"|"public-read"|"public-read-write"|"authenticated-read",
#'   AccessControlPolicy = list(
#'     Grants = list(
#'       list(
#'         Grantee = list(
#'           DisplayName = "string",
#'           EmailAddress = "string",
#'           ID = "string",
#'           Type = "CanonicalUser"|"AmazonCustomerByEmail"|"Group",
#'           URI = "string"
#'         ),
#'         Permission = "FULL_CONTROL"|"WRITE"|"WRITE_ACP"|"READ"|"READ_ACP"
#'       )
#'     ),
#'     Owner = list(
#'       DisplayName = "string",
#'       ID = "string"
#'     )
#'   ),
#'   Bucket = "string",
#'   ContentMD5 = "string",
#'   GrantFullControl = "string",
#'   GrantRead = "string",
#'   GrantReadACP = "string",
#'   GrantWrite = "string",
#'   GrantWriteACP = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example replaces existing ACL on a bucket. The ACL grants
#' # the bucket owner (specified using the owner ID) and write permission to
#' # the LogDelivery group. Because this is a replace operation, you must
#' # specify all the grants in your request. To incrementally add or remove
#' # ACL grants, you might use the console.
#' svc$put_bucket_acl(
#'   Bucket = "examplebucket",
#'   GrantFullControl = "id=examplee7a2f25102679df27bb0ae12b3f85be6f290b936c4393484",
#'   GrantWrite = "uri=http://acs.amazonaws.com/groups/s3/LogDelivery"
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_acl
s3_put_bucket_acl <- function(ACL = NULL, AccessControlPolicy = NULL, Bucket, ContentMD5 = NULL, GrantFullControl = NULL, GrantRead = NULL, GrantReadACP = NULL, GrantWrite = NULL, GrantWriteACP = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketAcl",
    http_method = "PUT",
    http_path = "/{Bucket}?acl",
    paginator = list()
  )
  input <- .s3$put_bucket_acl_input(ACL = ACL, AccessControlPolicy = AccessControlPolicy, Bucket = Bucket, ContentMD5 = ContentMD5, GrantFullControl = GrantFullControl, GrantRead = GrantRead, GrantReadACP = GrantReadACP, GrantWrite = GrantWrite, GrantWriteACP = GrantWriteACP, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_acl_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_acl <- s3_put_bucket_acl

#' Sets an analytics configuration for the bucket (specified by the
#' analytics configuration ID)
#'
#' @description
#' Sets an analytics configuration for the bucket (specified by the
#' analytics configuration ID). You can have up to 1,000 analytics
#' configurations per bucket.
#' 
#' You can choose to have storage class analysis export analysis reports
#' sent to a comma-separated values (CSV) flat file. See the `DataExport`
#' request element. Reports are updated daily and are based on the object
#' filters that you configure. When selecting data export, you specify a
#' destination bucket and an optional destination prefix where the file is
#' written. You can export the data to a destination bucket in a different
#' account. However, the destination bucket must be in the same Region as
#' the bucket that you are making the PUT analytics configuration to. For
#' more information, see [Amazon S3 Analytics – Storage Class
#' Analysis](https://docs.aws.amazon.com/AmazonS3/latest/userguide/analytics-storage-class.html).
#' 
#' You must create a bucket policy on the destination bucket where the
#' exported file is written to grant permissions to Amazon S3 to write
#' objects to the bucket. For an example policy, see [Granting Permissions
#' for Amazon S3 Inventory and Storage Class
#' Analysis](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-9).
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:PutAnalyticsConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' **Special Errors**
#' 
#' -   -   *HTTP Error: HTTP 400 Bad Request*
#' 
#'     -   *Code: InvalidArgument*
#' 
#'     -   *Cause: Invalid argument.*
#' 
#' -   -   *HTTP Error: HTTP 400 Bad Request*
#' 
#'     -   *Code: TooManyConfigurations*
#' 
#'     -   *Cause: You are attempting to create a new configuration but
#'         have already reached the 1,000-configuration limit.*
#' 
#' -   -   *HTTP Error: HTTP 403 Forbidden*
#' 
#'     -   *Code: AccessDenied*
#' 
#'     -   *Cause: You are not the owner of the specified bucket, or you do
#'         not have the s3:PutAnalyticsConfiguration bucket permission to
#'         set the configuration on the bucket.*
#' 
#' **Related Resources**
#' 
#' -   [`get_bucket_analytics_configuration`][s3_get_bucket_analytics_configuration]
#' 
#' -   [`delete_bucket_analytics_configuration`][s3_delete_bucket_analytics_configuration]
#' 
#' -   [`list_bucket_analytics_configurations`][s3_list_bucket_analytics_configurations]
#'
#' @usage
#' s3_put_bucket_analytics_configuration(Bucket, Id,
#'   AnalyticsConfiguration, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket to which an analytics configuration is stored.
#' @param Id &#91;required&#93; The ID that identifies the analytics configuration.
#' @param AnalyticsConfiguration &#91;required&#93; The configuration and any analyses for the analytics filter.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_analytics_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   AnalyticsConfiguration = list(
#'     Id = "string",
#'     Filter = list(
#'       Prefix = "string",
#'       Tag = list(
#'         Key = "string",
#'         Value = "string"
#'       ),
#'       And = list(
#'         Prefix = "string",
#'         Tags = list(
#'           list(
#'             Key = "string",
#'             Value = "string"
#'           )
#'         )
#'       )
#'     ),
#'     StorageClassAnalysis = list(
#'       DataExport = list(
#'         OutputSchemaVersion = "V_1",
#'         Destination = list(
#'           S3BucketDestination = list(
#'             Format = "CSV",
#'             BucketAccountId = "string",
#'             Bucket = "string",
#'             Prefix = "string"
#'           )
#'         )
#'       )
#'     )
#'   ),
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_analytics_configuration
s3_put_bucket_analytics_configuration <- function(Bucket, Id, AnalyticsConfiguration, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketAnalyticsConfiguration",
    http_method = "PUT",
    http_path = "/{Bucket}?analytics",
    paginator = list()
  )
  input <- .s3$put_bucket_analytics_configuration_input(Bucket = Bucket, Id = Id, AnalyticsConfiguration = AnalyticsConfiguration, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_analytics_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_analytics_configuration <- s3_put_bucket_analytics_configuration

#' Sets the cors configuration for your bucket
#'
#' @description
#' Sets the `cors` configuration for your bucket. If the configuration
#' exists, Amazon S3 replaces it.
#' 
#' To use this operation, you must be allowed to perform the
#' `s3:PutBucketCORS` action. By default, the bucket owner has this
#' permission and can grant it to others.
#' 
#' You set this configuration on a bucket so that the bucket can service
#' cross-origin requests. For example, you might want to enable a request
#' whose origin is `http://www.example.com` to access your Amazon S3 bucket
#' at `my.example.bucket.com` by using the browser's `XMLHttpRequest`
#' capability.
#' 
#' To enable cross-origin resource sharing (CORS) on a bucket, you add the
#' `cors` subresource to the bucket. The `cors` subresource is an XML
#' document in which you configure rules that identify origins and the HTTP
#' methods that can be executed on your bucket. The document is limited to
#' 64 KB in size.
#' 
#' When Amazon S3 receives a cross-origin request (or a pre-flight OPTIONS
#' request) against a bucket, it evaluates the `cors` configuration on the
#' bucket and uses the first `CORSRule` rule that matches the incoming
#' browser request to enable a cross-origin request. For a rule to match,
#' the following conditions must be met:
#' 
#' -   The request's `Origin` header must match `AllowedOrigin` elements.
#' 
#' -   The request method (for example, GET, PUT, HEAD, and so on) or the
#'     `Access-Control-Request-Method` header in case of a pre-flight
#'     `OPTIONS` request must be one of the `AllowedMethod` elements.
#' 
#' -   Every header specified in the `Access-Control-Request-Headers`
#'     request header of a pre-flight request must match an `AllowedHeader`
#'     element.
#' 
#' For more information about CORS, go to [Enabling Cross-Origin Resource
#' Sharing](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' **Related Resources**
#' 
#' -   [`get_bucket_cors`][s3_get_bucket_cors]
#' 
#' -   [`delete_bucket_cors`][s3_delete_bucket_cors]
#' 
#' -   [RESTOPTIONSobject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html)
#'
#' @usage
#' s3_put_bucket_cors(Bucket, CORSConfiguration, ContentMD5,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; Specifies the bucket impacted by the `cors`configuration.
#' @param CORSConfiguration &#91;required&#93; Describes the cross-origin access configuration for objects in an Amazon
#' S3 bucket. For more information, see [Enabling Cross-Origin Resource
#' Sharing](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param ContentMD5 The base64-encoded 128-bit MD5 digest of the data. This header must be
#' used as a message integrity check to verify that the request body was
#' not corrupted in transit. For more information, go to [RFC
#' 1864.](https://www.ietf.org/rfc/rfc1864.txt)
#' 
#' For requests made using the AWS Command Line Interface (CLI) or AWS
#' SDKs, this field is calculated automatically.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_cors(
#'   Bucket = "string",
#'   CORSConfiguration = list(
#'     CORSRules = list(
#'       list(
#'         AllowedHeaders = list(
#'           "string"
#'         ),
#'         AllowedMethods = list(
#'           "string"
#'         ),
#'         AllowedOrigins = list(
#'           "string"
#'         ),
#'         ExposeHeaders = list(
#'           "string"
#'         ),
#'         MaxAgeSeconds = 123
#'       )
#'     )
#'   ),
#'   ContentMD5 = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example enables PUT, POST, and DELETE requests from
#' # www.example.com, and enables GET requests from any domain.
#' svc$put_bucket_cors(
#'   Bucket = "",
#'   CORSConfiguration = list(
#'     CORSRules = list(
#'       list(
#'         AllowedHeaders = list(
#'           "*"
#'         ),
#'         AllowedMethods = list(
#'           "PUT",
#'           "POST",
#'           "DELETE"
#'         ),
#'         AllowedOrigins = list(
#'           "http://www.example.com"
#'         ),
#'         ExposeHeaders = list(
#'           "x-amz-server-side-encryption"
#'         ),
#'         MaxAgeSeconds = 3000L
#'       ),
#'       list(
#'         AllowedHeaders = list(
#'           "Authorization"
#'         ),
#'         AllowedMethods = list(
#'           "GET"
#'         ),
#'         AllowedOrigins = list(
#'           "*"
#'         ),
#'         MaxAgeSeconds = 3000L
#'       )
#'     )
#'   ),
#'   ContentMD5 = ""
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_cors
s3_put_bucket_cors <- function(Bucket, CORSConfiguration, ContentMD5 = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketCors",
    http_method = "PUT",
    http_path = "/{Bucket}?cors",
    paginator = list()
  )
  input <- .s3$put_bucket_cors_input(Bucket = Bucket, CORSConfiguration = CORSConfiguration, ContentMD5 = ContentMD5, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_cors_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_cors <- s3_put_bucket_cors

#' This operation uses the encryption subresource to configure default
#' encryption and Amazon S3 Bucket Key for an existing bucket
#'
#' @description
#' This operation uses the `encryption` subresource to configure default
#' encryption and Amazon S3 Bucket Key for an existing bucket.
#' 
#' Default encryption for a bucket can use server-side encryption with
#' Amazon S3-managed keys (SSE-S3) or AWS KMS customer master keys
#' (SSE-KMS). If you specify default encryption using SSE-KMS, you can also
#' configure Amazon S3 Bucket Key. For information about default
#' encryption, see [Amazon S3 default bucket
#' encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html)
#' in the *Amazon Simple Storage Service Developer Guide*. For more
#' information about S3 Bucket Keys, see [Amazon S3 Bucket
#' Keys](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' This operation requires AWS Signature Version 4. For more information,
#' see Authenticating Requests (AWS Signature Version 4).
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:PutEncryptionConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)
#' in the Amazon Simple Storage Service Developer Guide.
#' 
#' **Related Resources**
#' 
#' -   [`get_bucket_encryption`][s3_get_bucket_encryption]
#' 
#' -   [`delete_bucket_encryption`][s3_delete_bucket_encryption]
#'
#' @usage
#' s3_put_bucket_encryption(Bucket, ContentMD5,
#'   ServerSideEncryptionConfiguration, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; Specifies default encryption for a bucket using server-side encryption
#' with Amazon S3-managed keys (SSE-S3) or customer master keys stored in
#' AWS KMS (SSE-KMS). For information about the Amazon S3 default
#' encryption feature, see [Amazon S3 Default Bucket
#' Encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' @param ContentMD5 The base64-encoded 128-bit MD5 digest of the server-side encryption
#' configuration.
#' 
#' For requests made using the AWS Command Line Interface (CLI) or AWS
#' SDKs, this field is calculated automatically.
#' @param ServerSideEncryptionConfiguration &#91;required&#93; 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_encryption(
#'   Bucket = "string",
#'   ContentMD5 = "string",
#'   ServerSideEncryptionConfiguration = list(
#'     Rules = list(
#'       list(
#'         ApplyServerSideEncryptionByDefault = list(
#'           SSEAlgorithm = "AES256"|"aws:kms",
#'           KMSMasterKeyID = "string"
#'         ),
#'         BucketKeyEnabled = TRUE|FALSE
#'       )
#'     )
#'   ),
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_encryption
s3_put_bucket_encryption <- function(Bucket, ContentMD5 = NULL, ServerSideEncryptionConfiguration, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketEncryption",
    http_method = "PUT",
    http_path = "/{Bucket}?encryption",
    paginator = list()
  )
  input <- .s3$put_bucket_encryption_input(Bucket = Bucket, ContentMD5 = ContentMD5, ServerSideEncryptionConfiguration = ServerSideEncryptionConfiguration, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_encryption_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_encryption <- s3_put_bucket_encryption

#' Puts a S3 Intelligent-Tiering configuration to the specified bucket
#'
#' @description
#' Puts a S3 Intelligent-Tiering configuration to the specified bucket.
#' 
#' The S3 Intelligent-Tiering storage class is designed to optimize storage
#' costs by automatically moving data to the most cost-effective storage
#' access tier, without additional operational overhead. S3
#' Intelligent-Tiering delivers automatic cost savings by moving data
#' between access tiers, when access patterns change.
#' 
#' The S3 Intelligent-Tiering storage class is suitable for objects larger
#' than 128 KB that you plan to store for at least 30 days. If the size of
#' an object is less than 128 KB, it is not eligible for auto-tiering.
#' Smaller objects can be stored, but they are always charged at the
#' frequent access tier rates in the S3 Intelligent-Tiering storage class.
#' 
#' If you delete an object before the end of the 30-day minimum storage
#' duration period, you are charged for 30 days. For more information, see
#' [Storage class for automatically optimizing frequently and infrequently
#' accessed
#' objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-dynamic-data-access).
#' 
#' Operations related to
#' [`put_bucket_intelligent_tiering_configuration`][s3_put_bucket_intelligent_tiering_configuration]
#' include:
#' 
#' -   [`delete_bucket_intelligent_tiering_configuration`][s3_delete_bucket_intelligent_tiering_configuration]
#' 
#' -   [`get_bucket_intelligent_tiering_configuration`][s3_get_bucket_intelligent_tiering_configuration]
#' 
#' -   [`list_bucket_intelligent_tiering_configurations`][s3_list_bucket_intelligent_tiering_configurations]
#'
#' @usage
#' s3_put_bucket_intelligent_tiering_configuration(Bucket, Id,
#'   IntelligentTieringConfiguration)
#'
#' @param Bucket &#91;required&#93; The name of the Amazon S3 bucket whose configuration you want to modify
#' or retrieve.
#' @param Id &#91;required&#93; The ID used to identify the S3 Intelligent-Tiering configuration.
#' @param IntelligentTieringConfiguration &#91;required&#93; Container for S3 Intelligent-Tiering configuration.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_intelligent_tiering_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   IntelligentTieringConfiguration = list(
#'     Id = "string",
#'     Filter = list(
#'       Prefix = "string",
#'       Tag = list(
#'         Key = "string",
#'         Value = "string"
#'       ),
#'       And = list(
#'         Prefix = "string",
#'         Tags = list(
#'           list(
#'             Key = "string",
#'             Value = "string"
#'           )
#'         )
#'       )
#'     ),
#'     Status = "Enabled"|"Disabled",
#'     Tierings = list(
#'       list(
#'         Days = 123,
#'         AccessTier = "ARCHIVE_ACCESS"|"DEEP_ARCHIVE_ACCESS"
#'       )
#'     )
#'   )
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_intelligent_tiering_configuration
s3_put_bucket_intelligent_tiering_configuration <- function(Bucket, Id, IntelligentTieringConfiguration) {
  op <- new_operation(
    name = "PutBucketIntelligentTieringConfiguration",
    http_method = "PUT",
    http_path = "/{Bucket}?intelligent-tiering",
    paginator = list()
  )
  input <- .s3$put_bucket_intelligent_tiering_configuration_input(Bucket = Bucket, Id = Id, IntelligentTieringConfiguration = IntelligentTieringConfiguration)
  output <- .s3$put_bucket_intelligent_tiering_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_intelligent_tiering_configuration <- s3_put_bucket_intelligent_tiering_configuration

#' This implementation of the PUT operation adds an inventory configuration
#' (identified by the inventory ID) to the bucket
#'
#' @description
#' This implementation of the `PUT` operation adds an inventory
#' configuration (identified by the inventory ID) to the bucket. You can
#' have up to 1,000 inventory configurations per bucket.
#' 
#' Amazon S3 inventory generates inventories of the objects in the bucket
#' on a daily or weekly basis, and the results are published to a flat
#' file. The bucket that is inventoried is called the *source* bucket, and
#' the bucket where the inventory flat file is stored is called the
#' *destination* bucket. The *destination* bucket must be in the same AWS
#' Region as the *source* bucket.
#' 
#' When you configure an inventory for a *source* bucket, you specify the
#' *destination* bucket where you want the inventory to be stored, and
#' whether to generate the inventory daily or weekly. You can also
#' configure what object metadata to include and whether to inventory all
#' object versions or only current versions. For more information, see
#' [Amazon S3
#' Inventory](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html)
#' in the Amazon Simple Storage Service Developer Guide.
#' 
#' You must create a bucket policy on the *destination* bucket to grant
#' permissions to Amazon S3 to write objects to the bucket in the defined
#' location. For an example policy, see [Granting Permissions for Amazon S3
#' Inventory and Storage Class
#' Analysis](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-9).
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:PutInventoryConfiguration` action. The bucket owner has this
#' permission by default and can grant this permission to others. For more
#' information about permissions, see [Permissions Related to Bucket
#' Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)
#' in the Amazon Simple Storage Service Developer Guide.
#' 
#' **Special Errors**
#' 
#' -   **HTTP 400 Bad Request Error**
#' 
#'     -   *Code:* InvalidArgument
#' 
#'     -   *Cause:* Invalid Argument
#' 
#' -   **HTTP 400 Bad Request Error**
#' 
#'     -   *Code:* TooManyConfigurations
#' 
#'     -   *Cause:* You are attempting to create a new configuration but
#'         have already reached the 1,000-configuration limit.
#' 
#' -   **HTTP 403 Forbidden Error**
#' 
#'     -   *Code:* AccessDenied
#' 
#'     -   *Cause:* You are not the owner of the specified bucket, or you
#'         do not have the `s3:PutInventoryConfiguration` bucket permission
#'         to set the configuration on the bucket.
#' 
#' **Related Resources**
#' 
#' -   [`get_bucket_inventory_configuration`][s3_get_bucket_inventory_configuration]
#' 
#' -   [`delete_bucket_inventory_configuration`][s3_delete_bucket_inventory_configuration]
#' 
#' -   [`list_bucket_inventory_configurations`][s3_list_bucket_inventory_configurations]
#'
#' @usage
#' s3_put_bucket_inventory_configuration(Bucket, Id,
#'   InventoryConfiguration, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket where the inventory configuration will be stored.
#' @param Id &#91;required&#93; The ID used to identify the inventory configuration.
#' @param InventoryConfiguration &#91;required&#93; Specifies the inventory configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_inventory_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   InventoryConfiguration = list(
#'     Destination = list(
#'       S3BucketDestination = list(
#'         AccountId = "string",
#'         Bucket = "string",
#'         Format = "CSV"|"ORC"|"Parquet",
#'         Prefix = "string",
#'         Encryption = list(
#'           SSES3 = list(),
#'           SSEKMS = list(
#'             KeyId = "string"
#'           )
#'         )
#'       )
#'     ),
#'     IsEnabled = TRUE|FALSE,
#'     Filter = list(
#'       Prefix = "string"
#'     ),
#'     Id = "string",
#'     IncludedObjectVersions = "All"|"Current",
#'     OptionalFields = list(
#'       "Size"|"LastModifiedDate"|"StorageClass"|"ETag"|"IsMultipartUploaded"|"ReplicationStatus"|"EncryptionStatus"|"ObjectLockRetainUntilDate"|"ObjectLockMode"|"ObjectLockLegalHoldStatus"|"IntelligentTieringAccessTier"
#'     ),
#'     Schedule = list(
#'       Frequency = "Daily"|"Weekly"
#'     )
#'   ),
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_inventory_configuration
s3_put_bucket_inventory_configuration <- function(Bucket, Id, InventoryConfiguration, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketInventoryConfiguration",
    http_method = "PUT",
    http_path = "/{Bucket}?inventory",
    paginator = list()
  )
  input <- .s3$put_bucket_inventory_configuration_input(Bucket = Bucket, Id = Id, InventoryConfiguration = InventoryConfiguration, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_inventory_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_inventory_configuration <- s3_put_bucket_inventory_configuration

#' For an updated version of this API, see PutBucketLifecycleConfiguration
#'
#' @description
#' For an updated version of this API, see
#' [`put_bucket_lifecycle_configuration`][s3_put_bucket_lifecycle_configuration].
#' This version has been deprecated. Existing lifecycle configurations will
#' work. For new lifecycle configurations, use the updated API.
#' 
#' Creates a new lifecycle configuration for the bucket or replaces an
#' existing lifecycle configuration. For information about lifecycle
#' configuration, see [Object Lifecycle
#' Management](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' By default, all Amazon S3 resources, including buckets, objects, and
#' related subresources (for example, lifecycle configuration and website
#' configuration) are private. Only the resource owner, the AWS account
#' that created the resource, can access it. The resource owner can
#' optionally grant access permissions to others by writing an access
#' policy. For this operation, users must get the
#' `s3:PutLifecycleConfiguration` permission.
#' 
#' You can also explicitly deny permissions. Explicit denial also
#' supersedes any other permissions. If you want to prevent users or
#' accounts from removing or deleting objects from your bucket, you must
#' deny them permissions for the following actions:
#' 
#' -   `s3:DeleteObject`
#' 
#' -   `s3:DeleteObjectVersion`
#' 
#' -   `s3:PutLifecycleConfiguration`
#' 
#' For more information about permissions, see [Managing Access Permissions
#' to your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)
#' in the *Amazon Simple Storage Service Developer Guide*.
#' 
#' For more examples of transitioning objects to storage classes such as
#' STANDARD_IA or ONEZONE_IA, see [Examples of Lifecycle
#' Configuration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html#lifecycle-configuration-examples).
#' 
#' **Related Resources**
#' 
#' -   [`get_bucket_lifecycle`][s3_get_bucket_lifecycle](Deprecated)
#' 
#' -   [`get_bucket_lifecycle_configuration`][s3_get_bucket_lifecycle_configuration]
#' 
#' -   [`restore_object`][s3_restore_object]
#' 
#' -   By default, a resource owner—in this case, a bucket owner, which is
#'     the AWS account that created the bucket—can perform any of the
#'     operations. A resource owner can also grant others permission to
#'     perform the operation. For more information, see the following
#'     topics in the Amazon Simple Storage Service Developer Guide:
#' 
#'     -   [Specifying Permissions in a
#'         Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html)
#' 
#'     -   [Managing Access Permissions to your Amazon S3
#'         Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)
#'
#' @usage
#' s3_put_bucket_lifecycle(Bucket, ContentMD5, LifecycleConfiguration,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; 
#' @param ContentMD5 For requests made using the AWS Command Line Interface (CLI) or AWS
#' SDKs, this field is calculated automatically.
#' @param LifecycleConfiguration 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_lifecycle(
#'   Bucket = "string",
#'   ContentMD5 = "string",
#'   LifecycleConfiguration = list(
#'     Rules = list(
#'       list(
#'         Expiration = list(
#'           Date = as.POSIXct(
#'             "2015-01-01"
#'           ),
#'           Days = 123,
#'           ExpiredObjectDeleteMarker = TRUE|FALSE
#'         ),
#'         ID = "string",
#'         Prefix = "string",
#'         Status = "Enabled"|"Disabled",
#'         Transition = list(
#'           Date = as.POSIXct(
#'             "2015-01-01"
#'           ),
#'           Days = 123,
#'           StorageClass = "GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"
#'         ),
#'         NoncurrentVersionTransition = list(
#'           NoncurrentDays = 123,
#'           StorageClass = "GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"
#'         ),
#'         NoncurrentVersionExpiration = list(
#'           NoncurrentDays = 123
#'         ),
#'         AbortIncompleteMultipartUpload = list(
#'           DaysAfterInitiation = 123
#'         )
#'       )
#'     )
#'   ),
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_lifecycle
s3_put_bucket_lifecycle <- function(Bucket, ContentMD5 = NULL, LifecycleConfiguration = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketLifecycle",
    http_method = "PUT",
    http_path = "/{Bucket}?lifecycle",
    paginator = list()
  )
  input <- .s3$put_bucket_lifecycle_input(Bucket = Bucket, ContentMD5 = ContentMD5, LifecycleConfiguration = LifecycleConfiguration, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_lifecycle_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_lifecycle <- s3_put_bucket_lifecycle

#' Creates a new lifecycle configuration for the bucket or replaces an
#' existing lifecycle configuration
#'
#' @description
#' Creates a new lifecycle configuration for the bucket or replaces an
#' existing lifecycle configuration. For information about lifecycle
#' configuration, see [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' Bucket lifecycle configuration now supports specifying a lifecycle rule
#' using an object key name prefix, one or more object tags, or a
#' combination of both. Accordingly, this section describes the latest API.
#' The previous version of the API supported filtering based only on an
#' object key name prefix, which is supported for backward compatibility.
#' For the related API description, see
#' [`put_bucket_lifecycle`][s3_put_bucket_lifecycle].
#' 
#' **Rules**
#' 
#' You specify the lifecycle configuration in your request body. The
#' lifecycle configuration is specified as XML consisting of one or more
#' rules. Each rule consists of the following:
#' 
#' -   Filter identifying a subset of objects to which the rule applies.
#'     The filter can be based on a key name prefix, object tags, or a
#'     combination of both.
#' 
#' -   Status whether the rule is in effect.
#' 
#' -   One or more lifecycle transition and expiration actions that you
#'     want Amazon S3 to perform on the objects identified by the filter.
#'     If the state of your bucket is versioning-enabled or
#'     versioning-suspended, you can have many versions of the same object
#'     (one current version and zero or more noncurrent versions). Amazon
#'     S3 provides predefined actions that you can specify for current and
#'     noncurrent object versions.
#' 
#' For more information, see [Object Lifecycle
#' Management](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)
#' and [Lifecycle Configuration
#' Elements](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html).
#' 
#' **Permissions**
#' 
#' By default, all Amazon S3 resources are private, including buckets,
#' objects, and related subresources (for example, lifecycle configuration
#' and website configuration). Only the resource owner (that is, the AWS
#' account that created it) can access the resource. The resource owner can
#' optionally grant access permissions to others by writing an access
#' policy. For this operation, a user must get the
#' s3:PutLifecycleConfiguration permission.
#' 
#' You can also explicitly deny permissions. Explicit deny also supersedes
#' any other permissions. If you want to block users or accounts from
#' removing or deleting objects from your bucket, you must deny them
#' permissions for the following actions:
#' 
#' -   s3:DeleteObject
#' 
#' -   s3:DeleteObjectVersion
#' 
#' -   s3:PutLifecycleConfiguration
#' 
#' For more information about permissions, see [Managing Access Permissions
#' to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' The following are related to
#' [`put_bucket_lifecycle_configuration`][s3_put_bucket_lifecycle_configuration]:
#' 
#' -   [Examples of Lifecycle
#'     Configuration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html)
#' 
#' -   [`get_bucket_lifecycle_configuration`][s3_get_bucket_lifecycle_configuration]
#' 
#' -   [`delete_bucket_lifecycle`][s3_delete_bucket_lifecycle]
#'
#' @usage
#' s3_put_bucket_lifecycle_configuration(Bucket, LifecycleConfiguration,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to set the configuration.
#' @param LifecycleConfiguration Container for lifecycle rules. You can add as many as 1,000 rules.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_lifecycle_configuration(
#'   Bucket = "string",
#'   LifecycleConfiguration = list(
#'     Rules = list(
#'       list(
#'         Expiration = list(
#'           Date = as.POSIXct(
#'             "2015-01-01"
#'           ),
#'           Days = 123,
#'           ExpiredObjectDeleteMarker = TRUE|FALSE
#'         ),
#'         ID = "string",
#'         Prefix = "string",
#'         Filter = list(
#'           Prefix = "string",
#'           Tag = list(
#'             Key = "string",
#'             Value = "string"
#'           ),
#'           And = list(
#'             Prefix = "string",
#'             Tags = list(
#'               list(
#'                 Key = "string",
#'                 Value = "string"
#'               )
#'             )
#'           )
#'         ),
#'         Status = "Enabled"|"Disabled",
#'         Transitions = list(
#'           list(
#'             Date = as.POSIXct(
#'               "2015-01-01"
#'             ),
#'             Days = 123,
#'             StorageClass = "GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"
#'           )
#'         ),
#'         NoncurrentVersionTransitions = list(
#'           list(
#'             NoncurrentDays = 123,
#'             StorageClass = "GLACIER"|"STANDARD_IA"|"ONEZONE_IA"|"INTELLIGENT_TIERING"|"DEEP_ARCHIVE"
#'           )
#'         ),
#'         NoncurrentVersionExpiration = list(
#'           NoncurrentDays = 123
#'         ),
#'         AbortIncompleteMultipartUpload = list(
#'           DaysAfterInitiation = 123
#'         )
#'       )
#'     )
#'   ),
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example replaces existing lifecycle configuration, if any,
#' # on the specified bucket.
#' svc$put_bucket_lifecycle_configuration(
#'   Bucket = "examplebucket",
#'   LifecycleConfiguration = list(
#'     Rules = list(
#'       list(
#'         Expiration = list(
#'           Days = 3650L
#'         ),
#'         Filter = list(
#'           Prefix = "documents/"
#'         ),
#'         ID = "TestOnly",
#'         Status = "Enabled",
#'         Transitions = list(
#'           list(
#'             Days = 365L,
#'             StorageClass = "GLACIER"
#'           )
#'         )
#'       )
#'     )
#'   )
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_lifecycle_configuration
s3_put_bucket_lifecycle_configuration <- function(Bucket, LifecycleConfiguration = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketLifecycleConfiguration",
    http_method = "PUT",
    http_path = "/{Bucket}?lifecycle",
    paginator = list()
  )
  input <- .s3$put_bucket_lifecycle_configuration_input(Bucket = Bucket, LifecycleConfiguration = LifecycleConfiguration, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_lifecycle_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_lifecycle_configuration <- s3_put_bucket_lifecycle_configuration

#' Set the logging parameters for a bucket and to specify permissions for
#' who can view and modify the logging parameters
#'
#' @description
#' Set the logging parameters for a bucket and to specify permissions for
#' who can view and modify the logging parameters. All logs are saved to
#' buckets in the same AWS Region as the source bucket. To set the logging
#' status of a bucket, you must be the bucket owner.
#' 
#' The bucket owner is automatically granted FULL_CONTROL to all logs. You
#' use the `Grantee` request element to grant access to other people. The
#' `Permissions` request element specifies the kind of access the grantee
#' has to the logs.
#' 
#' **Grantee Values**
#' 
#' You can specify the person (grantee) to whom you're assigning access
#' rights (using request elements) in the following ways:
#' 
#' -   By the person's ID:
#' 
#'     `<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID><>ID<></ID><DisplayName><>GranteesEmail<></DisplayName> </Grantee>`
#' 
#'     DisplayName is optional and ignored in the request.
#' 
#' -   By Email address:
#' 
#'     ` <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AmazonCustomerByEmail"><EmailAddress><>Grantees@@email.com<></EmailAddress></Grantee>`
#' 
#'     The grantee is resolved to the CanonicalUser and, in a response to a
#'     GET Object acl request, appears as the CanonicalUser.
#' 
#' -   By URI:
#' 
#'     `<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"><URI><>http://acs.amazonaws.com/groups/global/AuthenticatedUsers<></URI></Grantee>`
#' 
#' To enable logging, you use LoggingEnabled and its children request
#' elements. To disable logging, you use an empty BucketLoggingStatus
#' request element:
#' 
#' `<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01" />`
#' 
#' For more information about server access logging, see [Server Access
#' Logging](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html).
#' 
#' For more information about creating a bucket, see
#' [`create_bucket`][s3_create_bucket]. For more information about
#' returning the logging status of a bucket, see
#' [`get_bucket_logging`][s3_get_bucket_logging].
#' 
#' The following operations are related to
#' [`put_bucket_logging`][s3_put_bucket_logging]:
#' 
#' -   [`put_object`][s3_put_object]
#' 
#' -   [`delete_bucket`][s3_delete_bucket]
#' 
#' -   [`create_bucket`][s3_create_bucket]
#' 
#' -   [`get_bucket_logging`][s3_get_bucket_logging]
#'
#' @usage
#' s3_put_bucket_logging(Bucket, BucketLoggingStatus, ContentMD5,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which to set the logging parameters.
#' @param BucketLoggingStatus &#91;required&#93; Container for logging status information.
#' @param ContentMD5 The MD5 hash of the [`put_bucket_logging`][s3_put_bucket_logging]
#' request body.
#' 
#' For requests made using the AWS Command Line Interface (CLI) or AWS
#' SDKs, this field is calculated automatically.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_logging(
#'   Bucket = "string",
#'   BucketLoggingStatus = list(
#'     LoggingEnabled = list(
#'       TargetBucket = "string",
#'       TargetGrants = list(
#'         list(
#'           Grantee = list(
#'             DisplayName = "string",
#'             EmailAddress = "string",
#'             ID = "string",
#'             Type = "CanonicalUser"|"AmazonCustomerByEmail"|"Group",
#'             URI = "string"
#'           ),
#'           Permission = "FULL_CONTROL"|"READ"|"WRITE"
#'         )
#'       ),
#'       TargetPrefix = "string"
#'     )
#'   ),
#'   ContentMD5 = "string",
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example sets logging policy on a bucket. For the Log
#' # Delivery group to deliver logs to the destination bucket, it needs
#' # permission for the READ_ACP action which the policy grants.
#' svc$put_bucket_logging(
#'   Bucket = "sourcebucket",
#'   BucketLoggingStatus = list(
#'     LoggingEnabled = list(
#'       TargetBucket = "targetbucket",
#'       TargetGrants = list(
#'         list(
#'           Grantee = list(
#'             Type = "Group",
#'             URI = "http://acs.amazonaws.com/groups/global/AllUsers"
#'           ),
#'           Permission = "READ"
#'         )
#'       ),
#'       TargetPrefix = "MyBucketLogs/"
#'     )
#'   )
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_logging
s3_put_bucket_logging <- function(Bucket, BucketLoggingStatus, ContentMD5 = NULL, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketLogging",
    http_method = "PUT",
    http_path = "/{Bucket}?logging",
    paginator = list()
  )
  input <- .s3$put_bucket_logging_input(Bucket = Bucket, BucketLoggingStatus = BucketLoggingStatus, ContentMD5 = ContentMD5, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_logging_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_logging <- s3_put_bucket_logging

#' Sets a metrics configuration (specified by the metrics configuration ID)
#' for the bucket
#'
#' @description
#' Sets a metrics configuration (specified by the metrics configuration ID)
#' for the bucket. You can have up to 1,000 metrics configurations per
#' 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.
#' 
#' To use this operation, you must have permissions to perform the
#' `s3:PutMetricsConfiguration` action. The bucket owner has this
#' permission by default. The bucket owner can grant this permission to
#' others. For more information about permissions, see [Permissions Related
#' to Bucket Subresource
#' Operations](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources)
#' and [Managing Access Permissions to Your Amazon S3
#' Resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html).
#' 
#' For information about CloudWatch request metrics for Amazon S3, see
#' [Monitoring Metrics with Amazon
#' CloudWatch](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cloudwatch-monitoring.html).
#' 
#' The following operations are related to
#' [`put_bucket_metrics_configuration`][s3_put_bucket_metrics_configuration]:
#' 
#' -   [`delete_bucket_metrics_configuration`][s3_delete_bucket_metrics_configuration]
#' 
#' -   [`put_bucket_metrics_configuration`][s3_put_bucket_metrics_configuration]
#' 
#' -   [`list_bucket_metrics_configurations`][s3_list_bucket_metrics_configurations]
#' 
#' [`get_bucket_lifecycle`][s3_get_bucket_lifecycle] has the following
#' special error:
#' 
#' -   Error code: `TooManyConfigurations`
#' 
#'     -   Description: You are attempting to create a new configuration
#'         but have already reached the 1,000-configuration limit.
#' 
#'     -   HTTP Status Code: HTTP 400 Bad Request
#'
#' @usage
#' s3_put_bucket_metrics_configuration(Bucket, Id, MetricsConfiguration,
#'   ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket for which the metrics configuration is set.
#' @param Id &#91;required&#93; The ID used to identify the metrics configuration.
#' @param MetricsConfiguration &#91;required&#93; Specifies the metrics configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_metrics_configuration(
#'   Bucket = "string",
#'   Id = "string",
#'   MetricsConfiguration = list(
#'     Id = "string",
#'     Filter = list(
#'       Prefix = "string",
#'       Tag = list(
#'         Key = "string",
#'         Value = "string"
#'       ),
#'       And = list(
#'         Prefix = "string",
#'         Tags = list(
#'           list(
#'             Key = "string",
#'             Value = "string"
#'           )
#'         )
#'       )
#'     )
#'   ),
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_metrics_configuration
s3_put_bucket_metrics_configuration <- function(Bucket, Id, MetricsConfiguration, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketMetricsConfiguration",
    http_method = "PUT",
    http_path = "/{Bucket}?metrics",
    paginator = list()
  )
  input <- .s3$put_bucket_metrics_configuration_input(Bucket = Bucket, Id = Id, MetricsConfiguration = MetricsConfiguration, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_metrics_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_metrics_configuration <- s3_put_bucket_metrics_configuration

#' No longer used, see the PutBucketNotificationConfiguration operation
#'
#' @description
#' No longer used, see the
#' [`put_bucket_notification_configuration`][s3_put_bucket_notification_configuration]
#' operation.
#'
#' @usage
#' s3_put_bucket_notification(Bucket, ContentMD5,
#'   NotificationConfiguration, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket.
#' @param ContentMD5 The MD5 hash of the
#' [`put_public_access_block`][s3_put_public_access_block] request body.
#' 
#' For requests made using the AWS Command Line Interface (CLI) or AWS
#' SDKs, this field is calculated automatically.
#' @param NotificationConfiguration &#91;required&#93; The container for the configuration.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_notification(
#'   Bucket = "string",
#'   ContentMD5 = "string",
#'   NotificationConfiguration = list(
#'     TopicConfiguration = list(
#'       Id = "string",
#'       Events = list(
#'         "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'       ),
#'       Event = "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold",
#'       Topic = "string"
#'     ),
#'     QueueConfiguration = list(
#'       Id = "string",
#'       Event = "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold",
#'       Events = list(
#'         "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'       ),
#'       Queue = "string"
#'     ),
#'     CloudFunctionConfiguration = list(
#'       Id = "string",
#'       Event = "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold",
#'       Events = list(
#'         "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'       ),
#'       CloudFunction = "string",
#'       InvocationRole = "string"
#'     )
#'   ),
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_notification
s3_put_bucket_notification <- function(Bucket, ContentMD5 = NULL, NotificationConfiguration, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketNotification",
    http_method = "PUT",
    http_path = "/{Bucket}?notification",
    paginator = list()
  )
  input <- .s3$put_bucket_notification_input(Bucket = Bucket, ContentMD5 = ContentMD5, NotificationConfiguration = NotificationConfiguration, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_notification_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_notification <- s3_put_bucket_notification

#' Enables notifications of specified events for a bucket
#'
#' @description
#' Enables notifications of specified events for a bucket. For more
#' information about event notifications, see [Configuring Event
#' Notifications](https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html).
#' 
#' Using this API, you can replace an existing notification configuration.
#' The configuration is an XML file that defines the event types that you
#' want Amazon S3 to publish and the destination where you want Amazon S3
#' to publish an event notification when it detects an event of the
#' specified type.
#' 
#' By default, your bucket has no event notifications configured. That is,
#' the notification configuration will be an empty
#' `NotificationConfiguration`.
#' 
#' `<NotificationConfiguration>`
#' 
#' `</NotificationConfiguration>`
#' 
#' This operation replaces the existing notification configuration with the
#' configuration you include in the request body.
#' 
#' After Amazon S3 receives this request, it first verifies that any Amazon
#' Simple Notification Service (Amazon SNS) or Amazon Simple Queue Service
#' (Amazon SQS) destination exists, and that the bucket owner has
#' permission to publish to it by sending a test notification. In the case
#' of AWS Lambda destinations, Amazon S3 verifies that the Lambda function
#' permissions grant Amazon S3 permission to invoke the function from the
#' Amazon S3 bucket. For more information, see [Configuring Notifications
#' for Amazon S3
#' Events](https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html).
#' 
#' You can disable notifications by adding the empty
#' NotificationConfiguration element.
#' 
#' By default, only the bucket owner can configure notifications on a
#' bucket. However, bucket owners can use a bucket policy to grant
#' permission to other users to set this configuration with
#' `s3:PutBucketNotification` permission.
#' 
#' The PUT notification is an atomic operation. For example, suppose your
#' notification configuration includes SNS topic, SQS queue, and Lambda
#' function configurations. When you send a PUT request with this
#' configuration, Amazon S3 sends test messages to your SNS topic. If the
#' message fails, the entire PUT operation will fail, and Amazon S3 will
#' not add the configuration to your bucket.
#' 
#' **Responses**
#' 
#' If the configuration in the request body includes only one
#' `TopicConfiguration` specifying only the
#' `s3:ReducedRedundancyLostObject` event type, the response will also
#' include the `x-amz-sns-test-message-id` header containing the message ID
#' of the test notification sent to the topic.
#' 
#' The following operation is related to
#' [`put_bucket_notification_configuration`][s3_put_bucket_notification_configuration]:
#' 
#' -   [`get_bucket_notification_configuration`][s3_get_bucket_notification_configuration]
#'
#' @usage
#' s3_put_bucket_notification_configuration(Bucket,
#'   NotificationConfiguration, ExpectedBucketOwner)
#'
#' @param Bucket &#91;required&#93; The name of the bucket.
#' @param NotificationConfiguration &#91;required&#93; 
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#'
#' @return
#' An empty list.
#'
#' @section Request syntax:
#' ```
#' svc$put_bucket_notification_configuration(
#'   Bucket = "string",
#'   NotificationConfiguration = list(
#'     TopicConfigurations = list(
#'       list(
#'         Id = "string",
#'         TopicArn = "string",
#'         Events = list(
#'           "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'         ),
#'         Filter = list(
#'           Key = list(
#'             FilterRules = list(
#'               list(
#'                 Name = "prefix"|"suffix",
#'                 Value = "string"
#'               )
#'             )
#'           )
#'         )
#'       )
#'     ),
#'     QueueConfigurations = list(
#'       list(
#'         Id = "string",
#'         QueueArn = "string",
#'         Events = list(
#'           "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'         ),
#'         Filter = list(
#'           Key = list(
#'             FilterRules = list(
#'               list(
#'                 Name = "prefix"|"suffix",
#'                 Value = "string"
#'               )
#'             )
#'           )
#'         )
#'       )
#'     ),
#'     LambdaFunctionConfigurations = list(
#'       list(
#'         Id = "string",
#'         LambdaFunctionArn = "string",
#'         Events = list(
#'           "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:*"|"s3:ObjectRestore:Post"|"s3:ObjectRestore:Completed"|"s3:Replication:*"|"s3:Replication:OperationFailedReplication"|"s3:Replication:OperationNotTracked"|"s3:Replication:OperationMissedThreshold"|"s3:Replication:OperationReplicatedAfterThreshold"
#'         ),
#'         Filter = list(
#'           Key = list(
#'             FilterRules = list(
#'               list(
#'                 Name = "prefix"|"suffix",
#'                 Value = "string"
#'               )
#'             )
#'           )
#'         )
#'       )
#'     )
#'   ),
#'   ExpectedBucketOwner = "string"
#' )
#' ```
#'
#' @examples
#' \dontrun{
#' # The following example sets notification configuration on a bucket to
#' # publish the object created events to an SNS topic.
#' svc$put_bucket_notification_configuration(
#'   Bucket = "examplebucket",
#'   NotificationConfiguration = list(
#'     TopicConfigurations = list(
#'       list(
#'         Events = list(
#'           "s3:ObjectCreated:*"
#'         ),
#'         TopicArn = "arn:aws:sns:us-west-2:123456789012:s3-notification-topic"
#'       )
#'     )
#'   )
#' )
#' }
#'
#' @keywords internal
#'
#' @rdname s3_put_bucket_notification_configuration
s3_put_bucket_notification_configuration <- function(Bucket, NotificationConfiguration, ExpectedBucketOwner = NULL) {
  op <- new_operation(
    name = "PutBucketNotificationConfiguration",
    http_method = "PUT",
    http_path = "/{Bucket}?notification",
    paginator = list()
  )
  input <- .s3$put_bucket_notification_configuration_input(Bucket = Bucket, NotificationConfiguration = NotificationConfiguration, ExpectedBucketOwner = ExpectedBucketOwner)
  output <- .s3$put_bucket_notification_configuration_output()
  config <- get_config()
  svc <- .s3$service(config)
  request <- new_request(svc, op, input, output)
  response <- send_request(request)
  return(response)
}
.s3$operations$put_bucket_notification_configuration <- s3_put_bucket_notification_configuration

#' Creates or modifies OwnershipControls for an Amazon S3 bucket
#'
#' @description
#' Creates or modifies `OwnershipControls` for an Amazon S3 bucket. To use
#' this operation, you must have the `s3:PutBucketOwnershipControls`
#' permission. For more information about Amazon S3 permissions, see
#' [Specifying Permissions in a
#' Policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html).
#' 
#' For information about Amazon S3 Object Ownership, see [Using Object
#' Ownership](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html).
#' 
#' The following operations are related to
#' [`put_bucket_ownership_controls`][s3_put_bucket_ownership_controls]:
#' 
#' -   [`get_bucket_ownership_controls`][s3_get_bucket_ownership_controls]
#' 
#' -   [`delete_bucket_ownership_controls`][s3_delete_bucket_ownership_controls]
#'
#' @usage
#' s3_put_bucket_ownership_controls(Bucket, ContentMD5,
#'   ExpectedBucketOwner, OwnershipControls)
#'
#' @param Bucket &#91;required&#93; The name of the Amazon S3 bucket whose `OwnershipControls` you want to
#' set.
#' @param ContentMD5 The MD5 hash of the `OwnershipControls` request body.
#' 
#' For requests made using the AWS Command Line Interface (CLI) or AWS
#' SDKs, this field is calculated automatically.
#' @param ExpectedBucketOwner The account id of the expected bucket owner. If the bucket is owned by a
#' different account, the request will fail with an HTTP
#' `403 (Access Denied)` error.
#' @param OwnershipControls &#91;required&#93; The `OwnershipControls` (BucketOwnerPreferr