All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.aws.s3.kotlin.ObjectCopyArgs.kt Maven / Gradle / Ivy

@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.aws.s3.kotlin

import com.pulumi.aws.s3.ObjectCopyArgs.builder
import com.pulumi.aws.s3.kotlin.inputs.ObjectCopyGrantArgs
import com.pulumi.aws.s3.kotlin.inputs.ObjectCopyGrantArgsBuilder
import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.Boolean
import kotlin.Pair
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import kotlin.jvm.JvmName

/**
 * Provides a resource for copying an S3 object.
 * ## Example Usage
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as aws from "@pulumi/aws";
 * const test = new aws.s3.ObjectCopy("test", {
 *     bucket: "destination_bucket",
 *     key: "destination_key",
 *     source: "source_bucket/source_key",
 *     grants: [{
 *         uri: "http://acs.amazonaws.com/groups/global/AllUsers",
 *         type: "Group",
 *         permissions: ["READ"],
 *     }],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_aws as aws
 * test = aws.s3.ObjectCopy("test",
 *     bucket="destination_bucket",
 *     key="destination_key",
 *     source="source_bucket/source_key",
 *     grants=[{
 *         "uri": "http://acs.amazonaws.com/groups/global/AllUsers",
 *         "type": "Group",
 *         "permissions": ["READ"],
 *     }])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Aws = Pulumi.Aws;
 * return await Deployment.RunAsync(() =>
 * {
 *     var test = new Aws.S3.ObjectCopy("test", new()
 *     {
 *         Bucket = "destination_bucket",
 *         Key = "destination_key",
 *         Source = "source_bucket/source_key",
 *         Grants = new[]
 *         {
 *             new Aws.S3.Inputs.ObjectCopyGrantArgs
 *             {
 *                 Uri = "http://acs.amazonaws.com/groups/global/AllUsers",
 *                 Type = "Group",
 *                 Permissions = new[]
 *                 {
 *                     "READ",
 *                 },
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_, err := s3.NewObjectCopy(ctx, "test", &s3.ObjectCopyArgs{
 * 			Bucket: pulumi.String("destination_bucket"),
 * 			Key:    pulumi.String("destination_key"),
 * 			Source: pulumi.String("source_bucket/source_key"),
 * 			Grants: s3.ObjectCopyGrantArray{
 * 				&s3.ObjectCopyGrantArgs{
 * 					Uri:  pulumi.String("http://acs.amazonaws.com/groups/global/AllUsers"),
 * 					Type: pulumi.String("Group"),
 * 					Permissions: pulumi.StringArray{
 * 						pulumi.String("READ"),
 * 					},
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.aws.s3.ObjectCopy;
 * import com.pulumi.aws.s3.ObjectCopyArgs;
 * import com.pulumi.aws.s3.inputs.ObjectCopyGrantArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var test = new ObjectCopy("test", ObjectCopyArgs.builder()
 *             .bucket("destination_bucket")
 *             .key("destination_key")
 *             .source("source_bucket/source_key")
 *             .grants(ObjectCopyGrantArgs.builder()
 *                 .uri("http://acs.amazonaws.com/groups/global/AllUsers")
 *                 .type("Group")
 *                 .permissions("READ")
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   test:
 *     type: aws:s3:ObjectCopy
 *     properties:
 *       bucket: destination_bucket
 *       key: destination_key
 *       source: source_bucket/source_key
 *       grants:
 *         - uri: http://acs.amazonaws.com/groups/global/AllUsers
 *           type: Group
 *           permissions:
 *             - READ
 * ```
 * 
 * @property acl [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) to apply. Valid values are `private`, `public-read`, `public-read-write`, `authenticated-read`, `aws-exec-read`, `bucket-owner-read`, and `bucket-owner-full-control`. Conflicts with `grant`.
 * @property bucket Name of the bucket to put the file in.
 * @property bucketKeyEnabled
 * @property cacheControl Specifies caching behavior along the request/reply chain Read [w3c cache_control](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9) for further details.
 * @property checksumAlgorithm Indicates the algorithm used to create the checksum for the object. If a value is specified and the object is encrypted with KMS, you must have permission to use the `kms:Decrypt` action. Valid values: `CRC32`, `CRC32C`, `SHA1`, `SHA256`.
 * @property contentDisposition Specifies presentational information for the object. Read [w3c content_disposition](http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1) for further information.
 * @property contentEncoding Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field. Read [w3c content encoding](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11) for further information.
 * @property contentLanguage Language the content is in e.g., en-US or en-GB.
 * @property contentType Standard MIME type describing the format of the object data, e.g., `application/octet-stream`. All Valid MIME Types are valid for this input.
 * @property copyIfMatch Copies the object if its entity tag (ETag) matches the specified tag.
 * @property copyIfModifiedSince Copies the object if it has been modified since the specified time, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8).
 * @property copyIfNoneMatch Copies the object if its entity tag (ETag) is different than the specified ETag.
 * @property copyIfUnmodifiedSince Copies the object if it hasn't been modified since the specified time, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8).
 * @property customerAlgorithm Specifies the algorithm to use to when encrypting the object (for example, AES256).
 * @property customerKey Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon S3 does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side-encryption-customer-algorithm header.
 * @property customerKeyMd5 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.
 * @property expectedBucketOwner Account id of the expected destination bucket owner. If the destination bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
 * @property expectedSourceBucketOwner Account id of the expected source bucket owner. If the source bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
 * @property expires Date and time at which the object is no longer cacheable, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8).
 * @property forceDestroy Allow the object to be deleted by removing any legal hold on any object version. Default is `false`. This value should be set to `true` only if the bucket has S3 object lock enabled.
 * @property grants Configuration block for header grants. Documented below. Conflicts with `acl`.
 * @property key Name of the object once it is in the bucket.
 * @property kmsEncryptionContext Specifies the AWS KMS Encryption Context to use for object encryption. The value is a base64-encoded UTF-8 string holding JSON with the encryption context key-value pairs.
 * @property kmsKeyId Specifies the AWS KMS Key ARN to use for object encryption. This value is a fully qualified **ARN** of the KMS Key. If using `aws.kms.Key`, use the exported `arn` attribute: `kms_key_id = aws_kms_key.foo.arn`
 * @property metadata Map of keys/values to provision metadata (will be automatically prefixed by `x-amz-meta-`, note that only lowercase label are currently supported by the AWS Go API).
 * @property metadataDirective Specifies whether the metadata is copied from the source object or replaced with metadata provided in the request. Valid values are `COPY` and `REPLACE`.
 * @property objectLockLegalHoldStatus The [legal hold](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-legal-holds) status that you want to apply to the specified object. Valid values are `ON` and `OFF`.
 * @property objectLockMode Object lock [retention mode](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-retention-modes) that you want to apply to this object. Valid values are `GOVERNANCE` and `COMPLIANCE`.
 * @property objectLockRetainUntilDate Date and time, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8), when this object's object lock will [expire](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-retention-periods).
 * @property requestPayer Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. For information about downloading objects from requester pays buckets, see Downloading Objects in Requestor Pays Buckets (https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html) in the Amazon S3 Developer Guide. If included, the only valid value is `requester`.
 * @property serverSideEncryption Specifies server-side encryption of the object in S3. Valid values are `AES256` and `aws:kms`.
 * @property source Specifies the source object for the copy operation. You specify the value in one of two formats. For objects not accessed through an access point, specify the name of the source bucket and the key of the source object, separated by a slash (`/`). For example, `testbucket/test1.json`. For objects accessed through access points, specify the ARN of the object as accessed through the access point, in the format `arn:aws:s3:::accesspoint//object/`. For example, `arn:aws:s3:us-west-2:9999912999:accesspoint/my-access-point/object/testbucket/test1.json`.
 * The following arguments are optional:
 * @property sourceCustomerAlgorithm Specifies the algorithm to use when decrypting the source object (for example, AES256).
 * @property sourceCustomerKey Specifies the customer-provided encryption key for Amazon S3 to use to decrypt the source object. The encryption key provided in this header must be one that was used when the source object was created.
 * @property sourceCustomerKeyMd5 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.
 * @property storageClass Specifies the desired [storage class](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html#AmazonS3-CopyObject-request-header-StorageClass) for the object. Defaults to `STANDARD`.
 * @property taggingDirective Specifies whether the object tag-set are copied from the source object or replaced with tag-set provided in the request. Valid values are `COPY` and `REPLACE`.
 * @property tags Map of tags to assign to the object. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
 * @property websiteRedirect Specifies a target URL for [website redirect](http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html).
 */
public data class ObjectCopyArgs(
    public val acl: Output? = null,
    public val bucket: Output? = null,
    public val bucketKeyEnabled: Output? = null,
    public val cacheControl: Output? = null,
    public val checksumAlgorithm: Output? = null,
    public val contentDisposition: Output? = null,
    public val contentEncoding: Output? = null,
    public val contentLanguage: Output? = null,
    public val contentType: Output? = null,
    public val copyIfMatch: Output? = null,
    public val copyIfModifiedSince: Output? = null,
    public val copyIfNoneMatch: Output? = null,
    public val copyIfUnmodifiedSince: Output? = null,
    public val customerAlgorithm: Output? = null,
    public val customerKey: Output? = null,
    public val customerKeyMd5: Output? = null,
    public val expectedBucketOwner: Output? = null,
    public val expectedSourceBucketOwner: Output? = null,
    public val expires: Output? = null,
    public val forceDestroy: Output? = null,
    public val grants: Output>? = null,
    public val key: Output? = null,
    public val kmsEncryptionContext: Output? = null,
    public val kmsKeyId: Output? = null,
    public val metadata: Output>? = null,
    public val metadataDirective: Output? = null,
    public val objectLockLegalHoldStatus: Output? = null,
    public val objectLockMode: Output? = null,
    public val objectLockRetainUntilDate: Output? = null,
    public val requestPayer: Output? = null,
    public val serverSideEncryption: Output? = null,
    public val source: Output? = null,
    public val sourceCustomerAlgorithm: Output? = null,
    public val sourceCustomerKey: Output? = null,
    public val sourceCustomerKeyMd5: Output? = null,
    public val storageClass: Output? = null,
    public val taggingDirective: Output? = null,
    public val tags: Output>? = null,
    public val websiteRedirect: Output? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.aws.s3.ObjectCopyArgs =
        com.pulumi.aws.s3.ObjectCopyArgs.builder()
            .acl(acl?.applyValue({ args0 -> args0 }))
            .bucket(bucket?.applyValue({ args0 -> args0 }))
            .bucketKeyEnabled(bucketKeyEnabled?.applyValue({ args0 -> args0 }))
            .cacheControl(cacheControl?.applyValue({ args0 -> args0 }))
            .checksumAlgorithm(checksumAlgorithm?.applyValue({ args0 -> args0 }))
            .contentDisposition(contentDisposition?.applyValue({ args0 -> args0 }))
            .contentEncoding(contentEncoding?.applyValue({ args0 -> args0 }))
            .contentLanguage(contentLanguage?.applyValue({ args0 -> args0 }))
            .contentType(contentType?.applyValue({ args0 -> args0 }))
            .copyIfMatch(copyIfMatch?.applyValue({ args0 -> args0 }))
            .copyIfModifiedSince(copyIfModifiedSince?.applyValue({ args0 -> args0 }))
            .copyIfNoneMatch(copyIfNoneMatch?.applyValue({ args0 -> args0 }))
            .copyIfUnmodifiedSince(copyIfUnmodifiedSince?.applyValue({ args0 -> args0 }))
            .customerAlgorithm(customerAlgorithm?.applyValue({ args0 -> args0 }))
            .customerKey(customerKey?.applyValue({ args0 -> args0 }))
            .customerKeyMd5(customerKeyMd5?.applyValue({ args0 -> args0 }))
            .expectedBucketOwner(expectedBucketOwner?.applyValue({ args0 -> args0 }))
            .expectedSourceBucketOwner(expectedSourceBucketOwner?.applyValue({ args0 -> args0 }))
            .expires(expires?.applyValue({ args0 -> args0 }))
            .forceDestroy(forceDestroy?.applyValue({ args0 -> args0 }))
            .grants(grants?.applyValue({ args0 -> args0.map({ args0 -> args0.let({ args0 -> args0.toJava() }) }) }))
            .key(key?.applyValue({ args0 -> args0 }))
            .kmsEncryptionContext(kmsEncryptionContext?.applyValue({ args0 -> args0 }))
            .kmsKeyId(kmsKeyId?.applyValue({ args0 -> args0 }))
            .metadata(
                metadata?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.key.to(args0.value)
                    }).toMap()
                }),
            )
            .metadataDirective(metadataDirective?.applyValue({ args0 -> args0 }))
            .objectLockLegalHoldStatus(objectLockLegalHoldStatus?.applyValue({ args0 -> args0 }))
            .objectLockMode(objectLockMode?.applyValue({ args0 -> args0 }))
            .objectLockRetainUntilDate(objectLockRetainUntilDate?.applyValue({ args0 -> args0 }))
            .requestPayer(requestPayer?.applyValue({ args0 -> args0 }))
            .serverSideEncryption(serverSideEncryption?.applyValue({ args0 -> args0 }))
            .source(source?.applyValue({ args0 -> args0 }))
            .sourceCustomerAlgorithm(sourceCustomerAlgorithm?.applyValue({ args0 -> args0 }))
            .sourceCustomerKey(sourceCustomerKey?.applyValue({ args0 -> args0 }))
            .sourceCustomerKeyMd5(sourceCustomerKeyMd5?.applyValue({ args0 -> args0 }))
            .storageClass(storageClass?.applyValue({ args0 -> args0 }))
            .taggingDirective(taggingDirective?.applyValue({ args0 -> args0 }))
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.key.to(args0.value) }).toMap() }))
            .websiteRedirect(websiteRedirect?.applyValue({ args0 -> args0 })).build()
}

/**
 * Builder for [ObjectCopyArgs].
 */
@PulumiTagMarker
public class ObjectCopyArgsBuilder internal constructor() {
    private var acl: Output? = null

    private var bucket: Output? = null

    private var bucketKeyEnabled: Output? = null

    private var cacheControl: Output? = null

    private var checksumAlgorithm: Output? = null

    private var contentDisposition: Output? = null

    private var contentEncoding: Output? = null

    private var contentLanguage: Output? = null

    private var contentType: Output? = null

    private var copyIfMatch: Output? = null

    private var copyIfModifiedSince: Output? = null

    private var copyIfNoneMatch: Output? = null

    private var copyIfUnmodifiedSince: Output? = null

    private var customerAlgorithm: Output? = null

    private var customerKey: Output? = null

    private var customerKeyMd5: Output? = null

    private var expectedBucketOwner: Output? = null

    private var expectedSourceBucketOwner: Output? = null

    private var expires: Output? = null

    private var forceDestroy: Output? = null

    private var grants: Output>? = null

    private var key: Output? = null

    private var kmsEncryptionContext: Output? = null

    private var kmsKeyId: Output? = null

    private var metadata: Output>? = null

    private var metadataDirective: Output? = null

    private var objectLockLegalHoldStatus: Output? = null

    private var objectLockMode: Output? = null

    private var objectLockRetainUntilDate: Output? = null

    private var requestPayer: Output? = null

    private var serverSideEncryption: Output? = null

    private var source: Output? = null

    private var sourceCustomerAlgorithm: Output? = null

    private var sourceCustomerKey: Output? = null

    private var sourceCustomerKeyMd5: Output? = null

    private var storageClass: Output? = null

    private var taggingDirective: Output? = null

    private var tags: Output>? = null

    private var websiteRedirect: Output? = null

    /**
     * @param value [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) to apply. Valid values are `private`, `public-read`, `public-read-write`, `authenticated-read`, `aws-exec-read`, `bucket-owner-read`, and `bucket-owner-full-control`. Conflicts with `grant`.
     */
    @JvmName("gwlrqjwmwwmknxso")
    public suspend fun acl(`value`: Output) {
        this.acl = value
    }

    /**
     * @param value Name of the bucket to put the file in.
     */
    @JvmName("jbbdgqthbbstwbji")
    public suspend fun bucket(`value`: Output) {
        this.bucket = value
    }

    /**
     * @param value
     */
    @JvmName("fjqneqakucxqohcl")
    public suspend fun bucketKeyEnabled(`value`: Output) {
        this.bucketKeyEnabled = value
    }

    /**
     * @param value Specifies caching behavior along the request/reply chain Read [w3c cache_control](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9) for further details.
     */
    @JvmName("jtnekeddvnxtyrxo")
    public suspend fun cacheControl(`value`: Output) {
        this.cacheControl = value
    }

    /**
     * @param value Indicates the algorithm used to create the checksum for the object. If a value is specified and the object is encrypted with KMS, you must have permission to use the `kms:Decrypt` action. Valid values: `CRC32`, `CRC32C`, `SHA1`, `SHA256`.
     */
    @JvmName("fulvumejjccnxgba")
    public suspend fun checksumAlgorithm(`value`: Output) {
        this.checksumAlgorithm = value
    }

    /**
     * @param value Specifies presentational information for the object. Read [w3c content_disposition](http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1) for further information.
     */
    @JvmName("lhajikmxurdmgjyj")
    public suspend fun contentDisposition(`value`: Output) {
        this.contentDisposition = value
    }

    /**
     * @param value 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. Read [w3c content encoding](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11) for further information.
     */
    @JvmName("ytgueksurdjjacrm")
    public suspend fun contentEncoding(`value`: Output) {
        this.contentEncoding = value
    }

    /**
     * @param value Language the content is in e.g., en-US or en-GB.
     */
    @JvmName("bcvixwetqugbuybb")
    public suspend fun contentLanguage(`value`: Output) {
        this.contentLanguage = value
    }

    /**
     * @param value Standard MIME type describing the format of the object data, e.g., `application/octet-stream`. All Valid MIME Types are valid for this input.
     */
    @JvmName("fmwijlrjwkamrdpr")
    public suspend fun contentType(`value`: Output) {
        this.contentType = value
    }

    /**
     * @param value Copies the object if its entity tag (ETag) matches the specified tag.
     */
    @JvmName("wvutibjjyxmkdesk")
    public suspend fun copyIfMatch(`value`: Output) {
        this.copyIfMatch = value
    }

    /**
     * @param value Copies the object if it has been modified since the specified time, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8).
     */
    @JvmName("geidfgmdhnakowae")
    public suspend fun copyIfModifiedSince(`value`: Output) {
        this.copyIfModifiedSince = value
    }

    /**
     * @param value Copies the object if its entity tag (ETag) is different than the specified ETag.
     */
    @JvmName("qkmksyddnvwyntmq")
    public suspend fun copyIfNoneMatch(`value`: Output) {
        this.copyIfNoneMatch = value
    }

    /**
     * @param value Copies the object if it hasn't been modified since the specified time, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8).
     */
    @JvmName("vgmhgbjlyljhesby")
    public suspend fun copyIfUnmodifiedSince(`value`: Output) {
        this.copyIfUnmodifiedSince = value
    }

    /**
     * @param value Specifies the algorithm to use to when encrypting the object (for example, AES256).
     */
    @JvmName("uxrtrvrsbkpftsym")
    public suspend fun customerAlgorithm(`value`: Output) {
        this.customerAlgorithm = value
    }

    /**
     * @param value Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon S3 does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side-encryption-customer-algorithm header.
     */
    @JvmName("swmrkrirwriyvvxw")
    public suspend fun customerKey(`value`: Output) {
        this.customerKey = value
    }

    /**
     * @param value 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.
     */
    @JvmName("gamrgvavtcrifxnn")
    public suspend fun customerKeyMd5(`value`: Output) {
        this.customerKeyMd5 = value
    }

    /**
     * @param value Account id of the expected destination bucket owner. If the destination bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
     */
    @JvmName("qsyxqgflnmdpboif")
    public suspend fun expectedBucketOwner(`value`: Output) {
        this.expectedBucketOwner = value
    }

    /**
     * @param value Account id of the expected source bucket owner. If the source bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
     */
    @JvmName("pbloqseyoxsdcoql")
    public suspend fun expectedSourceBucketOwner(`value`: Output) {
        this.expectedSourceBucketOwner = value
    }

    /**
     * @param value Date and time at which the object is no longer cacheable, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8).
     */
    @JvmName("doqejkatweihvcmt")
    public suspend fun expires(`value`: Output) {
        this.expires = value
    }

    /**
     * @param value Allow the object to be deleted by removing any legal hold on any object version. Default is `false`. This value should be set to `true` only if the bucket has S3 object lock enabled.
     */
    @JvmName("lshmopqgihsuaheb")
    public suspend fun forceDestroy(`value`: Output) {
        this.forceDestroy = value
    }

    /**
     * @param value Configuration block for header grants. Documented below. Conflicts with `acl`.
     */
    @JvmName("rhrmnqyfngdpkvcq")
    public suspend fun grants(`value`: Output>) {
        this.grants = value
    }

    @JvmName("vjrdbjxeugrwlfue")
    public suspend fun grants(vararg values: Output) {
        this.grants = Output.all(values.asList())
    }

    /**
     * @param values Configuration block for header grants. Documented below. Conflicts with `acl`.
     */
    @JvmName("ekligjrhbdwnjhgk")
    public suspend fun grants(values: List>) {
        this.grants = Output.all(values)
    }

    /**
     * @param value Name of the object once it is in the bucket.
     */
    @JvmName("lxefmwqtbhmdroem")
    public suspend fun key(`value`: Output) {
        this.key = value
    }

    /**
     * @param value Specifies the AWS KMS Encryption Context to use for object encryption. The value is a base64-encoded UTF-8 string holding JSON with the encryption context key-value pairs.
     */
    @JvmName("gfjsoujgvqahcupf")
    public suspend fun kmsEncryptionContext(`value`: Output) {
        this.kmsEncryptionContext = value
    }

    /**
     * @param value Specifies the AWS KMS Key ARN to use for object encryption. This value is a fully qualified **ARN** of the KMS Key. If using `aws.kms.Key`, use the exported `arn` attribute: `kms_key_id = aws_kms_key.foo.arn`
     */
    @JvmName("jnrqgkggounqduti")
    public suspend fun kmsKeyId(`value`: Output) {
        this.kmsKeyId = value
    }

    /**
     * @param value Map of keys/values to provision metadata (will be automatically prefixed by `x-amz-meta-`, note that only lowercase label are currently supported by the AWS Go API).
     */
    @JvmName("aoyjqidisrqxieib")
    public suspend fun metadata(`value`: Output>) {
        this.metadata = value
    }

    /**
     * @param value Specifies whether the metadata is copied from the source object or replaced with metadata provided in the request. Valid values are `COPY` and `REPLACE`.
     */
    @JvmName("tsjymsbbuvwemnnh")
    public suspend fun metadataDirective(`value`: Output) {
        this.metadataDirective = value
    }

    /**
     * @param value The [legal hold](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-legal-holds) status that you want to apply to the specified object. Valid values are `ON` and `OFF`.
     */
    @JvmName("bybsdunxohrkfudo")
    public suspend fun objectLockLegalHoldStatus(`value`: Output) {
        this.objectLockLegalHoldStatus = value
    }

    /**
     * @param value Object lock [retention mode](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-retention-modes) that you want to apply to this object. Valid values are `GOVERNANCE` and `COMPLIANCE`.
     */
    @JvmName("ulascdvbgravpkaw")
    public suspend fun objectLockMode(`value`: Output) {
        this.objectLockMode = value
    }

    /**
     * @param value Date and time, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8), when this object's object lock will [expire](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-retention-periods).
     */
    @JvmName("qgmgkgimvfpmncgs")
    public suspend fun objectLockRetainUntilDate(`value`: Output) {
        this.objectLockRetainUntilDate = value
    }

    /**
     * @param value Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. For information about downloading objects from requester pays buckets, see Downloading Objects in Requestor Pays Buckets (https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html) in the Amazon S3 Developer Guide. If included, the only valid value is `requester`.
     */
    @JvmName("htrwfsjbkxdykaum")
    public suspend fun requestPayer(`value`: Output) {
        this.requestPayer = value
    }

    /**
     * @param value Specifies server-side encryption of the object in S3. Valid values are `AES256` and `aws:kms`.
     */
    @JvmName("nlnyijwbauglqacv")
    public suspend fun serverSideEncryption(`value`: Output) {
        this.serverSideEncryption = value
    }

    /**
     * @param value Specifies the source object for the copy operation. You specify the value in one of two formats. For objects not accessed through an access point, specify the name of the source bucket and the key of the source object, separated by a slash (`/`). For example, `testbucket/test1.json`. For objects accessed through access points, specify the ARN of the object as accessed through the access point, in the format `arn:aws:s3:::accesspoint//object/`. For example, `arn:aws:s3:us-west-2:9999912999:accesspoint/my-access-point/object/testbucket/test1.json`.
     * The following arguments are optional:
     */
    @JvmName("foapkdoxhsoknpli")
    public suspend fun source(`value`: Output) {
        this.source = value
    }

    /**
     * @param value Specifies the algorithm to use when decrypting the source object (for example, AES256).
     */
    @JvmName("uchcygpihlvxhqix")
    public suspend fun sourceCustomerAlgorithm(`value`: Output) {
        this.sourceCustomerAlgorithm = value
    }

    /**
     * @param value Specifies the customer-provided encryption key for Amazon S3 to use to decrypt the source object. The encryption key provided in this header must be one that was used when the source object was created.
     */
    @JvmName("bmuiardrtgfxtmwn")
    public suspend fun sourceCustomerKey(`value`: Output) {
        this.sourceCustomerKey = value
    }

    /**
     * @param value 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.
     */
    @JvmName("xsxklgugxlgwypfb")
    public suspend fun sourceCustomerKeyMd5(`value`: Output) {
        this.sourceCustomerKeyMd5 = value
    }

    /**
     * @param value Specifies the desired [storage class](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html#AmazonS3-CopyObject-request-header-StorageClass) for the object. Defaults to `STANDARD`.
     */
    @JvmName("truvmlxfaepnnwwd")
    public suspend fun storageClass(`value`: Output) {
        this.storageClass = value
    }

    /**
     * @param value Specifies whether the object tag-set are copied from the source object or replaced with tag-set provided in the request. Valid values are `COPY` and `REPLACE`.
     */
    @JvmName("vgophqixvdcnbqxj")
    public suspend fun taggingDirective(`value`: Output) {
        this.taggingDirective = value
    }

    /**
     * @param value Map of tags to assign to the object. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     */
    @JvmName("wbpfsnfsnjdgmyuw")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    /**
     * @param value Specifies a target URL for [website redirect](http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html).
     */
    @JvmName("eaiorxxyvrblrqku")
    public suspend fun websiteRedirect(`value`: Output) {
        this.websiteRedirect = value
    }

    /**
     * @param value [Canned ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) to apply. Valid values are `private`, `public-read`, `public-read-write`, `authenticated-read`, `aws-exec-read`, `bucket-owner-read`, and `bucket-owner-full-control`. Conflicts with `grant`.
     */
    @JvmName("oeaawoupjrirkfyf")
    public suspend fun acl(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.acl = mapped
    }

    /**
     * @param value Name of the bucket to put the file in.
     */
    @JvmName("vkaicnnwqlfdyyru")
    public suspend fun bucket(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.bucket = mapped
    }

    /**
     * @param value
     */
    @JvmName("qsalavlhxqacnrlw")
    public suspend fun bucketKeyEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.bucketKeyEnabled = mapped
    }

    /**
     * @param value Specifies caching behavior along the request/reply chain Read [w3c cache_control](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9) for further details.
     */
    @JvmName("hakohkqegbxsvvqn")
    public suspend fun cacheControl(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.cacheControl = mapped
    }

    /**
     * @param value Indicates the algorithm used to create the checksum for the object. If a value is specified and the object is encrypted with KMS, you must have permission to use the `kms:Decrypt` action. Valid values: `CRC32`, `CRC32C`, `SHA1`, `SHA256`.
     */
    @JvmName("lohqkkuhqewjtsny")
    public suspend fun checksumAlgorithm(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.checksumAlgorithm = mapped
    }

    /**
     * @param value Specifies presentational information for the object. Read [w3c content_disposition](http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1) for further information.
     */
    @JvmName("voakptdshdhxlhtc")
    public suspend fun contentDisposition(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.contentDisposition = mapped
    }

    /**
     * @param value 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. Read [w3c content encoding](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11) for further information.
     */
    @JvmName("wawkrcawbjghdkxl")
    public suspend fun contentEncoding(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.contentEncoding = mapped
    }

    /**
     * @param value Language the content is in e.g., en-US or en-GB.
     */
    @JvmName("psrtcecryugalwqm")
    public suspend fun contentLanguage(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.contentLanguage = mapped
    }

    /**
     * @param value Standard MIME type describing the format of the object data, e.g., `application/octet-stream`. All Valid MIME Types are valid for this input.
     */
    @JvmName("wwwvfirxijiykale")
    public suspend fun contentType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.contentType = mapped
    }

    /**
     * @param value Copies the object if its entity tag (ETag) matches the specified tag.
     */
    @JvmName("ofjagxpywwvtmmej")
    public suspend fun copyIfMatch(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.copyIfMatch = mapped
    }

    /**
     * @param value Copies the object if it has been modified since the specified time, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8).
     */
    @JvmName("mvfpxyrooscouygj")
    public suspend fun copyIfModifiedSince(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.copyIfModifiedSince = mapped
    }

    /**
     * @param value Copies the object if its entity tag (ETag) is different than the specified ETag.
     */
    @JvmName("fdgdfojupvfogyku")
    public suspend fun copyIfNoneMatch(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.copyIfNoneMatch = mapped
    }

    /**
     * @param value Copies the object if it hasn't been modified since the specified time, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8).
     */
    @JvmName("rtsnmhuwaqxhbxfq")
    public suspend fun copyIfUnmodifiedSince(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.copyIfUnmodifiedSince = mapped
    }

    /**
     * @param value Specifies the algorithm to use to when encrypting the object (for example, AES256).
     */
    @JvmName("rbtmhdmokwokphip")
    public suspend fun customerAlgorithm(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.customerAlgorithm = mapped
    }

    /**
     * @param value Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon S3 does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side-encryption-customer-algorithm header.
     */
    @JvmName("eacbwahktkwlnoyd")
    public suspend fun customerKey(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.customerKey = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("sasmkuatqeteqtga")
    public suspend fun customerKeyMd5(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.customerKeyMd5 = mapped
    }

    /**
     * @param value Account id of the expected destination bucket owner. If the destination bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
     */
    @JvmName("ajluqfplknxjilpy")
    public suspend fun expectedBucketOwner(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.expectedBucketOwner = mapped
    }

    /**
     * @param value Account id of the expected source bucket owner. If the source bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
     */
    @JvmName("saqdxkrebxtrxlhv")
    public suspend fun expectedSourceBucketOwner(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.expectedSourceBucketOwner = mapped
    }

    /**
     * @param value Date and time at which the object is no longer cacheable, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8).
     */
    @JvmName("pycnaqdrjxcxkqew")
    public suspend fun expires(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.expires = mapped
    }

    /**
     * @param value Allow the object to be deleted by removing any legal hold on any object version. Default is `false`. This value should be set to `true` only if the bucket has S3 object lock enabled.
     */
    @JvmName("qknwuajpgmfcoxya")
    public suspend fun forceDestroy(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.forceDestroy = mapped
    }

    /**
     * @param value Configuration block for header grants. Documented below. Conflicts with `acl`.
     */
    @JvmName("owsqnxrtpwlnyxoh")
    public suspend fun grants(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.grants = mapped
    }

    /**
     * @param argument Configuration block for header grants. Documented below. Conflicts with `acl`.
     */
    @JvmName("rictxjxucxblafeo")
    public suspend fun grants(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ObjectCopyGrantArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.grants = mapped
    }

    /**
     * @param argument Configuration block for header grants. Documented below. Conflicts with `acl`.
     */
    @JvmName("daqdtydfhngsvjlo")
    public suspend fun grants(vararg argument: suspend ObjectCopyGrantArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ObjectCopyGrantArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.grants = mapped
    }

    /**
     * @param argument Configuration block for header grants. Documented below. Conflicts with `acl`.
     */
    @JvmName("udylyhwqepmxkduc")
    public suspend fun grants(argument: suspend ObjectCopyGrantArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(ObjectCopyGrantArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.grants = mapped
    }

    /**
     * @param values Configuration block for header grants. Documented below. Conflicts with `acl`.
     */
    @JvmName("aecilnkwdxmexbel")
    public suspend fun grants(vararg values: ObjectCopyGrantArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.grants = mapped
    }

    /**
     * @param value Name of the object once it is in the bucket.
     */
    @JvmName("prjfbixjukaymybq")
    public suspend fun key(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.key = mapped
    }

    /**
     * @param value Specifies the AWS KMS Encryption Context to use for object encryption. The value is a base64-encoded UTF-8 string holding JSON with the encryption context key-value pairs.
     */
    @JvmName("rimuhxybmsbfeudx")
    public suspend fun kmsEncryptionContext(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.kmsEncryptionContext = mapped
    }

    /**
     * @param value Specifies the AWS KMS Key ARN to use for object encryption. This value is a fully qualified **ARN** of the KMS Key. If using `aws.kms.Key`, use the exported `arn` attribute: `kms_key_id = aws_kms_key.foo.arn`
     */
    @JvmName("yinfplrsffohkmpt")
    public suspend fun kmsKeyId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.kmsKeyId = mapped
    }

    /**
     * @param value Map of keys/values to provision metadata (will be automatically prefixed by `x-amz-meta-`, note that only lowercase label are currently supported by the AWS Go API).
     */
    @JvmName("nqdpvxknjforqwpy")
    public suspend fun metadata(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.metadata = mapped
    }

    /**
     * @param values Map of keys/values to provision metadata (will be automatically prefixed by `x-amz-meta-`, note that only lowercase label are currently supported by the AWS Go API).
     */
    @JvmName("jhvjayvbdrhfbfky")
    public fun metadata(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.metadata = mapped
    }

    /**
     * @param value Specifies whether the metadata is copied from the source object or replaced with metadata provided in the request. Valid values are `COPY` and `REPLACE`.
     */
    @JvmName("wlwrinjxaqqaitxv")
    public suspend fun metadataDirective(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.metadataDirective = mapped
    }

    /**
     * @param value The [legal hold](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-legal-holds) status that you want to apply to the specified object. Valid values are `ON` and `OFF`.
     */
    @JvmName("husdtayjjxtmyojb")
    public suspend fun objectLockLegalHoldStatus(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.objectLockLegalHoldStatus = mapped
    }

    /**
     * @param value Object lock [retention mode](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-retention-modes) that you want to apply to this object. Valid values are `GOVERNANCE` and `COMPLIANCE`.
     */
    @JvmName("pmhhckjggyjskmqw")
    public suspend fun objectLockMode(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.objectLockMode = mapped
    }

    /**
     * @param value Date and time, in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8), when this object's object lock will [expire](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html#object-lock-retention-periods).
     */
    @JvmName("lxwharrejhtwhdxw")
    public suspend fun objectLockRetainUntilDate(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.objectLockRetainUntilDate = mapped
    }

    /**
     * @param value Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. For information about downloading objects from requester pays buckets, see Downloading Objects in Requestor Pays Buckets (https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html) in the Amazon S3 Developer Guide. If included, the only valid value is `requester`.
     */
    @JvmName("cmooenbbxnphjhho")
    public suspend fun requestPayer(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.requestPayer = mapped
    }

    /**
     * @param value Specifies server-side encryption of the object in S3. Valid values are `AES256` and `aws:kms`.
     */
    @JvmName("tbpxneivaaxxboxh")
    public suspend fun serverSideEncryption(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.serverSideEncryption = mapped
    }

    /**
     * @param value Specifies the source object for the copy operation. You specify the value in one of two formats. For objects not accessed through an access point, specify the name of the source bucket and the key of the source object, separated by a slash (`/`). For example, `testbucket/test1.json`. For objects accessed through access points, specify the ARN of the object as accessed through the access point, in the format `arn:aws:s3:::accesspoint//object/`. For example, `arn:aws:s3:us-west-2:9999912999:accesspoint/my-access-point/object/testbucket/test1.json`.
     * The following arguments are optional:
     */
    @JvmName("vtrwtxbprvgeudeu")
    public suspend fun source(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.source = mapped
    }

    /**
     * @param value Specifies the algorithm to use when decrypting the source object (for example, AES256).
     */
    @JvmName("htpjihaohbvtohig")
    public suspend fun sourceCustomerAlgorithm(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sourceCustomerAlgorithm = mapped
    }

    /**
     * @param value Specifies the customer-provided encryption key for Amazon S3 to use to decrypt the source object. The encryption key provided in this header must be one that was used when the source object was created.
     */
    @JvmName("enoruldxksnxuifk")
    public suspend fun sourceCustomerKey(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sourceCustomerKey = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("ucmrcnxfhookdbkn")
    public suspend fun sourceCustomerKeyMd5(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sourceCustomerKeyMd5 = mapped
    }

    /**
     * @param value Specifies the desired [storage class](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html#AmazonS3-CopyObject-request-header-StorageClass) for the object. Defaults to `STANDARD`.
     */
    @JvmName("rcxsvycpsfmqpjeb")
    public suspend fun storageClass(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.storageClass = mapped
    }

    /**
     * @param value Specifies whether the object tag-set are copied from the source object or replaced with tag-set provided in the request. Valid values are `COPY` and `REPLACE`.
     */
    @JvmName("wqleavunihjopihh")
    public suspend fun taggingDirective(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.taggingDirective = mapped
    }

    /**
     * @param value Map of tags to assign to the object. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     */
    @JvmName("vogvqirctpgxcvdr")
    public suspend fun tags(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param values Map of tags to assign to the object. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     */
    @JvmName("kyagykwlybdtltaa")
    public fun tags(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value Specifies a target URL for [website redirect](http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html).
     */
    @JvmName("smmkssgnpnqgjhgj")
    public suspend fun websiteRedirect(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.websiteRedirect = mapped
    }

    internal fun build(): ObjectCopyArgs = ObjectCopyArgs(
        acl = acl,
        bucket = bucket,
        bucketKeyEnabled = bucketKeyEnabled,
        cacheControl = cacheControl,
        checksumAlgorithm = checksumAlgorithm,
        contentDisposition = contentDisposition,
        contentEncoding = contentEncoding,
        contentLanguage = contentLanguage,
        contentType = contentType,
        copyIfMatch = copyIfMatch,
        copyIfModifiedSince = copyIfModifiedSince,
        copyIfNoneMatch = copyIfNoneMatch,
        copyIfUnmodifiedSince = copyIfUnmodifiedSince,
        customerAlgorithm = customerAlgorithm,
        customerKey = customerKey,
        customerKeyMd5 = customerKeyMd5,
        expectedBucketOwner = expectedBucketOwner,
        expectedSourceBucketOwner = expectedSourceBucketOwner,
        expires = expires,
        forceDestroy = forceDestroy,
        grants = grants,
        key = key,
        kmsEncryptionContext = kmsEncryptionContext,
        kmsKeyId = kmsKeyId,
        metadata = metadata,
        metadataDirective = metadataDirective,
        objectLockLegalHoldStatus = objectLockLegalHoldStatus,
        objectLockMode = objectLockMode,
        objectLockRetainUntilDate = objectLockRetainUntilDate,
        requestPayer = requestPayer,
        serverSideEncryption = serverSideEncryption,
        source = source,
        sourceCustomerAlgorithm = sourceCustomerAlgorithm,
        sourceCustomerKey = sourceCustomerKey,
        sourceCustomerKeyMd5 = sourceCustomerKeyMd5,
        storageClass = storageClass,
        taggingDirective = taggingDirective,
        tags = tags,
        websiteRedirect = websiteRedirect,
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy