"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.CfnTieringConfigurationPropsMixin = exports.CfnRestoreTestingSelectionPropsMixin = exports.CfnRestoreTestingPlanPropsMixin = exports.CfnLogicallyAirGappedBackupVaultPropsMixin = exports.CfnReportPlanPropsMixin = exports.CfnFrameworkPropsMixin = exports.CfnBackupVaultPropsMixin = exports.CfnBackupSelectionPropsMixin = exports.CfnBackupPlanPropsMixin = 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-backup"));
/**
 * Contains an optional backup plan display name and an array of `BackupRule` objects, each of which specifies a backup rule.
 *
 * Each rule in a backup plan is a separate scheduled task and can back up a different selection of AWS resources.
 *
 * For a sample CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#assigning-resources-cfn) .
 *
 * @cloudformationResource AWS::Backup::BackupPlan
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupplan.html
 */
class CfnBackupPlanPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_backup.CfnBackupPlanPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["backupPlan", "backupPlanTags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Backup::BackupPlan`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_backup_CfnBackupPlanMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnBackupPlanPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnBackupPlanMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnBackupPlan.isCfnBackupPlan(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnBackupPlanPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnBackupPlanPropsMixin = CfnBackupPlanPropsMixin;
// @ts-ignore TS6133
function flattenCfnBackupPlanPropsMixinCopyActionResourceTypeProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        destinationBackupVaultArn: (!props.destinationBackupVaultArn ? undefined : cdk.getRefProperty(props.destinationBackupVaultArn?.backupVaultRef, 'backupVaultArn') ?? cdk.ensureStringOrUndefined(props.destinationBackupVaultArn, "destinationBackupVaultArn", "backup.IBackupVaultRef | string")),
        lifecycle: (!props.lifecycle ? undefined : props.lifecycle)
    };
}
// @ts-ignore TS6133
function flattenCfnBackupPlanPropsMixinBackupRuleResourceTypeProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        completionWindowMinutes: (!props.completionWindowMinutes ? undefined : props.completionWindowMinutes),
        copyActions: (!props.copyActions ? undefined : (cdk.isResolvableObject(props.copyActions) ? props.copyActions : (!props.copyActions ? undefined : cdk.mapArrayInPlace(props.copyActions, (item) => flattenCfnBackupPlanPropsMixinCopyActionResourceTypeProperty(item))))),
        enableContinuousBackup: (!props.enableContinuousBackup ? undefined : props.enableContinuousBackup),
        indexActions: (!props.indexActions ? undefined : props.indexActions),
        lifecycle: (!props.lifecycle ? undefined : props.lifecycle),
        recoveryPointTags: (!props.recoveryPointTags ? undefined : props.recoveryPointTags),
        ruleName: (!props.ruleName ? undefined : props.ruleName),
        scanActions: (!props.scanActions ? undefined : props.scanActions),
        scheduleExpression: (!props.scheduleExpression ? undefined : props.scheduleExpression),
        scheduleExpressionTimezone: (!props.scheduleExpressionTimezone ? undefined : props.scheduleExpressionTimezone),
        startWindowMinutes: (!props.startWindowMinutes ? undefined : props.startWindowMinutes),
        targetBackupVault: (!props.targetBackupVault ? undefined : cdk.getRefProperty(props.targetBackupVault?.backupVaultRef, 'backupVaultName') ?? cdk.ensureStringOrUndefined(props.targetBackupVault, "targetBackupVault", "backup.IBackupVaultRef | string")),
        targetLogicallyAirGappedBackupVaultArn: (!props.targetLogicallyAirGappedBackupVaultArn ? undefined : props.targetLogicallyAirGappedBackupVaultArn)
    };
}
// @ts-ignore TS6133
function flattenCfnBackupPlanPropsMixinBackupPlanResourceTypeProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        advancedBackupSettings: (!props.advancedBackupSettings ? undefined : props.advancedBackupSettings),
        backupPlanName: (!props.backupPlanName ? undefined : props.backupPlanName),
        backupPlanRule: (!props.backupPlanRule ? undefined : (cdk.isResolvableObject(props.backupPlanRule) ? props.backupPlanRule : cdk.mapArrayInPlace(props.backupPlanRule, (item) => flattenCfnBackupPlanPropsMixinBackupRuleResourceTypeProperty(item)))),
        scanSettings: (!props.scanSettings ? undefined : props.scanSettings)
    };
}
// @ts-ignore TS6133
function flattenCfnBackupPlanMixinProps(props) {
    const ret = {};
    if ((props.backupPlan !== undefined))
        ret.backupPlan = flattenCfnBackupPlanPropsMixinBackupPlanResourceTypeProperty(props.backupPlan);
    return ret;
}
/**
 * Specifies a set of resources to assign to a backup plan.
 *
 * For a sample CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#assigning-resources-cfn) .
 *
 * @cloudformationResource AWS::Backup::BackupSelection
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupselection.html
 */
class CfnBackupSelectionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_backup.CfnBackupSelectionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["backupPlanId", "backupSelection"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Backup::BackupSelection`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_backup_CfnBackupSelectionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnBackupSelectionPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnBackupSelectionMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnBackupSelection.isCfnBackupSelection(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnBackupSelectionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnBackupSelectionPropsMixin = CfnBackupSelectionPropsMixin;
// @ts-ignore TS6133
function flattenCfnBackupSelectionPropsMixinBackupSelectionResourceTypeProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        conditions: (!props.conditions ? undefined : props.conditions),
        iamRoleArn: (!props.iamRoleArn ? undefined : cdk.getRefProperty(props.iamRoleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.iamRoleArn, "iamRoleArn", "iam.IRoleRef | string")),
        listOfTags: (!props.listOfTags ? undefined : props.listOfTags),
        notResources: (!props.notResources ? undefined : props.notResources),
        resources: (!props.resources ? undefined : cdk.mapArrayInPlace(props.resources, (item) => cdk.getRefProperty(item?.tableRef, 'tableArn') ?? cdk.getRefProperty(item?.bucketRef, 'bucketArn') ?? cdk.ensureStringOrUndefined(item, "resources", "dynamodb.ITableRef | s3.IBucketRef | string"))),
        selectionName: (!props.selectionName ? undefined : props.selectionName)
    };
}
// @ts-ignore TS6133
function flattenCfnBackupSelectionMixinProps(props) {
    const ret = {};
    if ((props.backupPlanId !== undefined))
        ret.backupPlanId = cdk.getRefProperty(props.backupPlanId?.backupPlanRef, 'backupPlanId') ?? cdk.ensureStringOrUndefined(props.backupPlanId, "backupPlanId", "backup.IBackupPlanRef | string");
    if ((props.backupSelection !== undefined))
        ret.backupSelection = flattenCfnBackupSelectionPropsMixinBackupSelectionResourceTypeProperty(props.backupSelection);
    return ret;
}
/**
 * Creates a logical container where backups are stored.
 *
 * A `CreateBackupVault` request includes a name, optionally one or more resource tags, an encryption key, and a request ID.
 *
 * Do not include sensitive data, such as passport numbers, in the name of a backup vault.
 *
 * For a sample CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#assigning-resources-cfn) .
 *
 * @cloudformationResource AWS::Backup::BackupVault
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-backupvault.html
 */
class CfnBackupVaultPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_backup.CfnBackupVaultPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["accessPolicy", "backupVaultName", "backupVaultTags", "encryptionKeyArn", "lockConfiguration", "notifications"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Backup::BackupVault`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_backup_CfnBackupVaultMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnBackupVaultPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnBackupVaultMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnBackupVault.isCfnBackupVault(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnBackupVaultPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnBackupVaultPropsMixin = CfnBackupVaultPropsMixin;
// @ts-ignore TS6133
function flattenCfnBackupVaultPropsMixinNotificationObjectTypeProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        backupVaultEvents: (!props.backupVaultEvents ? undefined : props.backupVaultEvents),
        snsTopicArn: (!props.snsTopicArn ? undefined : cdk.getRefProperty(props.snsTopicArn?.topicRef, 'topicArn') ?? cdk.ensureStringOrUndefined(props.snsTopicArn, "snsTopicArn", "sns.ITopicRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnBackupVaultMixinProps(props) {
    const ret = {};
    if ((props.encryptionKeyArn !== undefined))
        ret.encryptionKeyArn = cdk.getRefProperty(props.encryptionKeyArn?.keyRef, 'keyArn') ?? cdk.ensureStringOrUndefined(props.encryptionKeyArn, "encryptionKeyArn", "kms.IKeyRef | string");
    if ((props.notifications !== undefined))
        ret.notifications = flattenCfnBackupVaultPropsMixinNotificationObjectTypeProperty(props.notifications);
    return ret;
}
/**
 * Creates a framework with one or more controls.
 *
 * A framework is a collection of controls that you can use to evaluate your backup practices. By using pre-built customizable controls to define your policies, you can evaluate whether your backup practices comply with your policies and which resources are not yet in compliance.
 *
 * For a sample CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/bam-cfn-integration.html#bam-cfn-frameworks-template) .
 *
 * @cloudformationResource AWS::Backup::Framework
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-framework.html
 */
class CfnFrameworkPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_backup.CfnFrameworkPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["frameworkControls", "frameworkDescription", "frameworkName", "frameworkTags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Backup::Framework`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_backup_CfnFrameworkMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnFrameworkPropsMixin);
            }
            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.CfnFramework.isCfnFramework(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnFrameworkPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnFrameworkPropsMixin = CfnFrameworkPropsMixin;
/**
 * Creates a report plan.
 *
 * A report plan is a document that contains information about the contents of the report and where AWS Backup will deliver it.
 *
 * If you call `CreateReportPlan` with a plan that already exists, you receive an `AlreadyExistsException` exception.
 *
 * For a sample CloudFormation template, see the [AWS Backup Developer Guide](https://docs.aws.amazon.com/aws-backup/latest/devguide/assigning-resources.html#assigning-resources-cfn) .
 *
 * @cloudformationResource AWS::Backup::ReportPlan
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-reportplan.html
 */
class CfnReportPlanPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_backup.CfnReportPlanPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["reportDeliveryChannel", "reportPlanDescription", "reportPlanName", "reportPlanTags", "reportSetting"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Backup::ReportPlan`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_backup_CfnReportPlanMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnReportPlanPropsMixin);
            }
            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.CfnReportPlan.isCfnReportPlan(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnReportPlanPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnReportPlanPropsMixin = CfnReportPlanPropsMixin;
/**
 * Creates a logical container to where backups may be copied.
 *
 * This request includes a name, the Region, the maximum number of retention days, the minimum number of retention days, and optionally can include tags and a creator request ID.
 *
 * > Do not include sensitive data, such as passport numbers, in the name of a backup vault.
 *
 * @cloudformationResource AWS::Backup::LogicallyAirGappedBackupVault
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-logicallyairgappedbackupvault.html
 */
class CfnLogicallyAirGappedBackupVaultPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_backup.CfnLogicallyAirGappedBackupVaultPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["accessPolicy", "backupVaultName", "backupVaultTags", "encryptionKeyArn", "maxRetentionDays", "minRetentionDays", "mpaApprovalTeamArn", "notifications"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Backup::LogicallyAirGappedBackupVault`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_backup_CfnLogicallyAirGappedBackupVaultMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLogicallyAirGappedBackupVaultPropsMixin);
            }
            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.CfnLogicallyAirGappedBackupVault.isCfnLogicallyAirGappedBackupVault(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLogicallyAirGappedBackupVaultPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLogicallyAirGappedBackupVaultPropsMixin = CfnLogicallyAirGappedBackupVaultPropsMixin;
/**
 * Creates a restore testing plan.
 *
 * The first of two steps to create a restore testing plan. After this request is successful, finish the procedure using CreateRestoreTestingSelection.
 *
 * @cloudformationResource AWS::Backup::RestoreTestingPlan
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingplan.html
 */
class CfnRestoreTestingPlanPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_backup.CfnRestoreTestingPlanPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["recoveryPointSelection", "restoreTestingPlanName", "scheduleExpression", "scheduleExpressionTimezone", "startWindowHours", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Backup::RestoreTestingPlan`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_backup_CfnRestoreTestingPlanMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnRestoreTestingPlanPropsMixin);
            }
            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.CfnRestoreTestingPlan.isCfnRestoreTestingPlan(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnRestoreTestingPlanPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnRestoreTestingPlanPropsMixin = CfnRestoreTestingPlanPropsMixin;
/**
 * This request can be sent after CreateRestoreTestingPlan request returns successfully.
 *
 * This is the second part of creating a resource testing plan, and it must be completed sequentially.
 *
 * This consists of `RestoreTestingSelectionName` , `ProtectedResourceType` , and one of the following:
 *
 * - `ProtectedResourceArns`
 * - `ProtectedResourceConditions`
 *
 * Each protected resource type can have one single value.
 *
 * A restore testing selection can include a wildcard value ("*") for `ProtectedResourceArns` along with `ProtectedResourceConditions` . Alternatively, you can include up to 30 specific protected resource ARNs in `ProtectedResourceArns` .
 *
 * Cannot select by both protected resource types AND specific ARNs. Request will fail if both are included.
 *
 * @cloudformationResource AWS::Backup::RestoreTestingSelection
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-restoretestingselection.html
 */
class CfnRestoreTestingSelectionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_backup.CfnRestoreTestingSelectionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["iamRoleArn", "protectedResourceArns", "protectedResourceConditions", "protectedResourceType", "restoreMetadataOverrides", "restoreTestingPlanName", "restoreTestingSelectionName", "validationWindowHours"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Backup::RestoreTestingSelection`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_backup_CfnRestoreTestingSelectionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnRestoreTestingSelectionPropsMixin);
            }
            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.CfnRestoreTestingSelection.isCfnRestoreTestingSelection(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnRestoreTestingSelectionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnRestoreTestingSelectionPropsMixin = CfnRestoreTestingSelectionPropsMixin;
/**
 * Resource Type definition for AWS::Backup::TieringConfiguration.
 *
 * @cloudformationResource AWS::Backup::TieringConfiguration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-backup-tieringconfiguration.html
 */
class CfnTieringConfigurationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_backup.CfnTieringConfigurationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["backupVaultName", "resourceSelection", "tieringConfigurationName", "tieringConfigurationTags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Backup::TieringConfiguration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_backup_CfnTieringConfigurationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnTieringConfigurationPropsMixin);
            }
            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.CfnTieringConfiguration.isCfnTieringConfiguration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnTieringConfigurationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnTieringConfigurationPropsMixin = CfnTieringConfigurationPropsMixin;
