"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.CfnTopicPropsMixin = exports.CfnReplicatorPropsMixin = exports.CfnVpcConnectionPropsMixin = exports.CfnServerlessClusterPropsMixin = exports.CfnConfigurationPropsMixin = exports.CfnClusterPolicyPropsMixin = exports.CfnClusterPropsMixin = exports.CfnBatchScramSecretPropsMixin = 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-msk"));
/**
 * Represents a secret stored in the AWS Secrets Manager that can be used to authenticate with a cluster using a user name and a password.
 *
 * @cloudformationResource AWS::MSK::BatchScramSecret
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-batchscramsecret.html
 */
class CfnBatchScramSecretPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_msk.CfnBatchScramSecretPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["clusterArn", "secretArnList"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::MSK::BatchScramSecret`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_msk_CfnBatchScramSecretMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnBatchScramSecretPropsMixin);
            }
            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.CfnBatchScramSecret.isCfnBatchScramSecret(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnBatchScramSecretPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnBatchScramSecretPropsMixin = CfnBatchScramSecretPropsMixin;
/**
 * Creates a new MSK cluster.
 *
 * @cloudformationResource AWS::MSK::Cluster
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-cluster.html
 */
class CfnClusterPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_msk.CfnClusterPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["brokerNodeGroupInfo", "clientAuthentication", "clusterName", "configurationInfo", "currentVersion", "encryptionInfo", "enhancedMonitoring", "kafkaVersion", "loggingInfo", "numberOfBrokerNodes", "openMonitoring", "rebalancing", "storageMode", "tags", "zookeeperAccess"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::MSK::Cluster`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_msk_CfnClusterMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnClusterPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnClusterMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnCluster.isCfnCluster(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnClusterPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnClusterPropsMixin = CfnClusterPropsMixin;
// @ts-ignore TS6133
function flattenCfnClusterPropsMixinEncryptionAtRestProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        dataVolumeKmsKeyId: (!props.dataVolumeKmsKeyId ? undefined : cdk.getRefProperty(props.dataVolumeKmsKeyId?.keyRef, 'keyArn') ?? cdk.getRefProperty(props.dataVolumeKmsKeyId?.keyRef, 'keyId') ?? cdk.ensureStringOrUndefined(props.dataVolumeKmsKeyId, "dataVolumeKmsKeyId", "kms.IKeyRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnClusterPropsMixinEncryptionInfoProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        encryptionAtRest: (!props.encryptionAtRest ? undefined : (!props.encryptionAtRest ? undefined : flattenCfnClusterPropsMixinEncryptionAtRestProperty(props.encryptionAtRest))),
        encryptionInTransit: (!props.encryptionInTransit ? undefined : props.encryptionInTransit)
    };
}
// @ts-ignore TS6133
function flattenCfnClusterPropsMixinConfigurationInfoProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        arn: (!props.arn ? undefined : cdk.getRefProperty(props.arn?.configurationRef, 'configurationArn') ?? cdk.ensureStringOrUndefined(props.arn, "arn", "msk.IConfigurationRef | string")),
        revision: (!props.revision ? undefined : props.revision)
    };
}
// @ts-ignore TS6133
function flattenCfnClusterPropsMixinBrokerNodeGroupInfoProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        brokerAzDistribution: (!props.brokerAzDistribution ? undefined : props.brokerAzDistribution),
        clientSubnets: (!props.clientSubnets ? undefined : cdk.mapArrayInPlace(props.clientSubnets, (item) => cdk.getRefProperty(item?.subnetRef, 'subnetId') ?? cdk.ensureStringOrUndefined(item, "clientSubnets", "ec2.ISubnetRef | string"))),
        connectivityInfo: (!props.connectivityInfo ? undefined : props.connectivityInfo),
        instanceType: (!props.instanceType ? undefined : props.instanceType),
        securityGroups: (!props.securityGroups ? undefined : cdk.mapArrayInPlace(props.securityGroups, (item) => cdk.getRefProperty(item?.securityGroupRef, 'securityGroupId') ?? cdk.ensureStringOrUndefined(item, "securityGroups", "ec2.ISecurityGroupRef | string"))),
        storageInfo: (!props.storageInfo ? undefined : props.storageInfo)
    };
}
// @ts-ignore TS6133
function flattenCfnClusterPropsMixinTlsProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        certificateAuthorityArnList: (!props.certificateAuthorityArnList ? undefined : cdk.mapArrayInPlace(props.certificateAuthorityArnList, (item) => cdk.getRefProperty(item?.certificateAuthorityRef, 'certificateAuthorityArn') ?? cdk.ensureStringOrUndefined(item, "certificateAuthorityArnList", "acmpca.ICertificateAuthorityRef | string"))),
        enabled: (!props.enabled ? undefined : props.enabled)
    };
}
// @ts-ignore TS6133
function flattenCfnClusterPropsMixinClientAuthenticationProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        sasl: (!props.sasl ? undefined : props.sasl),
        tls: (!props.tls ? undefined : (!props.tls ? undefined : flattenCfnClusterPropsMixinTlsProperty(props.tls))),
        unauthenticated: (!props.unauthenticated ? undefined : props.unauthenticated)
    };
}
// @ts-ignore TS6133
function flattenCfnClusterPropsMixinCloudWatchLogsProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        enabled: (!props.enabled ? undefined : props.enabled),
        logGroup: (!props.logGroup ? undefined : cdk.getRefProperty(props.logGroup?.logGroupRef, 'logGroupName') ?? cdk.ensureStringOrUndefined(props.logGroup, "logGroup", "logs.ILogGroupRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnClusterPropsMixinBrokerLogsProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        cloudWatchLogs: (!props.cloudWatchLogs ? undefined : (!props.cloudWatchLogs ? undefined : flattenCfnClusterPropsMixinCloudWatchLogsProperty(props.cloudWatchLogs))),
        firehose: (!props.firehose ? undefined : props.firehose),
        s3: (!props.s3 ? undefined : props.s3)
    };
}
// @ts-ignore TS6133
function flattenCfnClusterPropsMixinLoggingInfoProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        brokerLogs: (!props.brokerLogs ? undefined : flattenCfnClusterPropsMixinBrokerLogsProperty(props.brokerLogs))
    };
}
// @ts-ignore TS6133
function flattenCfnClusterMixinProps(props) {
    const ret = {};
    if ((props.brokerNodeGroupInfo !== undefined))
        ret.brokerNodeGroupInfo = flattenCfnClusterPropsMixinBrokerNodeGroupInfoProperty(props.brokerNodeGroupInfo);
    if ((props.clientAuthentication !== undefined))
        ret.clientAuthentication = flattenCfnClusterPropsMixinClientAuthenticationProperty(props.clientAuthentication);
    if ((props.configurationInfo !== undefined))
        ret.configurationInfo = flattenCfnClusterPropsMixinConfigurationInfoProperty(props.configurationInfo);
    if ((props.encryptionInfo !== undefined))
        ret.encryptionInfo = flattenCfnClusterPropsMixinEncryptionInfoProperty(props.encryptionInfo);
    if ((props.loggingInfo !== undefined))
        ret.loggingInfo = flattenCfnClusterPropsMixinLoggingInfoProperty(props.loggingInfo);
    return ret;
}
/**
 * Create or update cluster policy.
 *
 * @cloudformationResource AWS::MSK::ClusterPolicy
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-clusterpolicy.html
 */
class CfnClusterPolicyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_msk.CfnClusterPolicyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["clusterArn", "policy"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::MSK::ClusterPolicy`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_msk_CfnClusterPolicyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnClusterPolicyPropsMixin);
            }
            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.CfnClusterPolicy.isCfnClusterPolicy(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnClusterPolicyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnClusterPolicyPropsMixin = CfnClusterPolicyPropsMixin;
/**
 * Creates a new MSK configuration.
 *
 * To see an example of how to use this operation, first save the following text to a file and name the file `config-file.txt` .
 *
 * `auto.create.topics.enable = true zookeeper.connection.timeout.ms = 1000 log.roll.ms = 604800000`
 *
 * Now run the following Python 3.6 script in the folder where you saved `config-file.txt` . This script uses the properties specified in `config-file.txt` to create a configuration named `SalesClusterConfiguration` . This configuration can work with Apache Kafka versions 1.1.1 and 2.1.0.
 *
 * ```PYTHON
 * import boto3 client = boto3.client('kafka') config_file = open('config-file.txt', 'r') server_properties = config_file.read() response = client.create_configuration( Name='SalesClusterConfiguration', Description='The configuration to use on all sales clusters.', KafkaVersions=['1.1.1', '2.1.0'], ServerProperties=server_properties
 * ) print(response)
 * ```
 *
 * @cloudformationResource AWS::MSK::Configuration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-configuration.html
 */
class CfnConfigurationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_msk.CfnConfigurationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "kafkaVersionsList", "latestRevision", "name", "serverProperties"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::MSK::Configuration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_msk_CfnConfigurationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnConfigurationPropsMixin);
            }
            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.CfnConfiguration.isCfnConfiguration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnConfigurationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnConfigurationPropsMixin = CfnConfigurationPropsMixin;
/**
 * Specifies the properties required for creating a serverless cluster.
 *
 * @cloudformationResource AWS::MSK::ServerlessCluster
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-serverlesscluster.html
 */
class CfnServerlessClusterPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_msk.CfnServerlessClusterPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["clientAuthentication", "clusterName", "tags", "vpcConfigs"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::MSK::ServerlessCluster`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_msk_CfnServerlessClusterMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnServerlessClusterPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnServerlessClusterMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnServerlessCluster.isCfnServerlessCluster(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnServerlessClusterPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnServerlessClusterPropsMixin = CfnServerlessClusterPropsMixin;
// @ts-ignore TS6133
function flattenCfnServerlessClusterPropsMixinVpcConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        securityGroups: (!props.securityGroups ? undefined : cdk.mapArrayInPlace(props.securityGroups, (item) => cdk.getRefProperty(item?.securityGroupRef, 'securityGroupId') ?? cdk.ensureStringOrUndefined(item, "securityGroups", "ec2.ISecurityGroupRef | string"))),
        subnetIds: (!props.subnetIds ? undefined : cdk.mapArrayInPlace(props.subnetIds, (item) => cdk.getRefProperty(item?.subnetRef, 'subnetId') ?? cdk.ensureStringOrUndefined(item, "subnetIds", "ec2.ISubnetRef | string")))
    };
}
// @ts-ignore TS6133
function flattenCfnServerlessClusterMixinProps(props) {
    const ret = {};
    if ((props.vpcConfigs !== undefined))
        ret.vpcConfigs = (cdk.isResolvableObject(props.vpcConfigs) ? props.vpcConfigs : cdk.mapArrayInPlace(props.vpcConfigs, (item) => flattenCfnServerlessClusterPropsMixinVpcConfigProperty(item)));
    return ret;
}
/**
 * Create remote VPC connection.
 *
 * @cloudformationResource AWS::MSK::VpcConnection
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-vpcconnection.html
 */
class CfnVpcConnectionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_msk.CfnVpcConnectionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["authentication", "clientSubnets", "securityGroups", "tags", "targetClusterArn", "vpcId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::MSK::VpcConnection`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_msk_CfnVpcConnectionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnVpcConnectionPropsMixin);
            }
            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.CfnVpcConnection.isCfnVpcConnection(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnVpcConnectionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnVpcConnectionPropsMixin = CfnVpcConnectionPropsMixin;
/**
 * Creates the replicator.
 *
 * @cloudformationResource AWS::MSK::Replicator
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-replicator.html
 */
class CfnReplicatorPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_msk.CfnReplicatorPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "kafkaClusters", "logDelivery", "replicationInfoList", "replicatorName", "serviceExecutionRoleArn", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::MSK::Replicator`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_msk_CfnReplicatorMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnReplicatorPropsMixin);
            }
            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.CfnReplicator.isCfnReplicator(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnReplicatorPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnReplicatorPropsMixin = CfnReplicatorPropsMixin;
/**
 * Resource Type definition for AWS::MSK::Topic.
 *
 * @cloudformationResource AWS::MSK::Topic
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-msk-topic.html
 */
class CfnTopicPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_msk.CfnTopicPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["clusterArn", "configs", "partitionCount", "replicationFactor", "topicName"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::MSK::Topic`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_msk_CfnTopicMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnTopicPropsMixin);
            }
            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.CfnTopic.isCfnTopic(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnTopicPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnTopicPropsMixin = CfnTopicPropsMixin;
