"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
    var ownKeys = function(o) {
        ownKeys = Object.getOwnPropertyNames || function (o) {
            var ar = [];
            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
            return ar;
        };
        return ownKeys(o);
    };
    return function (mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
        __setModuleDefault(result, mod);
        return result;
    };
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnTaskPropsMixin = exports.CfnLocationSMBPropsMixin = exports.CfnLocationS3PropsMixin = exports.CfnLocationObjectStoragePropsMixin = exports.CfnLocationNFSPropsMixin = exports.CfnLocationHDFSPropsMixin = exports.CfnLocationFSxWindowsPropsMixin = exports.CfnLocationFSxOpenZFSPropsMixin = exports.CfnLocationFSxONTAPPropsMixin = exports.CfnLocationFSxLustrePropsMixin = exports.CfnLocationEFSPropsMixin = exports.CfnLocationAzureBlobPropsMixin = exports.CfnAgentPropsMixin = void 0;
const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/* eslint-disable @stylistic/max-len, eol-last */
const cdk = __importStar(require("aws-cdk-lib/core"));
const service = __importStar(require("aws-cdk-lib/aws-datasync"));
/**
 * The `AWS::DataSync::Agent` resource activates an AWS DataSync agent that you've deployed for storage discovery or data transfers.
 *
 * The activation process associates the agent with your AWS account .
 *
 * For more information, see the following topics in the *AWS DataSync User Guide* :
 *
 * - [DataSync agent requirements](https://docs.aws.amazon.com/datasync/latest/userguide/agent-requirements.html)
 * - [DataSync network requirements](https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html)
 * - [Create a DataSync agent](https://docs.aws.amazon.com/datasync/latest/userguide/configure-agent.html)
 *
 * @cloudformationResource AWS::DataSync::Agent
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-agent.html
 */
class CfnAgentPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnAgentPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["activationKey", "agentName", "securityGroupArns", "subnetArns", "tags", "vpcEndpointId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::Agent`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnAgentMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnAgentPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnAgent.isCfnAgent(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnAgentPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnAgentPropsMixin = CfnAgentPropsMixin;
/**
 * Creates a transfer *location* for a Microsoft Azure Blob Storage container.
 *
 * AWS DataSync can use this location as a transfer source or destination. You can make transfers with or without a [DataSync agent](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-creating-agent) that connects to your container.
 *
 * Before you begin, make sure you know [how DataSync accesses Azure Blob Storage](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access) and works with [access tiers](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access-tiers) and [blob types](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#blob-types) .
 *
 * @cloudformationResource AWS::DataSync::LocationAzureBlob
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationazureblob.html
 */
class CfnLocationAzureBlobPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationAzureBlobPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["agentArns", "azureAccessTier", "azureBlobAuthenticationType", "azureBlobContainerUrl", "azureBlobSasConfiguration", "azureBlobType", "cmkSecretConfig", "customSecretConfig", "subdirectory", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationAzureBlob`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationAzureBlobMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationAzureBlobPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationAzureBlob.isCfnLocationAzureBlob(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationAzureBlobPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationAzureBlobPropsMixin = CfnLocationAzureBlobPropsMixin;
/**
 * The `AWS::DataSync::LocationEFS` resource creates an endpoint for an Amazon EFS file system.
 *
 * AWS DataSync can access this endpoint as a source or destination location.
 *
 * @cloudformationResource AWS::DataSync::LocationEFS
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationefs.html
 */
class CfnLocationEFSPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationEFSPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["accessPointArn", "ec2Config", "efsFilesystemArn", "fileSystemAccessRoleArn", "inTransitEncryption", "subdirectory", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationEFS`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationEFSMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationEFSPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnLocationEFSMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationEFS.isCfnLocationEFS(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationEFSPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationEFSPropsMixin = CfnLocationEFSPropsMixin;
// @ts-ignore TS6133
function flattenCfnLocationEFSMixinProps(props) {
    const ret = {};
    if ((props.efsFilesystemArn !== undefined))
        ret.efsFilesystemArn = cdk.getRefProperty(props.efsFilesystemArn?.fileSystemRef, 'fileSystemArn') ?? cdk.ensureStringOrUndefined(props.efsFilesystemArn, "efsFilesystemArn", "efs.IFileSystemRef | string");
    return ret;
}
/**
 * The `AWS::DataSync::LocationFSxLustre` resource specifies an endpoint for an Amazon FSx for Lustre file system.
 *
 * @cloudformationResource AWS::DataSync::LocationFSxLustre
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxlustre.html
 */
class CfnLocationFSxLustrePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationFSxLustrePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["fsxFilesystemArn", "securityGroupArns", "subdirectory", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationFSxLustre`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationFSxLustreMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationFSxLustrePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationFSxLustre.isCfnLocationFSxLustre(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationFSxLustrePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationFSxLustrePropsMixin = CfnLocationFSxLustrePropsMixin;
/**
 * The `AWS::DataSync::LocationFSxONTAP` resource creates an endpoint for an Amazon FSx for NetApp ONTAP file system.
 *
 * AWS DataSync can access this endpoint as a source or destination location.
 *
 * @cloudformationResource AWS::DataSync::LocationFSxONTAP
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxontap.html
 */
class CfnLocationFSxONTAPPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationFSxONTAPPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["protocol", "securityGroupArns", "storageVirtualMachineArn", "subdirectory", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationFSxONTAP`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationFSxONTAPMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationFSxONTAPPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationFSxONTAP.isCfnLocationFSxONTAP(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationFSxONTAPPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationFSxONTAPPropsMixin = CfnLocationFSxONTAPPropsMixin;
/**
 * The `AWS::DataSync::LocationFSxOpenZFS` resource specifies an endpoint for an Amazon FSx for OpenZFS file system.
 *
 * @cloudformationResource AWS::DataSync::LocationFSxOpenZFS
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxopenzfs.html
 */
class CfnLocationFSxOpenZFSPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationFSxOpenZFSPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["fsxFilesystemArn", "protocol", "securityGroupArns", "subdirectory", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationFSxOpenZFS`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationFSxOpenZFSMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationFSxOpenZFSPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationFSxOpenZFS.isCfnLocationFSxOpenZFS(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationFSxOpenZFSPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationFSxOpenZFSPropsMixin = CfnLocationFSxOpenZFSPropsMixin;
/**
 * The `AWS::DataSync::LocationFSxWindows` resource specifies an endpoint for an Amazon FSx for Windows Server file system.
 *
 * @cloudformationResource AWS::DataSync::LocationFSxWindows
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationfsxwindows.html
 */
class CfnLocationFSxWindowsPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationFSxWindowsPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["cmkSecretConfig", "customSecretConfig", "domain", "fsxFilesystemArn", "password", "securityGroupArns", "subdirectory", "tags", "user"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationFSxWindows`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationFSxWindowsMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationFSxWindowsPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationFSxWindows.isCfnLocationFSxWindows(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationFSxWindowsPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationFSxWindowsPropsMixin = CfnLocationFSxWindowsPropsMixin;
/**
 * The `AWS::DataSync::LocationHDFS` resource specifies an endpoint for a Hadoop Distributed File System (HDFS).
 *
 * @cloudformationResource AWS::DataSync::LocationHDFS
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationhdfs.html
 */
class CfnLocationHDFSPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationHDFSPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["agentArns", "authenticationType", "blockSize", "cmkSecretConfig", "customSecretConfig", "kerberosKeytab", "kerberosKrb5Conf", "kerberosPrincipal", "kmsKeyProviderUri", "nameNodes", "qopConfiguration", "replicationFactor", "simpleUser", "subdirectory", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationHDFS`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationHDFSMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationHDFSPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationHDFS.isCfnLocationHDFS(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationHDFSPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationHDFSPropsMixin = CfnLocationHDFSPropsMixin;
/**
 * The `AWS::DataSync::LocationNFS` resource specifies a Network File System (NFS) file server that AWS DataSync can use as a transfer source or destination.
 *
 * @cloudformationResource AWS::DataSync::LocationNFS
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationnfs.html
 */
class CfnLocationNFSPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationNFSPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["mountOptions", "onPremConfig", "serverHostname", "subdirectory", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationNFS`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationNFSMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationNFSPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnLocationNFSMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationNFS.isCfnLocationNFS(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationNFSPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationNFSPropsMixin = CfnLocationNFSPropsMixin;
// @ts-ignore TS6133
function flattenCfnLocationNFSPropsMixinOnPremConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        agentArns: (!props.agentArns ? undefined : cdk.mapArrayInPlace(props.agentArns, (item) => cdk.getRefProperty(item?.agentRef, 'agentArn') ?? cdk.ensureStringOrUndefined(item, "agentArns", "datasync.IAgentRef | string")))
    };
}
// @ts-ignore TS6133
function flattenCfnLocationNFSMixinProps(props) {
    const ret = {};
    if ((props.onPremConfig !== undefined))
        ret.onPremConfig = flattenCfnLocationNFSPropsMixinOnPremConfigProperty(props.onPremConfig);
    if ((props.serverHostname !== undefined))
        ret.serverHostname = props.serverHostname;
    return ret;
}
/**
 * The `AWS::DataSync::LocationObjectStorage` resource specifies an endpoint for a self-managed object storage bucket.
 *
 * For more information about self-managed object storage locations, see [Creating a Location for Object Storage](https://docs.aws.amazon.com/datasync/latest/userguide/create-object-location.html) .
 *
 * @cloudformationResource AWS::DataSync::LocationObjectStorage
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationobjectstorage.html
 */
class CfnLocationObjectStoragePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationObjectStoragePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["accessKey", "agentArns", "bucketName", "cmkSecretConfig", "customSecretConfig", "secretKey", "serverCertificate", "serverHostname", "serverPort", "serverProtocol", "subdirectory", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationObjectStorage`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationObjectStorageMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationObjectStoragePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationObjectStorage.isCfnLocationObjectStorage(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationObjectStoragePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationObjectStoragePropsMixin = CfnLocationObjectStoragePropsMixin;
/**
 * The `AWS::DataSync::LocationS3` resource specifies an endpoint for an Amazon S3 bucket.
 *
 * For more information, see the [*AWS DataSync User Guide*](https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html) .
 *
 * @cloudformationResource AWS::DataSync::LocationS3
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locations3.html
 */
class CfnLocationS3PropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationS3PropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["s3BucketArn", "s3Config", "s3StorageClass", "subdirectory", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationS3`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationS3MixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationS3PropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnLocationS3MixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationS3.isCfnLocationS3(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationS3PropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationS3PropsMixin = CfnLocationS3PropsMixin;
// @ts-ignore TS6133
function flattenCfnLocationS3PropsMixinS3ConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        bucketAccessRoleArn: (!props.bucketAccessRoleArn ? undefined : cdk.getRefProperty(props.bucketAccessRoleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.bucketAccessRoleArn, "bucketAccessRoleArn", "iam.IRoleRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnLocationS3MixinProps(props) {
    const ret = {};
    if ((props.s3BucketArn !== undefined))
        ret.s3BucketArn = cdk.getRefProperty(props.s3BucketArn?.bucketRef, 'bucketArn') ?? cdk.ensureStringOrUndefined(props.s3BucketArn, "s3BucketArn", "s3.IBucketRef | string");
    if ((props.s3Config !== undefined))
        ret.s3Config = flattenCfnLocationS3PropsMixinS3ConfigProperty(props.s3Config);
    return ret;
}
/**
 * The `AWS::DataSync::LocationSMB` resource specifies a Server Message Block (SMB) location that AWS DataSync can use as a transfer source or destination.
 *
 * @cloudformationResource AWS::DataSync::LocationSMB
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-locationsmb.html
 */
class CfnLocationSMBPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnLocationSMBPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["agentArns", "authenticationType", "cmkSecretConfig", "customSecretConfig", "dnsIpAddresses", "domain", "kerberosKeytab", "kerberosKrb5Conf", "kerberosPrincipal", "mountOptions", "password", "serverHostname", "subdirectory", "tags", "user"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::LocationSMB`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnLocationSMBMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLocationSMBPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLocationSMB.isCfnLocationSMB(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLocationSMBPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLocationSMBPropsMixin = CfnLocationSMBPropsMixin;
/**
 * The `AWS::DataSync::Task` resource specifies a task.
 *
 * A task is a set of two locations (source and destination) and a set of `Options` that you use to control the behavior of a task. If you don't specify `Options` when you create a task, AWS DataSync populates them with service defaults.
 *
 * @cloudformationResource AWS::DataSync::Task
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-datasync-task.html
 */
class CfnTaskPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_datasync.CfnTaskPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["cloudWatchLogGroupArn", "destinationLocationArn", "excludes", "includes", "manifestConfig", "name", "options", "schedule", "sourceLocationArn", "tags", "taskMode", "taskReportConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::DataSync::Task`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_datasync_CfnTaskMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnTaskPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnTaskMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnTask.isCfnTask(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnTaskPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnTaskPropsMixin = CfnTaskPropsMixin;
// @ts-ignore TS6133
function flattenCfnTaskMixinProps(props) {
    const ret = {};
    if ((props.cloudWatchLogGroupArn !== undefined))
        ret.cloudWatchLogGroupArn = cdk.getRefProperty(props.cloudWatchLogGroupArn?.logGroupRef, 'logGroupArn') ?? cdk.ensureStringOrUndefined(props.cloudWatchLogGroupArn, "cloudWatchLogGroupArn", "logs.ILogGroupRef | string");
    if ((props.destinationLocationArn !== undefined))
        ret.destinationLocationArn = cdk.getRefProperty(props.destinationLocationArn?.locationEfsRef, 'locationArn') ?? cdk.getRefProperty(props.destinationLocationArn?.locationS3Ref, 'locationArn') ?? cdk.ensureStringOrUndefined(props.destinationLocationArn, "destinationLocationArn", "datasync.ILocationEFSRef | datasync.ILocationS3Ref | string");
    if ((props.sourceLocationArn !== undefined))
        ret.sourceLocationArn = cdk.getRefProperty(props.sourceLocationArn?.locationS3Ref, 'locationArn') ?? cdk.getRefProperty(props.sourceLocationArn?.locationNfsRef, 'locationArn') ?? cdk.ensureStringOrUndefined(props.sourceLocationArn, "sourceLocationArn", "datasync.ILocationS3Ref | datasync.ILocationNFSRef | string");
    return ret;
}
