aws_sdk_s3/operation/put_object/
_put_object_input.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2#[allow(missing_docs)] // documentation missing in model
3#[non_exhaustive]
4pub struct PutObjectInput {
5    /// <p>The canned ACL to apply to the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned ACL</a> in the <i>Amazon S3 User Guide</i>.</p>
6    /// <p>When adding a new object, you can use headers to grant ACL-based permissions to individual Amazon Web Services accounts or to predefined groups defined by Amazon S3. These permissions are then added to the ACL on the object. By default, all objects are private. Only the owner has full access control. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access Control List (ACL) Overview</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing ACLs Using the REST API</a> in the <i>Amazon S3 User Guide</i>.</p>
7    /// <p>If the bucket that you're uploading objects to uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. Buckets that use this setting only accept PUT requests that don't specify an ACL or PUT requests that specify bucket owner full control ACLs, such as the <code>bucket-owner-full-control</code> canned ACL or an equivalent form of this ACL expressed in the XML format. PUT requests that contain other ACLs (for example, custom grants to certain Amazon Web Services accounts) fail and return a <code>400</code> error with the error code <code>AccessControlListNotSupported</code>. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html"> Controlling ownership of objects and disabling ACLs</a> in the <i>Amazon S3 User Guide</i>.</p><note>
8    /// <ul>
9    /// <li>
10    /// <p>This functionality is not supported for directory buckets.</p></li>
11    /// <li>
12    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
13    /// </ul>
14    /// </note>
15    pub acl: ::std::option::Option<crate::types::ObjectCannedAcl>,
16    /// <p>Object data.</p>
17    pub body: ::aws_smithy_types::byte_stream::ByteStream,
18    /// <p>The bucket name to which the PUT action was initiated.</p>
19    /// <p><b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p>
20    /// <p><b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p><note>
21    /// <p>Access points and Object Lambda access points are not supported by directory buckets.</p>
22    /// </note>
23    /// <p><b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>
24    pub bucket: ::std::option::Option<::std::string::String>,
25    /// <p>Can be used to specify caching behavior along the request/reply chain. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
26    pub cache_control: ::std::option::Option<::std::string::String>,
27    /// <p>Specifies presentational information for the object. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc6266#section-4">https://www.rfc-editor.org/rfc/rfc6266#section-4</a>.</p>
28    pub content_disposition: ::std::option::Option<::std::string::String>,
29    /// <p>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. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding">https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding</a>.</p>
30    pub content_encoding: ::std::option::Option<::std::string::String>,
31    /// <p>The language the content is in.</p>
32    pub content_language: ::std::option::Option<::std::string::String>,
33    /// <p>Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length</a>.</p>
34    pub content_length: ::std::option::Option<i64>,
35    /// <p>The Base64 encoded 128-bit <code>MD5</code> digest of the message (without the headers) according to RFC 1864. This header can be used as a message integrity check to verify that the data is the same data that was originally sent. Although it is optional, we recommend using the Content-MD5 mechanism as an end-to-end integrity check. For more information about REST request authentication, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST Authentication</a>.</p><note>
36    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
37    /// </note> <note>
38    /// <p>This functionality is not supported for directory buckets.</p>
39    /// </note>
40    pub content_md5: ::std::option::Option<::std::string::String>,
41    /// <p>A standard MIME type describing the format of the contents. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type</a>.</p>
42    pub content_type: ::std::option::Option<::std::string::String>,
43    /// <p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p>
44    /// <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list:</p>
45    /// <ul>
46    /// <li>
47    /// <p><code>CRC32</code></p></li>
48    /// <li>
49    /// <p><code>CRC32C</code></p></li>
50    /// <li>
51    /// <p><code>CRC64NVME</code></p></li>
52    /// <li>
53    /// <p><code>SHA1</code></p></li>
54    /// <li>
55    /// <p><code>SHA256</code></p></li>
56    /// </ul>
57    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
58    /// <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p><note>
59    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
60    /// </note>
61    /// <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p>
62    pub checksum_algorithm: ::std::option::Option<crate::types::ChecksumAlgorithm>,
63    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
64    pub checksum_crc32: ::std::option::Option<::std::string::String>,
65    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
66    pub checksum_crc32_c: ::std::option::Option<::std::string::String>,
67    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
68    pub checksum_crc64_nvme: ::std::option::Option<::std::string::String>,
69    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA1</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
70    pub checksum_sha1: ::std::option::Option<::std::string::String>,
71    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA256</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
72    pub checksum_sha256: ::std::option::Option<::std::string::String>,
73    /// <p>The date and time at which the object is no longer cacheable. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc7234#section-5.3">https://www.rfc-editor.org/rfc/rfc7234#section-5.3</a>.</p>
74    pub expires: ::std::option::Option<::aws_smithy_types::DateTime>,
75    /// <p>Uploads the object only if the ETag (entity tag) value provided during the WRITE operation matches the ETag of the object in S3. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error.</p>
76    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
77    /// <p>Expects the ETag value as a string.</p>
78    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
79    pub if_match: ::std::option::Option<::std::string::String>,
80    /// <p>Uploads the object only if the object key name does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error.</p>
81    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
82    /// <p>Expects the '*' (asterisk) character.</p>
83    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
84    pub if_none_match: ::std::option::Option<::std::string::String>,
85    /// <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.</p><note>
86    /// <ul>
87    /// <li>
88    /// <p>This functionality is not supported for directory buckets.</p></li>
89    /// <li>
90    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
91    /// </ul>
92    /// </note>
93    pub grant_full_control: ::std::option::Option<::std::string::String>,
94    /// <p>Allows grantee to read the object data and its metadata.</p><note>
95    /// <ul>
96    /// <li>
97    /// <p>This functionality is not supported for directory buckets.</p></li>
98    /// <li>
99    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
100    /// </ul>
101    /// </note>
102    pub grant_read: ::std::option::Option<::std::string::String>,
103    /// <p>Allows grantee to read the object ACL.</p><note>
104    /// <ul>
105    /// <li>
106    /// <p>This functionality is not supported for directory buckets.</p></li>
107    /// <li>
108    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
109    /// </ul>
110    /// </note>
111    pub grant_read_acp: ::std::option::Option<::std::string::String>,
112    /// <p>Allows grantee to write the ACL for the applicable object.</p><note>
113    /// <ul>
114    /// <li>
115    /// <p>This functionality is not supported for directory buckets.</p></li>
116    /// <li>
117    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
118    /// </ul>
119    /// </note>
120    pub grant_write_acp: ::std::option::Option<::std::string::String>,
121    /// <p>Object key for which the PUT action was initiated.</p>
122    pub key: ::std::option::Option<::std::string::String>,
123    /// <p>Specifies the offset for appending data to existing objects in bytes. The offset must be equal to the size of the existing object being appended to. If no object exists, setting this header to 0 will create a new object.</p><note>
124    /// <p>This functionality is only supported for objects in the Amazon S3 Express One Zone storage class in directory buckets.</p>
125    /// </note>
126    pub write_offset_bytes: ::std::option::Option<i64>,
127    /// <p>A map of metadata to store with the object in S3.</p>
128    pub metadata: ::std::option::Option<::std::collections::HashMap<::std::string::String, ::std::string::String>>,
129    /// <p>The server-side encryption algorithm that was used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>, <code>aws:kms:dsse</code>).</p>
130    /// <ul>
131    /// <li>
132    /// <p><b>General purpose buckets </b> - You have four mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest by using server-side encryption with other key options. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p></li>
133    /// <li>
134    /// <p><b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html">Specifying server-side encryption with KMS for new object uploads</a>.</p>
135    /// <p>In the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket.</p><note>
136    /// <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket.</p>
137    /// </note></li>
138    /// </ul>
139    pub server_side_encryption: ::std::option::Option<crate::types::ServerSideEncryption>,
140    /// <p>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. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p><note>
141    /// <ul>
142    /// <li>
143    /// <p>For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects.</p></li>
144    /// <li>
145    /// <p>Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.</p></li>
146    /// </ul>
147    /// </note>
148    pub storage_class: ::std::option::Option<crate::types::StorageClass>,
149    /// <p>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. For information about object metadata, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object Key and Metadata</a> in the <i>Amazon S3 User Guide</i>.</p>
150    /// <p>In the following example, the request header sets the redirect to an object (anotherPage.html) in the same bucket:</p>
151    /// <p><code>x-amz-website-redirect-location: /anotherPage.html</code></p>
152    /// <p>In the following example, the request header sets the object redirect to another website:</p>
153    /// <p><code>x-amz-website-redirect-location: http://www.example.com/</code></p>
154    /// <p>For more information about website hosting in Amazon S3, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting Websites on Amazon S3</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How to Configure Website Page Redirects</a> in the <i>Amazon S3 User Guide</i>.</p><note>
155    /// <p>This functionality is not supported for directory buckets.</p>
156    /// </note>
157    pub website_redirect_location: ::std::option::Option<::std::string::String>,
158    /// <p>Specifies the algorithm to use when encrypting the object (for example, <code>AES256</code>).</p><note>
159    /// <p>This functionality is not supported for directory buckets.</p>
160    /// </note>
161    pub sse_customer_algorithm: ::std::option::Option<::std::string::String>,
162    /// <p>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 <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p><note>
163    /// <p>This functionality is not supported for directory buckets.</p>
164    /// </note>
165    pub sse_customer_key: ::std::option::Option<::std::string::String>,
166    /// <p>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.</p><note>
167    /// <p>This functionality is not supported for directory buckets.</p>
168    /// </note>
169    pub sse_customer_key_md5: ::std::option::Option<::std::string::String>,
170    /// <p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID.</p>
171    /// <p><b>General purpose buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code> or <code>aws:kms:dsse</code>, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify <code>x-amz-server-side-encryption:aws:kms</code> or <code>x-amz-server-side-encryption:aws:kms:dsse</code>, but do not provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code>) to protect the data.</p>
172    /// <p><b>Directory buckets</b> - To encrypt data using SSE-KMS, it's recommended to specify the <code>x-amz-server-side-encryption</code> header to <code>aws:kms</code>. Then, the <code>x-amz-server-side-encryption-aws-kms-key-id</code> header implicitly uses the bucket's default KMS customer managed key ID. If you want to explicitly set the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header, it must match the bucket's default customer managed key (using key ID or ARN, not alias). Your SSE-KMS configuration can only support 1 <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk">customer managed key</a> per directory bucket's lifetime. The <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Incorrect key specification results in an HTTP <code>400 Bad Request</code> error.</p>
173    pub ssekms_key_id: ::std::option::Option<::std::string::String>,
174    /// <p>Specifies the Amazon Web Services KMS Encryption Context as an additional encryption context to use for object encryption. The value of this header is a Base64 encoded string of a UTF-8 encoded JSON, which contains the encryption context as key-value pairs. This value is stored as object metadata and automatically gets passed on to Amazon Web Services KMS for future <code>GetObject</code> operations on this object.</p>
175    /// <p><b>General purpose buckets</b> - This value must be explicitly added during <code>CopyObject</code> operations if you want an additional encryption context for your object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context">Encryption context</a> in the <i>Amazon S3 User Guide</i>.</p>
176    /// <p><b>Directory buckets</b> - You can optionally provide an explicit encryption context value. The value must match the default encryption context - the bucket Amazon Resource Name (ARN). An additional encryption context value is not supported.</p>
177    pub ssekms_encryption_context: ::std::option::Option<::std::string::String>,
178    /// <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Key Management Service (KMS) keys (SSE-KMS).</p>
179    /// <p><b>General purpose buckets</b> - Setting this header to <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS. Also, specifying this header with a PUT action doesn't affect bucket-level settings for S3 Bucket Key.</p>
180    /// <p><b>Directory buckets</b> - S3 Bucket Keys are always enabled for <code>GET</code> and <code>PUT</code> operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops">the Copy operation in Batch Operations</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job">the import jobs</a>. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.</p>
181    pub bucket_key_enabled: ::std::option::Option<bool>,
182    /// <p>Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html">Downloading Objects in Requester Pays Buckets</a> in the <i>Amazon S3 User Guide</i>.</p><note>
183    /// <p>This functionality is not supported for directory buckets.</p>
184    /// </note>
185    pub request_payer: ::std::option::Option<crate::types::RequestPayer>,
186    /// <p>The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, "Key1=Value1")</p><note>
187    /// <p>This functionality is not supported for directory buckets.</p>
188    /// </note>
189    pub tagging: ::std::option::Option<::std::string::String>,
190    /// <p>The Object Lock mode that you want to apply to this object.</p><note>
191    /// <p>This functionality is not supported for directory buckets.</p>
192    /// </note>
193    pub object_lock_mode: ::std::option::Option<crate::types::ObjectLockMode>,
194    /// <p>The date and time when you want this object's Object Lock to expire. Must be formatted as a timestamp parameter.</p><note>
195    /// <p>This functionality is not supported for directory buckets.</p>
196    /// </note>
197    pub object_lock_retain_until_date: ::std::option::Option<::aws_smithy_types::DateTime>,
198    /// <p>Specifies whether a legal hold will be applied to this object. For more information about S3 Object Lock, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object Lock</a> in the <i>Amazon S3 User Guide</i>.</p><note>
199    /// <p>This functionality is not supported for directory buckets.</p>
200    /// </note>
201    pub object_lock_legal_hold_status: ::std::option::Option<crate::types::ObjectLockLegalHoldStatus>,
202    /// <p>The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code <code>403 Forbidden</code> (access denied).</p>
203    pub expected_bucket_owner: ::std::option::Option<::std::string::String>,
204}
205impl PutObjectInput {
206    /// <p>The canned ACL to apply to the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned ACL</a> in the <i>Amazon S3 User Guide</i>.</p>
207    /// <p>When adding a new object, you can use headers to grant ACL-based permissions to individual Amazon Web Services accounts or to predefined groups defined by Amazon S3. These permissions are then added to the ACL on the object. By default, all objects are private. Only the owner has full access control. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access Control List (ACL) Overview</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing ACLs Using the REST API</a> in the <i>Amazon S3 User Guide</i>.</p>
208    /// <p>If the bucket that you're uploading objects to uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. Buckets that use this setting only accept PUT requests that don't specify an ACL or PUT requests that specify bucket owner full control ACLs, such as the <code>bucket-owner-full-control</code> canned ACL or an equivalent form of this ACL expressed in the XML format. PUT requests that contain other ACLs (for example, custom grants to certain Amazon Web Services accounts) fail and return a <code>400</code> error with the error code <code>AccessControlListNotSupported</code>. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html"> Controlling ownership of objects and disabling ACLs</a> in the <i>Amazon S3 User Guide</i>.</p><note>
209    /// <ul>
210    /// <li>
211    /// <p>This functionality is not supported for directory buckets.</p></li>
212    /// <li>
213    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
214    /// </ul>
215    /// </note>
216    pub fn acl(&self) -> ::std::option::Option<&crate::types::ObjectCannedAcl> {
217        self.acl.as_ref()
218    }
219    /// <p>Object data.</p>
220    pub fn body(&self) -> &::aws_smithy_types::byte_stream::ByteStream {
221        &self.body
222    }
223    /// <p>The bucket name to which the PUT action was initiated.</p>
224    /// <p><b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p>
225    /// <p><b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p><note>
226    /// <p>Access points and Object Lambda access points are not supported by directory buckets.</p>
227    /// </note>
228    /// <p><b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>
229    pub fn bucket(&self) -> ::std::option::Option<&str> {
230        self.bucket.as_deref()
231    }
232    /// <p>Can be used to specify caching behavior along the request/reply chain. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
233    pub fn cache_control(&self) -> ::std::option::Option<&str> {
234        self.cache_control.as_deref()
235    }
236    /// <p>Specifies presentational information for the object. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc6266#section-4">https://www.rfc-editor.org/rfc/rfc6266#section-4</a>.</p>
237    pub fn content_disposition(&self) -> ::std::option::Option<&str> {
238        self.content_disposition.as_deref()
239    }
240    /// <p>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. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding">https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding</a>.</p>
241    pub fn content_encoding(&self) -> ::std::option::Option<&str> {
242        self.content_encoding.as_deref()
243    }
244    /// <p>The language the content is in.</p>
245    pub fn content_language(&self) -> ::std::option::Option<&str> {
246        self.content_language.as_deref()
247    }
248    /// <p>Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length</a>.</p>
249    pub fn content_length(&self) -> ::std::option::Option<i64> {
250        self.content_length
251    }
252    /// <p>The Base64 encoded 128-bit <code>MD5</code> digest of the message (without the headers) according to RFC 1864. This header can be used as a message integrity check to verify that the data is the same data that was originally sent. Although it is optional, we recommend using the Content-MD5 mechanism as an end-to-end integrity check. For more information about REST request authentication, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST Authentication</a>.</p><note>
253    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
254    /// </note> <note>
255    /// <p>This functionality is not supported for directory buckets.</p>
256    /// </note>
257    pub fn content_md5(&self) -> ::std::option::Option<&str> {
258        self.content_md5.as_deref()
259    }
260    /// <p>A standard MIME type describing the format of the contents. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type</a>.</p>
261    pub fn content_type(&self) -> ::std::option::Option<&str> {
262        self.content_type.as_deref()
263    }
264    /// <p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p>
265    /// <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list:</p>
266    /// <ul>
267    /// <li>
268    /// <p><code>CRC32</code></p></li>
269    /// <li>
270    /// <p><code>CRC32C</code></p></li>
271    /// <li>
272    /// <p><code>CRC64NVME</code></p></li>
273    /// <li>
274    /// <p><code>SHA1</code></p></li>
275    /// <li>
276    /// <p><code>SHA256</code></p></li>
277    /// </ul>
278    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
279    /// <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p><note>
280    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
281    /// </note>
282    /// <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p>
283    pub fn checksum_algorithm(&self) -> ::std::option::Option<&crate::types::ChecksumAlgorithm> {
284        self.checksum_algorithm.as_ref()
285    }
286    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
287    pub fn checksum_crc32(&self) -> ::std::option::Option<&str> {
288        self.checksum_crc32.as_deref()
289    }
290    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
291    pub fn checksum_crc32_c(&self) -> ::std::option::Option<&str> {
292        self.checksum_crc32_c.as_deref()
293    }
294    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
295    pub fn checksum_crc64_nvme(&self) -> ::std::option::Option<&str> {
296        self.checksum_crc64_nvme.as_deref()
297    }
298    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA1</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
299    pub fn checksum_sha1(&self) -> ::std::option::Option<&str> {
300        self.checksum_sha1.as_deref()
301    }
302    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA256</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
303    pub fn checksum_sha256(&self) -> ::std::option::Option<&str> {
304        self.checksum_sha256.as_deref()
305    }
306    /// <p>The date and time at which the object is no longer cacheable. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc7234#section-5.3">https://www.rfc-editor.org/rfc/rfc7234#section-5.3</a>.</p>
307    pub fn expires(&self) -> ::std::option::Option<&::aws_smithy_types::DateTime> {
308        self.expires.as_ref()
309    }
310    /// <p>Uploads the object only if the ETag (entity tag) value provided during the WRITE operation matches the ETag of the object in S3. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error.</p>
311    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
312    /// <p>Expects the ETag value as a string.</p>
313    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
314    pub fn if_match(&self) -> ::std::option::Option<&str> {
315        self.if_match.as_deref()
316    }
317    /// <p>Uploads the object only if the object key name does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error.</p>
318    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
319    /// <p>Expects the '*' (asterisk) character.</p>
320    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
321    pub fn if_none_match(&self) -> ::std::option::Option<&str> {
322        self.if_none_match.as_deref()
323    }
324    /// <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.</p><note>
325    /// <ul>
326    /// <li>
327    /// <p>This functionality is not supported for directory buckets.</p></li>
328    /// <li>
329    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
330    /// </ul>
331    /// </note>
332    pub fn grant_full_control(&self) -> ::std::option::Option<&str> {
333        self.grant_full_control.as_deref()
334    }
335    /// <p>Allows grantee to read the object data and its metadata.</p><note>
336    /// <ul>
337    /// <li>
338    /// <p>This functionality is not supported for directory buckets.</p></li>
339    /// <li>
340    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
341    /// </ul>
342    /// </note>
343    pub fn grant_read(&self) -> ::std::option::Option<&str> {
344        self.grant_read.as_deref()
345    }
346    /// <p>Allows grantee to read the object ACL.</p><note>
347    /// <ul>
348    /// <li>
349    /// <p>This functionality is not supported for directory buckets.</p></li>
350    /// <li>
351    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
352    /// </ul>
353    /// </note>
354    pub fn grant_read_acp(&self) -> ::std::option::Option<&str> {
355        self.grant_read_acp.as_deref()
356    }
357    /// <p>Allows grantee to write the ACL for the applicable object.</p><note>
358    /// <ul>
359    /// <li>
360    /// <p>This functionality is not supported for directory buckets.</p></li>
361    /// <li>
362    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
363    /// </ul>
364    /// </note>
365    pub fn grant_write_acp(&self) -> ::std::option::Option<&str> {
366        self.grant_write_acp.as_deref()
367    }
368    /// <p>Object key for which the PUT action was initiated.</p>
369    pub fn key(&self) -> ::std::option::Option<&str> {
370        self.key.as_deref()
371    }
372    /// <p>Specifies the offset for appending data to existing objects in bytes. The offset must be equal to the size of the existing object being appended to. If no object exists, setting this header to 0 will create a new object.</p><note>
373    /// <p>This functionality is only supported for objects in the Amazon S3 Express One Zone storage class in directory buckets.</p>
374    /// </note>
375    pub fn write_offset_bytes(&self) -> ::std::option::Option<i64> {
376        self.write_offset_bytes
377    }
378    /// <p>A map of metadata to store with the object in S3.</p>
379    pub fn metadata(&self) -> ::std::option::Option<&::std::collections::HashMap<::std::string::String, ::std::string::String>> {
380        self.metadata.as_ref()
381    }
382    /// <p>The server-side encryption algorithm that was used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>, <code>aws:kms:dsse</code>).</p>
383    /// <ul>
384    /// <li>
385    /// <p><b>General purpose buckets </b> - You have four mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest by using server-side encryption with other key options. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p></li>
386    /// <li>
387    /// <p><b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html">Specifying server-side encryption with KMS for new object uploads</a>.</p>
388    /// <p>In the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket.</p><note>
389    /// <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket.</p>
390    /// </note></li>
391    /// </ul>
392    pub fn server_side_encryption(&self) -> ::std::option::Option<&crate::types::ServerSideEncryption> {
393        self.server_side_encryption.as_ref()
394    }
395    /// <p>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. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p><note>
396    /// <ul>
397    /// <li>
398    /// <p>For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects.</p></li>
399    /// <li>
400    /// <p>Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.</p></li>
401    /// </ul>
402    /// </note>
403    pub fn storage_class(&self) -> ::std::option::Option<&crate::types::StorageClass> {
404        self.storage_class.as_ref()
405    }
406    /// <p>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. For information about object metadata, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object Key and Metadata</a> in the <i>Amazon S3 User Guide</i>.</p>
407    /// <p>In the following example, the request header sets the redirect to an object (anotherPage.html) in the same bucket:</p>
408    /// <p><code>x-amz-website-redirect-location: /anotherPage.html</code></p>
409    /// <p>In the following example, the request header sets the object redirect to another website:</p>
410    /// <p><code>x-amz-website-redirect-location: http://www.example.com/</code></p>
411    /// <p>For more information about website hosting in Amazon S3, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting Websites on Amazon S3</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How to Configure Website Page Redirects</a> in the <i>Amazon S3 User Guide</i>.</p><note>
412    /// <p>This functionality is not supported for directory buckets.</p>
413    /// </note>
414    pub fn website_redirect_location(&self) -> ::std::option::Option<&str> {
415        self.website_redirect_location.as_deref()
416    }
417    /// <p>Specifies the algorithm to use when encrypting the object (for example, <code>AES256</code>).</p><note>
418    /// <p>This functionality is not supported for directory buckets.</p>
419    /// </note>
420    pub fn sse_customer_algorithm(&self) -> ::std::option::Option<&str> {
421        self.sse_customer_algorithm.as_deref()
422    }
423    /// <p>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 <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p><note>
424    /// <p>This functionality is not supported for directory buckets.</p>
425    /// </note>
426    pub fn sse_customer_key(&self) -> ::std::option::Option<&str> {
427        self.sse_customer_key.as_deref()
428    }
429    /// <p>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.</p><note>
430    /// <p>This functionality is not supported for directory buckets.</p>
431    /// </note>
432    pub fn sse_customer_key_md5(&self) -> ::std::option::Option<&str> {
433        self.sse_customer_key_md5.as_deref()
434    }
435    /// <p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID.</p>
436    /// <p><b>General purpose buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code> or <code>aws:kms:dsse</code>, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify <code>x-amz-server-side-encryption:aws:kms</code> or <code>x-amz-server-side-encryption:aws:kms:dsse</code>, but do not provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code>) to protect the data.</p>
437    /// <p><b>Directory buckets</b> - To encrypt data using SSE-KMS, it's recommended to specify the <code>x-amz-server-side-encryption</code> header to <code>aws:kms</code>. Then, the <code>x-amz-server-side-encryption-aws-kms-key-id</code> header implicitly uses the bucket's default KMS customer managed key ID. If you want to explicitly set the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header, it must match the bucket's default customer managed key (using key ID or ARN, not alias). Your SSE-KMS configuration can only support 1 <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk">customer managed key</a> per directory bucket's lifetime. The <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Incorrect key specification results in an HTTP <code>400 Bad Request</code> error.</p>
438    pub fn ssekms_key_id(&self) -> ::std::option::Option<&str> {
439        self.ssekms_key_id.as_deref()
440    }
441    /// <p>Specifies the Amazon Web Services KMS Encryption Context as an additional encryption context to use for object encryption. The value of this header is a Base64 encoded string of a UTF-8 encoded JSON, which contains the encryption context as key-value pairs. This value is stored as object metadata and automatically gets passed on to Amazon Web Services KMS for future <code>GetObject</code> operations on this object.</p>
442    /// <p><b>General purpose buckets</b> - This value must be explicitly added during <code>CopyObject</code> operations if you want an additional encryption context for your object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context">Encryption context</a> in the <i>Amazon S3 User Guide</i>.</p>
443    /// <p><b>Directory buckets</b> - You can optionally provide an explicit encryption context value. The value must match the default encryption context - the bucket Amazon Resource Name (ARN). An additional encryption context value is not supported.</p>
444    pub fn ssekms_encryption_context(&self) -> ::std::option::Option<&str> {
445        self.ssekms_encryption_context.as_deref()
446    }
447    /// <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Key Management Service (KMS) keys (SSE-KMS).</p>
448    /// <p><b>General purpose buckets</b> - Setting this header to <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS. Also, specifying this header with a PUT action doesn't affect bucket-level settings for S3 Bucket Key.</p>
449    /// <p><b>Directory buckets</b> - S3 Bucket Keys are always enabled for <code>GET</code> and <code>PUT</code> operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops">the Copy operation in Batch Operations</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job">the import jobs</a>. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.</p>
450    pub fn bucket_key_enabled(&self) -> ::std::option::Option<bool> {
451        self.bucket_key_enabled
452    }
453    /// <p>Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html">Downloading Objects in Requester Pays Buckets</a> in the <i>Amazon S3 User Guide</i>.</p><note>
454    /// <p>This functionality is not supported for directory buckets.</p>
455    /// </note>
456    pub fn request_payer(&self) -> ::std::option::Option<&crate::types::RequestPayer> {
457        self.request_payer.as_ref()
458    }
459    /// <p>The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, "Key1=Value1")</p><note>
460    /// <p>This functionality is not supported for directory buckets.</p>
461    /// </note>
462    pub fn tagging(&self) -> ::std::option::Option<&str> {
463        self.tagging.as_deref()
464    }
465    /// <p>The Object Lock mode that you want to apply to this object.</p><note>
466    /// <p>This functionality is not supported for directory buckets.</p>
467    /// </note>
468    pub fn object_lock_mode(&self) -> ::std::option::Option<&crate::types::ObjectLockMode> {
469        self.object_lock_mode.as_ref()
470    }
471    /// <p>The date and time when you want this object's Object Lock to expire. Must be formatted as a timestamp parameter.</p><note>
472    /// <p>This functionality is not supported for directory buckets.</p>
473    /// </note>
474    pub fn object_lock_retain_until_date(&self) -> ::std::option::Option<&::aws_smithy_types::DateTime> {
475        self.object_lock_retain_until_date.as_ref()
476    }
477    /// <p>Specifies whether a legal hold will be applied to this object. For more information about S3 Object Lock, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object Lock</a> in the <i>Amazon S3 User Guide</i>.</p><note>
478    /// <p>This functionality is not supported for directory buckets.</p>
479    /// </note>
480    pub fn object_lock_legal_hold_status(&self) -> ::std::option::Option<&crate::types::ObjectLockLegalHoldStatus> {
481        self.object_lock_legal_hold_status.as_ref()
482    }
483    /// <p>The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code <code>403 Forbidden</code> (access denied).</p>
484    pub fn expected_bucket_owner(&self) -> ::std::option::Option<&str> {
485        self.expected_bucket_owner.as_deref()
486    }
487}
488impl ::std::fmt::Debug for PutObjectInput {
489    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
490        let mut formatter = f.debug_struct("PutObjectInput");
491        formatter.field("acl", &self.acl);
492        formatter.field("body", &self.body);
493        formatter.field("bucket", &self.bucket);
494        formatter.field("cache_control", &self.cache_control);
495        formatter.field("content_disposition", &self.content_disposition);
496        formatter.field("content_encoding", &self.content_encoding);
497        formatter.field("content_language", &self.content_language);
498        formatter.field("content_length", &self.content_length);
499        formatter.field("content_md5", &self.content_md5);
500        formatter.field("content_type", &self.content_type);
501        formatter.field("checksum_algorithm", &self.checksum_algorithm);
502        formatter.field("checksum_crc32", &self.checksum_crc32);
503        formatter.field("checksum_crc32_c", &self.checksum_crc32_c);
504        formatter.field("checksum_crc64_nvme", &self.checksum_crc64_nvme);
505        formatter.field("checksum_sha1", &self.checksum_sha1);
506        formatter.field("checksum_sha256", &self.checksum_sha256);
507        formatter.field("expires", &self.expires);
508        formatter.field("if_match", &self.if_match);
509        formatter.field("if_none_match", &self.if_none_match);
510        formatter.field("grant_full_control", &self.grant_full_control);
511        formatter.field("grant_read", &self.grant_read);
512        formatter.field("grant_read_acp", &self.grant_read_acp);
513        formatter.field("grant_write_acp", &self.grant_write_acp);
514        formatter.field("key", &self.key);
515        formatter.field("write_offset_bytes", &self.write_offset_bytes);
516        formatter.field("metadata", &self.metadata);
517        formatter.field("server_side_encryption", &self.server_side_encryption);
518        formatter.field("storage_class", &self.storage_class);
519        formatter.field("website_redirect_location", &self.website_redirect_location);
520        formatter.field("sse_customer_algorithm", &self.sse_customer_algorithm);
521        formatter.field("sse_customer_key", &"*** Sensitive Data Redacted ***");
522        formatter.field("sse_customer_key_md5", &self.sse_customer_key_md5);
523        formatter.field("ssekms_key_id", &"*** Sensitive Data Redacted ***");
524        formatter.field("ssekms_encryption_context", &"*** Sensitive Data Redacted ***");
525        formatter.field("bucket_key_enabled", &self.bucket_key_enabled);
526        formatter.field("request_payer", &self.request_payer);
527        formatter.field("tagging", &self.tagging);
528        formatter.field("object_lock_mode", &self.object_lock_mode);
529        formatter.field("object_lock_retain_until_date", &self.object_lock_retain_until_date);
530        formatter.field("object_lock_legal_hold_status", &self.object_lock_legal_hold_status);
531        formatter.field("expected_bucket_owner", &self.expected_bucket_owner);
532        formatter.finish()
533    }
534}
535impl PutObjectInput {
536    /// Creates a new builder-style object to manufacture [`PutObjectInput`](crate::operation::put_object::PutObjectInput).
537    pub fn builder() -> crate::operation::put_object::builders::PutObjectInputBuilder {
538        crate::operation::put_object::builders::PutObjectInputBuilder::default()
539    }
540}
541
542/// A builder for [`PutObjectInput`](crate::operation::put_object::PutObjectInput).
543#[derive(::std::default::Default)]
544#[non_exhaustive]
545pub struct PutObjectInputBuilder {
546    pub(crate) acl: ::std::option::Option<crate::types::ObjectCannedAcl>,
547    pub(crate) body: ::std::option::Option<::aws_smithy_types::byte_stream::ByteStream>,
548    pub(crate) bucket: ::std::option::Option<::std::string::String>,
549    pub(crate) cache_control: ::std::option::Option<::std::string::String>,
550    pub(crate) content_disposition: ::std::option::Option<::std::string::String>,
551    pub(crate) content_encoding: ::std::option::Option<::std::string::String>,
552    pub(crate) content_language: ::std::option::Option<::std::string::String>,
553    pub(crate) content_length: ::std::option::Option<i64>,
554    pub(crate) content_md5: ::std::option::Option<::std::string::String>,
555    pub(crate) content_type: ::std::option::Option<::std::string::String>,
556    pub(crate) checksum_algorithm: ::std::option::Option<crate::types::ChecksumAlgorithm>,
557    pub(crate) checksum_crc32: ::std::option::Option<::std::string::String>,
558    pub(crate) checksum_crc32_c: ::std::option::Option<::std::string::String>,
559    pub(crate) checksum_crc64_nvme: ::std::option::Option<::std::string::String>,
560    pub(crate) checksum_sha1: ::std::option::Option<::std::string::String>,
561    pub(crate) checksum_sha256: ::std::option::Option<::std::string::String>,
562    pub(crate) expires: ::std::option::Option<::aws_smithy_types::DateTime>,
563    pub(crate) if_match: ::std::option::Option<::std::string::String>,
564    pub(crate) if_none_match: ::std::option::Option<::std::string::String>,
565    pub(crate) grant_full_control: ::std::option::Option<::std::string::String>,
566    pub(crate) grant_read: ::std::option::Option<::std::string::String>,
567    pub(crate) grant_read_acp: ::std::option::Option<::std::string::String>,
568    pub(crate) grant_write_acp: ::std::option::Option<::std::string::String>,
569    pub(crate) key: ::std::option::Option<::std::string::String>,
570    pub(crate) write_offset_bytes: ::std::option::Option<i64>,
571    pub(crate) metadata: ::std::option::Option<::std::collections::HashMap<::std::string::String, ::std::string::String>>,
572    pub(crate) server_side_encryption: ::std::option::Option<crate::types::ServerSideEncryption>,
573    pub(crate) storage_class: ::std::option::Option<crate::types::StorageClass>,
574    pub(crate) website_redirect_location: ::std::option::Option<::std::string::String>,
575    pub(crate) sse_customer_algorithm: ::std::option::Option<::std::string::String>,
576    pub(crate) sse_customer_key: ::std::option::Option<::std::string::String>,
577    pub(crate) sse_customer_key_md5: ::std::option::Option<::std::string::String>,
578    pub(crate) ssekms_key_id: ::std::option::Option<::std::string::String>,
579    pub(crate) ssekms_encryption_context: ::std::option::Option<::std::string::String>,
580    pub(crate) bucket_key_enabled: ::std::option::Option<bool>,
581    pub(crate) request_payer: ::std::option::Option<crate::types::RequestPayer>,
582    pub(crate) tagging: ::std::option::Option<::std::string::String>,
583    pub(crate) object_lock_mode: ::std::option::Option<crate::types::ObjectLockMode>,
584    pub(crate) object_lock_retain_until_date: ::std::option::Option<::aws_smithy_types::DateTime>,
585    pub(crate) object_lock_legal_hold_status: ::std::option::Option<crate::types::ObjectLockLegalHoldStatus>,
586    pub(crate) expected_bucket_owner: ::std::option::Option<::std::string::String>,
587}
588impl PutObjectInputBuilder {
589    /// <p>The canned ACL to apply to the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned ACL</a> in the <i>Amazon S3 User Guide</i>.</p>
590    /// <p>When adding a new object, you can use headers to grant ACL-based permissions to individual Amazon Web Services accounts or to predefined groups defined by Amazon S3. These permissions are then added to the ACL on the object. By default, all objects are private. Only the owner has full access control. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access Control List (ACL) Overview</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing ACLs Using the REST API</a> in the <i>Amazon S3 User Guide</i>.</p>
591    /// <p>If the bucket that you're uploading objects to uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. Buckets that use this setting only accept PUT requests that don't specify an ACL or PUT requests that specify bucket owner full control ACLs, such as the <code>bucket-owner-full-control</code> canned ACL or an equivalent form of this ACL expressed in the XML format. PUT requests that contain other ACLs (for example, custom grants to certain Amazon Web Services accounts) fail and return a <code>400</code> error with the error code <code>AccessControlListNotSupported</code>. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html"> Controlling ownership of objects and disabling ACLs</a> in the <i>Amazon S3 User Guide</i>.</p><note>
592    /// <ul>
593    /// <li>
594    /// <p>This functionality is not supported for directory buckets.</p></li>
595    /// <li>
596    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
597    /// </ul>
598    /// </note>
599    pub fn acl(mut self, input: crate::types::ObjectCannedAcl) -> Self {
600        self.acl = ::std::option::Option::Some(input);
601        self
602    }
603    /// <p>The canned ACL to apply to the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned ACL</a> in the <i>Amazon S3 User Guide</i>.</p>
604    /// <p>When adding a new object, you can use headers to grant ACL-based permissions to individual Amazon Web Services accounts or to predefined groups defined by Amazon S3. These permissions are then added to the ACL on the object. By default, all objects are private. Only the owner has full access control. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access Control List (ACL) Overview</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing ACLs Using the REST API</a> in the <i>Amazon S3 User Guide</i>.</p>
605    /// <p>If the bucket that you're uploading objects to uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. Buckets that use this setting only accept PUT requests that don't specify an ACL or PUT requests that specify bucket owner full control ACLs, such as the <code>bucket-owner-full-control</code> canned ACL or an equivalent form of this ACL expressed in the XML format. PUT requests that contain other ACLs (for example, custom grants to certain Amazon Web Services accounts) fail and return a <code>400</code> error with the error code <code>AccessControlListNotSupported</code>. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html"> Controlling ownership of objects and disabling ACLs</a> in the <i>Amazon S3 User Guide</i>.</p><note>
606    /// <ul>
607    /// <li>
608    /// <p>This functionality is not supported for directory buckets.</p></li>
609    /// <li>
610    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
611    /// </ul>
612    /// </note>
613    pub fn set_acl(mut self, input: ::std::option::Option<crate::types::ObjectCannedAcl>) -> Self {
614        self.acl = input;
615        self
616    }
617    /// <p>The canned ACL to apply to the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL">Canned ACL</a> in the <i>Amazon S3 User Guide</i>.</p>
618    /// <p>When adding a new object, you can use headers to grant ACL-based permissions to individual Amazon Web Services accounts or to predefined groups defined by Amazon S3. These permissions are then added to the ACL on the object. By default, all objects are private. Only the owner has full access control. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html">Access Control List (ACL) Overview</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-using-rest-api.html">Managing ACLs Using the REST API</a> in the <i>Amazon S3 User Guide</i>.</p>
619    /// <p>If the bucket that you're uploading objects to uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. Buckets that use this setting only accept PUT requests that don't specify an ACL or PUT requests that specify bucket owner full control ACLs, such as the <code>bucket-owner-full-control</code> canned ACL or an equivalent form of this ACL expressed in the XML format. PUT requests that contain other ACLs (for example, custom grants to certain Amazon Web Services accounts) fail and return a <code>400</code> error with the error code <code>AccessControlListNotSupported</code>. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html"> Controlling ownership of objects and disabling ACLs</a> in the <i>Amazon S3 User Guide</i>.</p><note>
620    /// <ul>
621    /// <li>
622    /// <p>This functionality is not supported for directory buckets.</p></li>
623    /// <li>
624    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
625    /// </ul>
626    /// </note>
627    pub fn get_acl(&self) -> &::std::option::Option<crate::types::ObjectCannedAcl> {
628        &self.acl
629    }
630    /// <p>Object data.</p>
631    pub fn body(mut self, input: ::aws_smithy_types::byte_stream::ByteStream) -> Self {
632        self.body = ::std::option::Option::Some(input);
633        self
634    }
635    /// <p>Object data.</p>
636    pub fn set_body(mut self, input: ::std::option::Option<::aws_smithy_types::byte_stream::ByteStream>) -> Self {
637        self.body = input;
638        self
639    }
640    /// <p>Object data.</p>
641    pub fn get_body(&self) -> &::std::option::Option<::aws_smithy_types::byte_stream::ByteStream> {
642        &self.body
643    }
644    /// <p>The bucket name to which the PUT action was initiated.</p>
645    /// <p><b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p>
646    /// <p><b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p><note>
647    /// <p>Access points and Object Lambda access points are not supported by directory buckets.</p>
648    /// </note>
649    /// <p><b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>
650    /// This field is required.
651    pub fn bucket(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
652        self.bucket = ::std::option::Option::Some(input.into());
653        self
654    }
655    /// <p>The bucket name to which the PUT action was initiated.</p>
656    /// <p><b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p>
657    /// <p><b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p><note>
658    /// <p>Access points and Object Lambda access points are not supported by directory buckets.</p>
659    /// </note>
660    /// <p><b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>
661    pub fn set_bucket(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
662        self.bucket = input;
663        self
664    }
665    /// <p>The bucket name to which the PUT action was initiated.</p>
666    /// <p><b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p>
667    /// <p><b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p><note>
668    /// <p>Access points and Object Lambda access points are not supported by directory buckets.</p>
669    /// </note>
670    /// <p><b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>
671    pub fn get_bucket(&self) -> &::std::option::Option<::std::string::String> {
672        &self.bucket
673    }
674    /// <p>Can be used to specify caching behavior along the request/reply chain. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
675    pub fn cache_control(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
676        self.cache_control = ::std::option::Option::Some(input.into());
677        self
678    }
679    /// <p>Can be used to specify caching behavior along the request/reply chain. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
680    pub fn set_cache_control(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
681        self.cache_control = input;
682        self
683    }
684    /// <p>Can be used to specify caching behavior along the request/reply chain. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9</a>.</p>
685    pub fn get_cache_control(&self) -> &::std::option::Option<::std::string::String> {
686        &self.cache_control
687    }
688    /// <p>Specifies presentational information for the object. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc6266#section-4">https://www.rfc-editor.org/rfc/rfc6266#section-4</a>.</p>
689    pub fn content_disposition(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
690        self.content_disposition = ::std::option::Option::Some(input.into());
691        self
692    }
693    /// <p>Specifies presentational information for the object. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc6266#section-4">https://www.rfc-editor.org/rfc/rfc6266#section-4</a>.</p>
694    pub fn set_content_disposition(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
695        self.content_disposition = input;
696        self
697    }
698    /// <p>Specifies presentational information for the object. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc6266#section-4">https://www.rfc-editor.org/rfc/rfc6266#section-4</a>.</p>
699    pub fn get_content_disposition(&self) -> &::std::option::Option<::std::string::String> {
700        &self.content_disposition
701    }
702    /// <p>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. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding">https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding</a>.</p>
703    pub fn content_encoding(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
704        self.content_encoding = ::std::option::Option::Some(input.into());
705        self
706    }
707    /// <p>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. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding">https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding</a>.</p>
708    pub fn set_content_encoding(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
709        self.content_encoding = input;
710        self
711    }
712    /// <p>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. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding">https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding</a>.</p>
713    pub fn get_content_encoding(&self) -> &::std::option::Option<::std::string::String> {
714        &self.content_encoding
715    }
716    /// <p>The language the content is in.</p>
717    pub fn content_language(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
718        self.content_language = ::std::option::Option::Some(input.into());
719        self
720    }
721    /// <p>The language the content is in.</p>
722    pub fn set_content_language(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
723        self.content_language = input;
724        self
725    }
726    /// <p>The language the content is in.</p>
727    pub fn get_content_language(&self) -> &::std::option::Option<::std::string::String> {
728        &self.content_language
729    }
730    /// <p>Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length</a>.</p>
731    pub fn content_length(mut self, input: i64) -> Self {
732        self.content_length = ::std::option::Option::Some(input);
733        self
734    }
735    /// <p>Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length</a>.</p>
736    pub fn set_content_length(mut self, input: ::std::option::Option<i64>) -> Self {
737        self.content_length = input;
738        self
739    }
740    /// <p>Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length</a>.</p>
741    pub fn get_content_length(&self) -> &::std::option::Option<i64> {
742        &self.content_length
743    }
744    /// <p>The Base64 encoded 128-bit <code>MD5</code> digest of the message (without the headers) according to RFC 1864. This header can be used as a message integrity check to verify that the data is the same data that was originally sent. Although it is optional, we recommend using the Content-MD5 mechanism as an end-to-end integrity check. For more information about REST request authentication, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST Authentication</a>.</p><note>
745    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
746    /// </note> <note>
747    /// <p>This functionality is not supported for directory buckets.</p>
748    /// </note>
749    pub fn content_md5(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
750        self.content_md5 = ::std::option::Option::Some(input.into());
751        self
752    }
753    /// <p>The Base64 encoded 128-bit <code>MD5</code> digest of the message (without the headers) according to RFC 1864. This header can be used as a message integrity check to verify that the data is the same data that was originally sent. Although it is optional, we recommend using the Content-MD5 mechanism as an end-to-end integrity check. For more information about REST request authentication, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST Authentication</a>.</p><note>
754    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
755    /// </note> <note>
756    /// <p>This functionality is not supported for directory buckets.</p>
757    /// </note>
758    pub fn set_content_md5(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
759        self.content_md5 = input;
760        self
761    }
762    /// <p>The Base64 encoded 128-bit <code>MD5</code> digest of the message (without the headers) according to RFC 1864. This header can be used as a message integrity check to verify that the data is the same data that was originally sent. Although it is optional, we recommend using the Content-MD5 mechanism as an end-to-end integrity check. For more information about REST request authentication, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html">REST Authentication</a>.</p><note>
763    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
764    /// </note> <note>
765    /// <p>This functionality is not supported for directory buckets.</p>
766    /// </note>
767    pub fn get_content_md5(&self) -> &::std::option::Option<::std::string::String> {
768        &self.content_md5
769    }
770    /// <p>A standard MIME type describing the format of the contents. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type</a>.</p>
771    pub fn content_type(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
772        self.content_type = ::std::option::Option::Some(input.into());
773        self
774    }
775    /// <p>A standard MIME type describing the format of the contents. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type</a>.</p>
776    pub fn set_content_type(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
777        self.content_type = input;
778        self
779    }
780    /// <p>A standard MIME type describing the format of the contents. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type">https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type</a>.</p>
781    pub fn get_content_type(&self) -> &::std::option::Option<::std::string::String> {
782        &self.content_type
783    }
784    /// <p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p>
785    /// <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list:</p>
786    /// <ul>
787    /// <li>
788    /// <p><code>CRC32</code></p></li>
789    /// <li>
790    /// <p><code>CRC32C</code></p></li>
791    /// <li>
792    /// <p><code>CRC64NVME</code></p></li>
793    /// <li>
794    /// <p><code>SHA1</code></p></li>
795    /// <li>
796    /// <p><code>SHA256</code></p></li>
797    /// </ul>
798    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
799    /// <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p><note>
800    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
801    /// </note>
802    /// <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p>
803    pub fn checksum_algorithm(mut self, input: crate::types::ChecksumAlgorithm) -> Self {
804        self.checksum_algorithm = ::std::option::Option::Some(input);
805        self
806    }
807    /// <p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p>
808    /// <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list:</p>
809    /// <ul>
810    /// <li>
811    /// <p><code>CRC32</code></p></li>
812    /// <li>
813    /// <p><code>CRC32C</code></p></li>
814    /// <li>
815    /// <p><code>CRC64NVME</code></p></li>
816    /// <li>
817    /// <p><code>SHA1</code></p></li>
818    /// <li>
819    /// <p><code>SHA256</code></p></li>
820    /// </ul>
821    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
822    /// <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p><note>
823    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
824    /// </note>
825    /// <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p>
826    pub fn set_checksum_algorithm(mut self, input: ::std::option::Option<crate::types::ChecksumAlgorithm>) -> Self {
827        self.checksum_algorithm = input;
828        self
829    }
830    /// <p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p>
831    /// <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list:</p>
832    /// <ul>
833    /// <li>
834    /// <p><code>CRC32</code></p></li>
835    /// <li>
836    /// <p><code>CRC32C</code></p></li>
837    /// <li>
838    /// <p><code>CRC64NVME</code></p></li>
839    /// <li>
840    /// <p><code>SHA1</code></p></li>
841    /// <li>
842    /// <p><code>SHA256</code></p></li>
843    /// </ul>
844    /// <p>For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
845    /// <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p><note>
846    /// <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p>
847    /// </note>
848    /// <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p>
849    pub fn get_checksum_algorithm(&self) -> &::std::option::Option<crate::types::ChecksumAlgorithm> {
850        &self.checksum_algorithm
851    }
852    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
853    pub fn checksum_crc32(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
854        self.checksum_crc32 = ::std::option::Option::Some(input.into());
855        self
856    }
857    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
858    pub fn set_checksum_crc32(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
859        self.checksum_crc32 = input;
860        self
861    }
862    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
863    pub fn get_checksum_crc32(&self) -> &::std::option::Option<::std::string::String> {
864        &self.checksum_crc32
865    }
866    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
867    pub fn checksum_crc32_c(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
868        self.checksum_crc32_c = ::std::option::Option::Some(input.into());
869        self
870    }
871    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
872    pub fn set_checksum_crc32_c(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
873        self.checksum_crc32_c = input;
874        self
875    }
876    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
877    pub fn get_checksum_crc32_c(&self) -> &::std::option::Option<::std::string::String> {
878        &self.checksum_crc32_c
879    }
880    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
881    pub fn checksum_crc64_nvme(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
882        self.checksum_crc64_nvme = ::std::option::Option::Some(input.into());
883        self
884    }
885    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
886    pub fn set_checksum_crc64_nvme(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
887        self.checksum_crc64_nvme = input;
888        self
889    }
890    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
891    pub fn get_checksum_crc64_nvme(&self) -> &::std::option::Option<::std::string::String> {
892        &self.checksum_crc64_nvme
893    }
894    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA1</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
895    pub fn checksum_sha1(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
896        self.checksum_sha1 = ::std::option::Option::Some(input.into());
897        self
898    }
899    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA1</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
900    pub fn set_checksum_sha1(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
901        self.checksum_sha1 = input;
902        self
903    }
904    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA1</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
905    pub fn get_checksum_sha1(&self) -> &::std::option::Option<::std::string::String> {
906        &self.checksum_sha1
907    }
908    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA256</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
909    pub fn checksum_sha256(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
910        self.checksum_sha256 = ::std::option::Option::Some(input.into());
911        self
912    }
913    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA256</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
914    pub fn set_checksum_sha256(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
915        self.checksum_sha256 = input;
916        self
917    }
918    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA256</code> digest of the object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
919    pub fn get_checksum_sha256(&self) -> &::std::option::Option<::std::string::String> {
920        &self.checksum_sha256
921    }
922    /// <p>The date and time at which the object is no longer cacheable. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc7234#section-5.3">https://www.rfc-editor.org/rfc/rfc7234#section-5.3</a>.</p>
923    pub fn expires(mut self, input: ::aws_smithy_types::DateTime) -> Self {
924        self.expires = ::std::option::Option::Some(input);
925        self
926    }
927    /// <p>The date and time at which the object is no longer cacheable. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc7234#section-5.3">https://www.rfc-editor.org/rfc/rfc7234#section-5.3</a>.</p>
928    pub fn set_expires(mut self, input: ::std::option::Option<::aws_smithy_types::DateTime>) -> Self {
929        self.expires = input;
930        self
931    }
932    /// <p>The date and time at which the object is no longer cacheable. For more information, see <a href="https://www.rfc-editor.org/rfc/rfc7234#section-5.3">https://www.rfc-editor.org/rfc/rfc7234#section-5.3</a>.</p>
933    pub fn get_expires(&self) -> &::std::option::Option<::aws_smithy_types::DateTime> {
934        &self.expires
935    }
936    /// <p>Uploads the object only if the ETag (entity tag) value provided during the WRITE operation matches the ETag of the object in S3. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error.</p>
937    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
938    /// <p>Expects the ETag value as a string.</p>
939    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
940    pub fn if_match(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
941        self.if_match = ::std::option::Option::Some(input.into());
942        self
943    }
944    /// <p>Uploads the object only if the ETag (entity tag) value provided during the WRITE operation matches the ETag of the object in S3. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error.</p>
945    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
946    /// <p>Expects the ETag value as a string.</p>
947    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
948    pub fn set_if_match(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
949        self.if_match = input;
950        self
951    }
952    /// <p>Uploads the object only if the ETag (entity tag) value provided during the WRITE operation matches the ETag of the object in S3. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error.</p>
953    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
954    /// <p>Expects the ETag value as a string.</p>
955    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
956    pub fn get_if_match(&self) -> &::std::option::Option<::std::string::String> {
957        &self.if_match
958    }
959    /// <p>Uploads the object only if the object key name does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error.</p>
960    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
961    /// <p>Expects the '*' (asterisk) character.</p>
962    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
963    pub fn if_none_match(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
964        self.if_none_match = ::std::option::Option::Some(input.into());
965        self
966    }
967    /// <p>Uploads the object only if the object key name does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error.</p>
968    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
969    /// <p>Expects the '*' (asterisk) character.</p>
970    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
971    pub fn set_if_none_match(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
972        self.if_none_match = input;
973        self
974    }
975    /// <p>Uploads the object only if the object key name does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error.</p>
976    /// <p>If a conflicting operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
977    /// <p>Expects the '*' (asterisk) character.</p>
978    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html">Conditional requests</a> in the <i>Amazon S3 User Guide</i>.</p>
979    pub fn get_if_none_match(&self) -> &::std::option::Option<::std::string::String> {
980        &self.if_none_match
981    }
982    /// <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.</p><note>
983    /// <ul>
984    /// <li>
985    /// <p>This functionality is not supported for directory buckets.</p></li>
986    /// <li>
987    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
988    /// </ul>
989    /// </note>
990    pub fn grant_full_control(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
991        self.grant_full_control = ::std::option::Option::Some(input.into());
992        self
993    }
994    /// <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.</p><note>
995    /// <ul>
996    /// <li>
997    /// <p>This functionality is not supported for directory buckets.</p></li>
998    /// <li>
999    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1000    /// </ul>
1001    /// </note>
1002    pub fn set_grant_full_control(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1003        self.grant_full_control = input;
1004        self
1005    }
1006    /// <p>Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.</p><note>
1007    /// <ul>
1008    /// <li>
1009    /// <p>This functionality is not supported for directory buckets.</p></li>
1010    /// <li>
1011    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1012    /// </ul>
1013    /// </note>
1014    pub fn get_grant_full_control(&self) -> &::std::option::Option<::std::string::String> {
1015        &self.grant_full_control
1016    }
1017    /// <p>Allows grantee to read the object data and its metadata.</p><note>
1018    /// <ul>
1019    /// <li>
1020    /// <p>This functionality is not supported for directory buckets.</p></li>
1021    /// <li>
1022    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1023    /// </ul>
1024    /// </note>
1025    pub fn grant_read(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1026        self.grant_read = ::std::option::Option::Some(input.into());
1027        self
1028    }
1029    /// <p>Allows grantee to read the object data and its metadata.</p><note>
1030    /// <ul>
1031    /// <li>
1032    /// <p>This functionality is not supported for directory buckets.</p></li>
1033    /// <li>
1034    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1035    /// </ul>
1036    /// </note>
1037    pub fn set_grant_read(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1038        self.grant_read = input;
1039        self
1040    }
1041    /// <p>Allows grantee to read the object data and its metadata.</p><note>
1042    /// <ul>
1043    /// <li>
1044    /// <p>This functionality is not supported for directory buckets.</p></li>
1045    /// <li>
1046    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1047    /// </ul>
1048    /// </note>
1049    pub fn get_grant_read(&self) -> &::std::option::Option<::std::string::String> {
1050        &self.grant_read
1051    }
1052    /// <p>Allows grantee to read the object ACL.</p><note>
1053    /// <ul>
1054    /// <li>
1055    /// <p>This functionality is not supported for directory buckets.</p></li>
1056    /// <li>
1057    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1058    /// </ul>
1059    /// </note>
1060    pub fn grant_read_acp(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1061        self.grant_read_acp = ::std::option::Option::Some(input.into());
1062        self
1063    }
1064    /// <p>Allows grantee to read the object ACL.</p><note>
1065    /// <ul>
1066    /// <li>
1067    /// <p>This functionality is not supported for directory buckets.</p></li>
1068    /// <li>
1069    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1070    /// </ul>
1071    /// </note>
1072    pub fn set_grant_read_acp(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1073        self.grant_read_acp = input;
1074        self
1075    }
1076    /// <p>Allows grantee to read the object ACL.</p><note>
1077    /// <ul>
1078    /// <li>
1079    /// <p>This functionality is not supported for directory buckets.</p></li>
1080    /// <li>
1081    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1082    /// </ul>
1083    /// </note>
1084    pub fn get_grant_read_acp(&self) -> &::std::option::Option<::std::string::String> {
1085        &self.grant_read_acp
1086    }
1087    /// <p>Allows grantee to write the ACL for the applicable object.</p><note>
1088    /// <ul>
1089    /// <li>
1090    /// <p>This functionality is not supported for directory buckets.</p></li>
1091    /// <li>
1092    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1093    /// </ul>
1094    /// </note>
1095    pub fn grant_write_acp(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1096        self.grant_write_acp = ::std::option::Option::Some(input.into());
1097        self
1098    }
1099    /// <p>Allows grantee to write the ACL for the applicable object.</p><note>
1100    /// <ul>
1101    /// <li>
1102    /// <p>This functionality is not supported for directory buckets.</p></li>
1103    /// <li>
1104    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1105    /// </ul>
1106    /// </note>
1107    pub fn set_grant_write_acp(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1108        self.grant_write_acp = input;
1109        self
1110    }
1111    /// <p>Allows grantee to write the ACL for the applicable object.</p><note>
1112    /// <ul>
1113    /// <li>
1114    /// <p>This functionality is not supported for directory buckets.</p></li>
1115    /// <li>
1116    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
1117    /// </ul>
1118    /// </note>
1119    pub fn get_grant_write_acp(&self) -> &::std::option::Option<::std::string::String> {
1120        &self.grant_write_acp
1121    }
1122    /// <p>Object key for which the PUT action was initiated.</p>
1123    /// This field is required.
1124    pub fn key(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1125        self.key = ::std::option::Option::Some(input.into());
1126        self
1127    }
1128    /// <p>Object key for which the PUT action was initiated.</p>
1129    pub fn set_key(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1130        self.key = input;
1131        self
1132    }
1133    /// <p>Object key for which the PUT action was initiated.</p>
1134    pub fn get_key(&self) -> &::std::option::Option<::std::string::String> {
1135        &self.key
1136    }
1137    /// <p>Specifies the offset for appending data to existing objects in bytes. The offset must be equal to the size of the existing object being appended to. If no object exists, setting this header to 0 will create a new object.</p><note>
1138    /// <p>This functionality is only supported for objects in the Amazon S3 Express One Zone storage class in directory buckets.</p>
1139    /// </note>
1140    pub fn write_offset_bytes(mut self, input: i64) -> Self {
1141        self.write_offset_bytes = ::std::option::Option::Some(input);
1142        self
1143    }
1144    /// <p>Specifies the offset for appending data to existing objects in bytes. The offset must be equal to the size of the existing object being appended to. If no object exists, setting this header to 0 will create a new object.</p><note>
1145    /// <p>This functionality is only supported for objects in the Amazon S3 Express One Zone storage class in directory buckets.</p>
1146    /// </note>
1147    pub fn set_write_offset_bytes(mut self, input: ::std::option::Option<i64>) -> Self {
1148        self.write_offset_bytes = input;
1149        self
1150    }
1151    /// <p>Specifies the offset for appending data to existing objects in bytes. The offset must be equal to the size of the existing object being appended to. If no object exists, setting this header to 0 will create a new object.</p><note>
1152    /// <p>This functionality is only supported for objects in the Amazon S3 Express One Zone storage class in directory buckets.</p>
1153    /// </note>
1154    pub fn get_write_offset_bytes(&self) -> &::std::option::Option<i64> {
1155        &self.write_offset_bytes
1156    }
1157    /// Adds a key-value pair to `metadata`.
1158    ///
1159    /// To override the contents of this collection use [`set_metadata`](Self::set_metadata).
1160    ///
1161    /// <p>A map of metadata to store with the object in S3.</p>
1162    pub fn metadata(mut self, k: impl ::std::convert::Into<::std::string::String>, v: impl ::std::convert::Into<::std::string::String>) -> Self {
1163        let mut hash_map = self.metadata.unwrap_or_default();
1164        hash_map.insert(k.into(), v.into());
1165        self.metadata = ::std::option::Option::Some(hash_map);
1166        self
1167    }
1168    /// <p>A map of metadata to store with the object in S3.</p>
1169    pub fn set_metadata(mut self, input: ::std::option::Option<::std::collections::HashMap<::std::string::String, ::std::string::String>>) -> Self {
1170        self.metadata = input;
1171        self
1172    }
1173    /// <p>A map of metadata to store with the object in S3.</p>
1174    pub fn get_metadata(&self) -> &::std::option::Option<::std::collections::HashMap<::std::string::String, ::std::string::String>> {
1175        &self.metadata
1176    }
1177    /// <p>The server-side encryption algorithm that was used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>, <code>aws:kms:dsse</code>).</p>
1178    /// <ul>
1179    /// <li>
1180    /// <p><b>General purpose buckets </b> - You have four mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest by using server-side encryption with other key options. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p></li>
1181    /// <li>
1182    /// <p><b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html">Specifying server-side encryption with KMS for new object uploads</a>.</p>
1183    /// <p>In the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket.</p><note>
1184    /// <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket.</p>
1185    /// </note></li>
1186    /// </ul>
1187    pub fn server_side_encryption(mut self, input: crate::types::ServerSideEncryption) -> Self {
1188        self.server_side_encryption = ::std::option::Option::Some(input);
1189        self
1190    }
1191    /// <p>The server-side encryption algorithm that was used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>, <code>aws:kms:dsse</code>).</p>
1192    /// <ul>
1193    /// <li>
1194    /// <p><b>General purpose buckets </b> - You have four mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest by using server-side encryption with other key options. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p></li>
1195    /// <li>
1196    /// <p><b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html">Specifying server-side encryption with KMS for new object uploads</a>.</p>
1197    /// <p>In the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket.</p><note>
1198    /// <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket.</p>
1199    /// </note></li>
1200    /// </ul>
1201    pub fn set_server_side_encryption(mut self, input: ::std::option::Option<crate::types::ServerSideEncryption>) -> Self {
1202        self.server_side_encryption = input;
1203        self
1204    }
1205    /// <p>The server-side encryption algorithm that was used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>, <code>aws:kms:dsse</code>).</p>
1206    /// <ul>
1207    /// <li>
1208    /// <p><b>General purpose buckets </b> - You have four mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest by using server-side encryption with other key options. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p></li>
1209    /// <li>
1210    /// <p><b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html">Specifying server-side encryption with KMS for new object uploads</a>.</p>
1211    /// <p>In the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket.</p><note>
1212    /// <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket.</p>
1213    /// </note></li>
1214    /// </ul>
1215    pub fn get_server_side_encryption(&self) -> &::std::option::Option<crate::types::ServerSideEncryption> {
1216        &self.server_side_encryption
1217    }
1218    /// <p>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. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1219    /// <ul>
1220    /// <li>
1221    /// <p>For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects.</p></li>
1222    /// <li>
1223    /// <p>Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.</p></li>
1224    /// </ul>
1225    /// </note>
1226    pub fn storage_class(mut self, input: crate::types::StorageClass) -> Self {
1227        self.storage_class = ::std::option::Option::Some(input);
1228        self
1229    }
1230    /// <p>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. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1231    /// <ul>
1232    /// <li>
1233    /// <p>For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects.</p></li>
1234    /// <li>
1235    /// <p>Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.</p></li>
1236    /// </ul>
1237    /// </note>
1238    pub fn set_storage_class(mut self, input: ::std::option::Option<crate::types::StorageClass>) -> Self {
1239        self.storage_class = input;
1240        self
1241    }
1242    /// <p>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. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1243    /// <ul>
1244    /// <li>
1245    /// <p>For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects.</p></li>
1246    /// <li>
1247    /// <p>Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.</p></li>
1248    /// </ul>
1249    /// </note>
1250    pub fn get_storage_class(&self) -> &::std::option::Option<crate::types::StorageClass> {
1251        &self.storage_class
1252    }
1253    /// <p>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. For information about object metadata, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object Key and Metadata</a> in the <i>Amazon S3 User Guide</i>.</p>
1254    /// <p>In the following example, the request header sets the redirect to an object (anotherPage.html) in the same bucket:</p>
1255    /// <p><code>x-amz-website-redirect-location: /anotherPage.html</code></p>
1256    /// <p>In the following example, the request header sets the object redirect to another website:</p>
1257    /// <p><code>x-amz-website-redirect-location: http://www.example.com/</code></p>
1258    /// <p>For more information about website hosting in Amazon S3, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting Websites on Amazon S3</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How to Configure Website Page Redirects</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1259    /// <p>This functionality is not supported for directory buckets.</p>
1260    /// </note>
1261    pub fn website_redirect_location(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1262        self.website_redirect_location = ::std::option::Option::Some(input.into());
1263        self
1264    }
1265    /// <p>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. For information about object metadata, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object Key and Metadata</a> in the <i>Amazon S3 User Guide</i>.</p>
1266    /// <p>In the following example, the request header sets the redirect to an object (anotherPage.html) in the same bucket:</p>
1267    /// <p><code>x-amz-website-redirect-location: /anotherPage.html</code></p>
1268    /// <p>In the following example, the request header sets the object redirect to another website:</p>
1269    /// <p><code>x-amz-website-redirect-location: http://www.example.com/</code></p>
1270    /// <p>For more information about website hosting in Amazon S3, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting Websites on Amazon S3</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How to Configure Website Page Redirects</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1271    /// <p>This functionality is not supported for directory buckets.</p>
1272    /// </note>
1273    pub fn set_website_redirect_location(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1274        self.website_redirect_location = input;
1275        self
1276    }
1277    /// <p>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. For information about object metadata, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html">Object Key and Metadata</a> in the <i>Amazon S3 User Guide</i>.</p>
1278    /// <p>In the following example, the request header sets the redirect to an object (anotherPage.html) in the same bucket:</p>
1279    /// <p><code>x-amz-website-redirect-location: /anotherPage.html</code></p>
1280    /// <p>In the following example, the request header sets the object redirect to another website:</p>
1281    /// <p><code>x-amz-website-redirect-location: http://www.example.com/</code></p>
1282    /// <p>For more information about website hosting in Amazon S3, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">Hosting Websites on Amazon S3</a> and <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html">How to Configure Website Page Redirects</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1283    /// <p>This functionality is not supported for directory buckets.</p>
1284    /// </note>
1285    pub fn get_website_redirect_location(&self) -> &::std::option::Option<::std::string::String> {
1286        &self.website_redirect_location
1287    }
1288    /// <p>Specifies the algorithm to use when encrypting the object (for example, <code>AES256</code>).</p><note>
1289    /// <p>This functionality is not supported for directory buckets.</p>
1290    /// </note>
1291    pub fn sse_customer_algorithm(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1292        self.sse_customer_algorithm = ::std::option::Option::Some(input.into());
1293        self
1294    }
1295    /// <p>Specifies the algorithm to use when encrypting the object (for example, <code>AES256</code>).</p><note>
1296    /// <p>This functionality is not supported for directory buckets.</p>
1297    /// </note>
1298    pub fn set_sse_customer_algorithm(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1299        self.sse_customer_algorithm = input;
1300        self
1301    }
1302    /// <p>Specifies the algorithm to use when encrypting the object (for example, <code>AES256</code>).</p><note>
1303    /// <p>This functionality is not supported for directory buckets.</p>
1304    /// </note>
1305    pub fn get_sse_customer_algorithm(&self) -> &::std::option::Option<::std::string::String> {
1306        &self.sse_customer_algorithm
1307    }
1308    /// <p>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 <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p><note>
1309    /// <p>This functionality is not supported for directory buckets.</p>
1310    /// </note>
1311    pub fn sse_customer_key(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1312        self.sse_customer_key = ::std::option::Option::Some(input.into());
1313        self
1314    }
1315    /// <p>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 <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p><note>
1316    /// <p>This functionality is not supported for directory buckets.</p>
1317    /// </note>
1318    pub fn set_sse_customer_key(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1319        self.sse_customer_key = input;
1320        self
1321    }
1322    /// <p>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 <code>x-amz-server-side-encryption-customer-algorithm</code> header.</p><note>
1323    /// <p>This functionality is not supported for directory buckets.</p>
1324    /// </note>
1325    pub fn get_sse_customer_key(&self) -> &::std::option::Option<::std::string::String> {
1326        &self.sse_customer_key
1327    }
1328    /// <p>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.</p><note>
1329    /// <p>This functionality is not supported for directory buckets.</p>
1330    /// </note>
1331    pub fn sse_customer_key_md5(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1332        self.sse_customer_key_md5 = ::std::option::Option::Some(input.into());
1333        self
1334    }
1335    /// <p>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.</p><note>
1336    /// <p>This functionality is not supported for directory buckets.</p>
1337    /// </note>
1338    pub fn set_sse_customer_key_md5(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1339        self.sse_customer_key_md5 = input;
1340        self
1341    }
1342    /// <p>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.</p><note>
1343    /// <p>This functionality is not supported for directory buckets.</p>
1344    /// </note>
1345    pub fn get_sse_customer_key_md5(&self) -> &::std::option::Option<::std::string::String> {
1346        &self.sse_customer_key_md5
1347    }
1348    /// <p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID.</p>
1349    /// <p><b>General purpose buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code> or <code>aws:kms:dsse</code>, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify <code>x-amz-server-side-encryption:aws:kms</code> or <code>x-amz-server-side-encryption:aws:kms:dsse</code>, but do not provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code>) to protect the data.</p>
1350    /// <p><b>Directory buckets</b> - To encrypt data using SSE-KMS, it's recommended to specify the <code>x-amz-server-side-encryption</code> header to <code>aws:kms</code>. Then, the <code>x-amz-server-side-encryption-aws-kms-key-id</code> header implicitly uses the bucket's default KMS customer managed key ID. If you want to explicitly set the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header, it must match the bucket's default customer managed key (using key ID or ARN, not alias). Your SSE-KMS configuration can only support 1 <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk">customer managed key</a> per directory bucket's lifetime. The <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Incorrect key specification results in an HTTP <code>400 Bad Request</code> error.</p>
1351    pub fn ssekms_key_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1352        self.ssekms_key_id = ::std::option::Option::Some(input.into());
1353        self
1354    }
1355    /// <p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID.</p>
1356    /// <p><b>General purpose buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code> or <code>aws:kms:dsse</code>, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify <code>x-amz-server-side-encryption:aws:kms</code> or <code>x-amz-server-side-encryption:aws:kms:dsse</code>, but do not provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code>) to protect the data.</p>
1357    /// <p><b>Directory buckets</b> - To encrypt data using SSE-KMS, it's recommended to specify the <code>x-amz-server-side-encryption</code> header to <code>aws:kms</code>. Then, the <code>x-amz-server-side-encryption-aws-kms-key-id</code> header implicitly uses the bucket's default KMS customer managed key ID. If you want to explicitly set the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header, it must match the bucket's default customer managed key (using key ID or ARN, not alias). Your SSE-KMS configuration can only support 1 <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk">customer managed key</a> per directory bucket's lifetime. The <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Incorrect key specification results in an HTTP <code>400 Bad Request</code> error.</p>
1358    pub fn set_ssekms_key_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1359        self.ssekms_key_id = input;
1360        self
1361    }
1362    /// <p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID.</p>
1363    /// <p><b>General purpose buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code> or <code>aws:kms:dsse</code>, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify <code>x-amz-server-side-encryption:aws:kms</code> or <code>x-amz-server-side-encryption:aws:kms:dsse</code>, but do not provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code>) to protect the data.</p>
1364    /// <p><b>Directory buckets</b> - To encrypt data using SSE-KMS, it's recommended to specify the <code>x-amz-server-side-encryption</code> header to <code>aws:kms</code>. Then, the <code>x-amz-server-side-encryption-aws-kms-key-id</code> header implicitly uses the bucket's default KMS customer managed key ID. If you want to explicitly set the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header, it must match the bucket's default customer managed key (using key ID or ARN, not alias). Your SSE-KMS configuration can only support 1 <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk">customer managed key</a> per directory bucket's lifetime. The <a href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Incorrect key specification results in an HTTP <code>400 Bad Request</code> error.</p>
1365    pub fn get_ssekms_key_id(&self) -> &::std::option::Option<::std::string::String> {
1366        &self.ssekms_key_id
1367    }
1368    /// <p>Specifies the Amazon Web Services KMS Encryption Context as an additional encryption context to use for object encryption. The value of this header is a Base64 encoded string of a UTF-8 encoded JSON, which contains the encryption context as key-value pairs. This value is stored as object metadata and automatically gets passed on to Amazon Web Services KMS for future <code>GetObject</code> operations on this object.</p>
1369    /// <p><b>General purpose buckets</b> - This value must be explicitly added during <code>CopyObject</code> operations if you want an additional encryption context for your object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context">Encryption context</a> in the <i>Amazon S3 User Guide</i>.</p>
1370    /// <p><b>Directory buckets</b> - You can optionally provide an explicit encryption context value. The value must match the default encryption context - the bucket Amazon Resource Name (ARN). An additional encryption context value is not supported.</p>
1371    pub fn ssekms_encryption_context(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1372        self.ssekms_encryption_context = ::std::option::Option::Some(input.into());
1373        self
1374    }
1375    /// <p>Specifies the Amazon Web Services KMS Encryption Context as an additional encryption context to use for object encryption. The value of this header is a Base64 encoded string of a UTF-8 encoded JSON, which contains the encryption context as key-value pairs. This value is stored as object metadata and automatically gets passed on to Amazon Web Services KMS for future <code>GetObject</code> operations on this object.</p>
1376    /// <p><b>General purpose buckets</b> - This value must be explicitly added during <code>CopyObject</code> operations if you want an additional encryption context for your object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context">Encryption context</a> in the <i>Amazon S3 User Guide</i>.</p>
1377    /// <p><b>Directory buckets</b> - You can optionally provide an explicit encryption context value. The value must match the default encryption context - the bucket Amazon Resource Name (ARN). An additional encryption context value is not supported.</p>
1378    pub fn set_ssekms_encryption_context(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1379        self.ssekms_encryption_context = input;
1380        self
1381    }
1382    /// <p>Specifies the Amazon Web Services KMS Encryption Context as an additional encryption context to use for object encryption. The value of this header is a Base64 encoded string of a UTF-8 encoded JSON, which contains the encryption context as key-value pairs. This value is stored as object metadata and automatically gets passed on to Amazon Web Services KMS for future <code>GetObject</code> operations on this object.</p>
1383    /// <p><b>General purpose buckets</b> - This value must be explicitly added during <code>CopyObject</code> operations if you want an additional encryption context for your object. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context">Encryption context</a> in the <i>Amazon S3 User Guide</i>.</p>
1384    /// <p><b>Directory buckets</b> - You can optionally provide an explicit encryption context value. The value must match the default encryption context - the bucket Amazon Resource Name (ARN). An additional encryption context value is not supported.</p>
1385    pub fn get_ssekms_encryption_context(&self) -> &::std::option::Option<::std::string::String> {
1386        &self.ssekms_encryption_context
1387    }
1388    /// <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Key Management Service (KMS) keys (SSE-KMS).</p>
1389    /// <p><b>General purpose buckets</b> - Setting this header to <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS. Also, specifying this header with a PUT action doesn't affect bucket-level settings for S3 Bucket Key.</p>
1390    /// <p><b>Directory buckets</b> - S3 Bucket Keys are always enabled for <code>GET</code> and <code>PUT</code> operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops">the Copy operation in Batch Operations</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job">the import jobs</a>. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.</p>
1391    pub fn bucket_key_enabled(mut self, input: bool) -> Self {
1392        self.bucket_key_enabled = ::std::option::Option::Some(input);
1393        self
1394    }
1395    /// <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Key Management Service (KMS) keys (SSE-KMS).</p>
1396    /// <p><b>General purpose buckets</b> - Setting this header to <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS. Also, specifying this header with a PUT action doesn't affect bucket-level settings for S3 Bucket Key.</p>
1397    /// <p><b>Directory buckets</b> - S3 Bucket Keys are always enabled for <code>GET</code> and <code>PUT</code> operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops">the Copy operation in Batch Operations</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job">the import jobs</a>. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.</p>
1398    pub fn set_bucket_key_enabled(mut self, input: ::std::option::Option<bool>) -> Self {
1399        self.bucket_key_enabled = input;
1400        self
1401    }
1402    /// <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Key Management Service (KMS) keys (SSE-KMS).</p>
1403    /// <p><b>General purpose buckets</b> - Setting this header to <code>true</code> causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS. Also, specifying this header with a PUT action doesn't affect bucket-level settings for S3 Bucket Key.</p>
1404    /// <p><b>Directory buckets</b> - S3 Bucket Keys are always enabled for <code>GET</code> and <code>PUT</code> operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>, <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops">the Copy operation in Batch Operations</a>, or <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job">the import jobs</a>. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.</p>
1405    pub fn get_bucket_key_enabled(&self) -> &::std::option::Option<bool> {
1406        &self.bucket_key_enabled
1407    }
1408    /// <p>Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html">Downloading Objects in Requester Pays Buckets</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1409    /// <p>This functionality is not supported for directory buckets.</p>
1410    /// </note>
1411    pub fn request_payer(mut self, input: crate::types::RequestPayer) -> Self {
1412        self.request_payer = ::std::option::Option::Some(input);
1413        self
1414    }
1415    /// <p>Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html">Downloading Objects in Requester Pays Buckets</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1416    /// <p>This functionality is not supported for directory buckets.</p>
1417    /// </note>
1418    pub fn set_request_payer(mut self, input: ::std::option::Option<crate::types::RequestPayer>) -> Self {
1419        self.request_payer = input;
1420        self
1421    }
1422    /// <p>Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html">Downloading Objects in Requester Pays Buckets</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1423    /// <p>This functionality is not supported for directory buckets.</p>
1424    /// </note>
1425    pub fn get_request_payer(&self) -> &::std::option::Option<crate::types::RequestPayer> {
1426        &self.request_payer
1427    }
1428    /// <p>The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, "Key1=Value1")</p><note>
1429    /// <p>This functionality is not supported for directory buckets.</p>
1430    /// </note>
1431    pub fn tagging(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1432        self.tagging = ::std::option::Option::Some(input.into());
1433        self
1434    }
1435    /// <p>The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, "Key1=Value1")</p><note>
1436    /// <p>This functionality is not supported for directory buckets.</p>
1437    /// </note>
1438    pub fn set_tagging(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1439        self.tagging = input;
1440        self
1441    }
1442    /// <p>The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, "Key1=Value1")</p><note>
1443    /// <p>This functionality is not supported for directory buckets.</p>
1444    /// </note>
1445    pub fn get_tagging(&self) -> &::std::option::Option<::std::string::String> {
1446        &self.tagging
1447    }
1448    /// <p>The Object Lock mode that you want to apply to this object.</p><note>
1449    /// <p>This functionality is not supported for directory buckets.</p>
1450    /// </note>
1451    pub fn object_lock_mode(mut self, input: crate::types::ObjectLockMode) -> Self {
1452        self.object_lock_mode = ::std::option::Option::Some(input);
1453        self
1454    }
1455    /// <p>The Object Lock mode that you want to apply to this object.</p><note>
1456    /// <p>This functionality is not supported for directory buckets.</p>
1457    /// </note>
1458    pub fn set_object_lock_mode(mut self, input: ::std::option::Option<crate::types::ObjectLockMode>) -> Self {
1459        self.object_lock_mode = input;
1460        self
1461    }
1462    /// <p>The Object Lock mode that you want to apply to this object.</p><note>
1463    /// <p>This functionality is not supported for directory buckets.</p>
1464    /// </note>
1465    pub fn get_object_lock_mode(&self) -> &::std::option::Option<crate::types::ObjectLockMode> {
1466        &self.object_lock_mode
1467    }
1468    /// <p>The date and time when you want this object's Object Lock to expire. Must be formatted as a timestamp parameter.</p><note>
1469    /// <p>This functionality is not supported for directory buckets.</p>
1470    /// </note>
1471    pub fn object_lock_retain_until_date(mut self, input: ::aws_smithy_types::DateTime) -> Self {
1472        self.object_lock_retain_until_date = ::std::option::Option::Some(input);
1473        self
1474    }
1475    /// <p>The date and time when you want this object's Object Lock to expire. Must be formatted as a timestamp parameter.</p><note>
1476    /// <p>This functionality is not supported for directory buckets.</p>
1477    /// </note>
1478    pub fn set_object_lock_retain_until_date(mut self, input: ::std::option::Option<::aws_smithy_types::DateTime>) -> Self {
1479        self.object_lock_retain_until_date = input;
1480        self
1481    }
1482    /// <p>The date and time when you want this object's Object Lock to expire. Must be formatted as a timestamp parameter.</p><note>
1483    /// <p>This functionality is not supported for directory buckets.</p>
1484    /// </note>
1485    pub fn get_object_lock_retain_until_date(&self) -> &::std::option::Option<::aws_smithy_types::DateTime> {
1486        &self.object_lock_retain_until_date
1487    }
1488    /// <p>Specifies whether a legal hold will be applied to this object. For more information about S3 Object Lock, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object Lock</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1489    /// <p>This functionality is not supported for directory buckets.</p>
1490    /// </note>
1491    pub fn object_lock_legal_hold_status(mut self, input: crate::types::ObjectLockLegalHoldStatus) -> Self {
1492        self.object_lock_legal_hold_status = ::std::option::Option::Some(input);
1493        self
1494    }
1495    /// <p>Specifies whether a legal hold will be applied to this object. For more information about S3 Object Lock, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object Lock</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1496    /// <p>This functionality is not supported for directory buckets.</p>
1497    /// </note>
1498    pub fn set_object_lock_legal_hold_status(mut self, input: ::std::option::Option<crate::types::ObjectLockLegalHoldStatus>) -> Self {
1499        self.object_lock_legal_hold_status = input;
1500        self
1501    }
1502    /// <p>Specifies whether a legal hold will be applied to this object. For more information about S3 Object Lock, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html">Object Lock</a> in the <i>Amazon S3 User Guide</i>.</p><note>
1503    /// <p>This functionality is not supported for directory buckets.</p>
1504    /// </note>
1505    pub fn get_object_lock_legal_hold_status(&self) -> &::std::option::Option<crate::types::ObjectLockLegalHoldStatus> {
1506        &self.object_lock_legal_hold_status
1507    }
1508    /// <p>The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code <code>403 Forbidden</code> (access denied).</p>
1509    pub fn expected_bucket_owner(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1510        self.expected_bucket_owner = ::std::option::Option::Some(input.into());
1511        self
1512    }
1513    /// <p>The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code <code>403 Forbidden</code> (access denied).</p>
1514    pub fn set_expected_bucket_owner(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1515        self.expected_bucket_owner = input;
1516        self
1517    }
1518    /// <p>The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code <code>403 Forbidden</code> (access denied).</p>
1519    pub fn get_expected_bucket_owner(&self) -> &::std::option::Option<::std::string::String> {
1520        &self.expected_bucket_owner
1521    }
1522    /// Consumes the builder and constructs a [`PutObjectInput`](crate::operation::put_object::PutObjectInput).
1523    pub fn build(self) -> ::std::result::Result<crate::operation::put_object::PutObjectInput, ::aws_smithy_types::error::operation::BuildError> {
1524        ::std::result::Result::Ok(crate::operation::put_object::PutObjectInput {
1525            acl: self.acl,
1526            body: self.body.unwrap_or_default(),
1527            bucket: self.bucket,
1528            cache_control: self.cache_control,
1529            content_disposition: self.content_disposition,
1530            content_encoding: self.content_encoding,
1531            content_language: self.content_language,
1532            content_length: self.content_length,
1533            content_md5: self.content_md5,
1534            content_type: self.content_type,
1535            checksum_algorithm: self.checksum_algorithm,
1536            checksum_crc32: self.checksum_crc32,
1537            checksum_crc32_c: self.checksum_crc32_c,
1538            checksum_crc64_nvme: self.checksum_crc64_nvme,
1539            checksum_sha1: self.checksum_sha1,
1540            checksum_sha256: self.checksum_sha256,
1541            expires: self.expires,
1542            if_match: self.if_match,
1543            if_none_match: self.if_none_match,
1544            grant_full_control: self.grant_full_control,
1545            grant_read: self.grant_read,
1546            grant_read_acp: self.grant_read_acp,
1547            grant_write_acp: self.grant_write_acp,
1548            key: self.key,
1549            write_offset_bytes: self.write_offset_bytes,
1550            metadata: self.metadata,
1551            server_side_encryption: self.server_side_encryption,
1552            storage_class: self.storage_class,
1553            website_redirect_location: self.website_redirect_location,
1554            sse_customer_algorithm: self.sse_customer_algorithm,
1555            sse_customer_key: self.sse_customer_key,
1556            sse_customer_key_md5: self.sse_customer_key_md5,
1557            ssekms_key_id: self.ssekms_key_id,
1558            ssekms_encryption_context: self.ssekms_encryption_context,
1559            bucket_key_enabled: self.bucket_key_enabled,
1560            request_payer: self.request_payer,
1561            tagging: self.tagging,
1562            object_lock_mode: self.object_lock_mode,
1563            object_lock_retain_until_date: self.object_lock_retain_until_date,
1564            object_lock_legal_hold_status: self.object_lock_legal_hold_status,
1565            expected_bucket_owner: self.expected_bucket_owner,
1566        })
1567    }
1568}
1569impl ::std::fmt::Debug for PutObjectInputBuilder {
1570    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1571        let mut formatter = f.debug_struct("PutObjectInputBuilder");
1572        formatter.field("acl", &self.acl);
1573        formatter.field("body", &self.body);
1574        formatter.field("bucket", &self.bucket);
1575        formatter.field("cache_control", &self.cache_control);
1576        formatter.field("content_disposition", &self.content_disposition);
1577        formatter.field("content_encoding", &self.content_encoding);
1578        formatter.field("content_language", &self.content_language);
1579        formatter.field("content_length", &self.content_length);
1580        formatter.field("content_md5", &self.content_md5);
1581        formatter.field("content_type", &self.content_type);
1582        formatter.field("checksum_algorithm", &self.checksum_algorithm);
1583        formatter.field("checksum_crc32", &self.checksum_crc32);
1584        formatter.field("checksum_crc32_c", &self.checksum_crc32_c);
1585        formatter.field("checksum_crc64_nvme", &self.checksum_crc64_nvme);
1586        formatter.field("checksum_sha1", &self.checksum_sha1);
1587        formatter.field("checksum_sha256", &self.checksum_sha256);
1588        formatter.field("expires", &self.expires);
1589        formatter.field("if_match", &self.if_match);
1590        formatter.field("if_none_match", &self.if_none_match);
1591        formatter.field("grant_full_control", &self.grant_full_control);
1592        formatter.field("grant_read", &self.grant_read);
1593        formatter.field("grant_read_acp", &self.grant_read_acp);
1594        formatter.field("grant_write_acp", &self.grant_write_acp);
1595        formatter.field("key", &self.key);
1596        formatter.field("write_offset_bytes", &self.write_offset_bytes);
1597        formatter.field("metadata", &self.metadata);
1598        formatter.field("server_side_encryption", &self.server_side_encryption);
1599        formatter.field("storage_class", &self.storage_class);
1600        formatter.field("website_redirect_location", &self.website_redirect_location);
1601        formatter.field("sse_customer_algorithm", &self.sse_customer_algorithm);
1602        formatter.field("sse_customer_key", &"*** Sensitive Data Redacted ***");
1603        formatter.field("sse_customer_key_md5", &self.sse_customer_key_md5);
1604        formatter.field("ssekms_key_id", &"*** Sensitive Data Redacted ***");
1605        formatter.field("ssekms_encryption_context", &"*** Sensitive Data Redacted ***");
1606        formatter.field("bucket_key_enabled", &self.bucket_key_enabled);
1607        formatter.field("request_payer", &self.request_payer);
1608        formatter.field("tagging", &self.tagging);
1609        formatter.field("object_lock_mode", &self.object_lock_mode);
1610        formatter.field("object_lock_retain_until_date", &self.object_lock_retain_until_date);
1611        formatter.field("object_lock_legal_hold_status", &self.object_lock_legal_hold_status);
1612        formatter.field("expected_bucket_owner", &self.expected_bucket_owner);
1613        formatter.finish()
1614    }
1615}