"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.CfnOTelEnrichmentPropsMixin = exports.CfnAlarmMuteRulePropsMixin = exports.CfnMetricStreamPropsMixin = exports.CfnInsightRulePropsMixin = exports.CfnDashboardPropsMixin = exports.CfnCompositeAlarmPropsMixin = exports.CfnAnomalyDetectorPropsMixin = exports.CfnAlarmPropsMixin = 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-cloudwatch"));
/**
 * The `AWS::CloudWatch::Alarm` type specifies an alarm and associates it with the specified metric or metric math expression.
 *
 * When this operation creates an alarm, the alarm state is immediately set to `INSUFFICIENT_DATA` . The alarm is then evaluated and its state is set appropriately. Any actions associated with the new state are then executed.
 *
 * When you update an existing alarm, its state is left unchanged, but the update completely overwrites the previous configuration of the alarm.
 *
 * @cloudformationResource AWS::CloudWatch::Alarm
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-alarm.html
 */
class CfnAlarmPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudwatch.CfnAlarmPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["actionsEnabled", "alarmActions", "alarmDescription", "alarmName", "comparisonOperator", "datapointsToAlarm", "dimensions", "evaluateLowSampleCountPercentile", "evaluationCriteria", "evaluationInterval", "evaluationPeriods", "extendedStatistic", "insufficientDataActions", "metricName", "metrics", "namespace", "okActions", "period", "statistic", "tags", "threshold", "thresholdMetricId", "treatMissingData", "unit"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudWatch::Alarm`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudwatch_CfnAlarmMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnAlarmPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnAlarmMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnAlarm.isCfnAlarm(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnAlarmPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnAlarmPropsMixin = CfnAlarmPropsMixin;
// @ts-ignore TS6133
function flattenCfnAlarmMixinProps(props) {
    const ret = {};
    if ((props.alarmActions !== undefined))
        ret.alarmActions = cdk.mapArrayInPlace(props.alarmActions, (item) => cdk.getRefProperty(item?.topicRef, 'topicArn') ?? cdk.getRefProperty(item?.scalingPolicyRef, 'scalingPolicyArn') ?? cdk.ensureStringOrUndefined(item, "alarmActions", "sns.ITopicRef | autoscaling.IScalingPolicyRef | string"));
    if ((props.insufficientDataActions !== undefined))
        ret.insufficientDataActions = cdk.mapArrayInPlace(props.insufficientDataActions, (item) => cdk.getRefProperty(item?.topicRef, 'topicArn') ?? cdk.ensureStringOrUndefined(item, "insufficientDataActions", "sns.ITopicRef | string"));
    if ((props.okActions !== undefined))
        ret.okActions = cdk.mapArrayInPlace(props.okActions, (item) => cdk.getRefProperty(item?.topicRef, 'topicArn') ?? cdk.ensureStringOrUndefined(item, "okActions", "sns.ITopicRef | string"));
    return ret;
}
/**
 * The `AWS::CloudWatch::AnomalyDetector` type specifies an anomaly detection band for a certain metric and statistic.
 *
 * The band represents the expected "normal" range for the metric values. Anomaly detection bands can be used for visualization of a metric's expected values, and for alarms.
 *
 * For more information see [Using CloudWatch anomaly detection.](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Anomaly_Detection.html) .
 *
 * @cloudformationResource AWS::CloudWatch::AnomalyDetector
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-anomalydetector.html
 */
class CfnAnomalyDetectorPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudwatch.CfnAnomalyDetectorPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["configuration", "dimensions", "metricCharacteristics", "metricMathAnomalyDetector", "metricName", "namespace", "singleMetricAnomalyDetector", "stat"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudWatch::AnomalyDetector`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudwatch_CfnAnomalyDetectorMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnAnomalyDetectorPropsMixin);
            }
            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.CfnAnomalyDetector.isCfnAnomalyDetector(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnAnomalyDetectorPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnAnomalyDetectorPropsMixin = CfnAnomalyDetectorPropsMixin;
/**
 * The `AWS::CloudWatch::CompositeAlarm` type creates or updates a composite alarm.
 *
 * When you create a composite alarm, you specify a rule expression for the alarm that takes into account the alarm states of other alarms that you have created. The composite alarm goes into ALARM state only if all conditions of the rule are met.
 *
 * The alarms specified in a composite alarm's rule expression can include metric alarms and other composite alarms.
 *
 * Using composite alarms can reduce alarm noise. You can create multiple metric alarms, and also create a composite alarm and set up alerts only for the composite alarm. For example, you could create a composite alarm that goes into ALARM state only when more than one of the underlying metric alarms are in ALARM state.
 *
 * When this operation creates an alarm, the alarm state is immediately set to INSUFFICIENT_DATA. The alarm is then evaluated and its state is set appropriately. Any actions associated with the new state are then executed. For a composite alarm, this initial time after creation is the only time that the alarm can be in INSUFFICIENT_DATA state.
 *
 * When you update an existing alarm, its state is left unchanged, but the update completely overwrites the previous configuration of the alarm.
 *
 * @cloudformationResource AWS::CloudWatch::CompositeAlarm
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-compositealarm.html
 */
class CfnCompositeAlarmPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudwatch.CfnCompositeAlarmPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["actionsEnabled", "actionsSuppressor", "actionsSuppressorExtensionPeriod", "actionsSuppressorWaitPeriod", "alarmActions", "alarmDescription", "alarmName", "alarmRule", "insufficientDataActions", "okActions", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudWatch::CompositeAlarm`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudwatch_CfnCompositeAlarmMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnCompositeAlarmPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnCompositeAlarmMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnCompositeAlarm.isCfnCompositeAlarm(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnCompositeAlarmPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnCompositeAlarmPropsMixin = CfnCompositeAlarmPropsMixin;
// @ts-ignore TS6133
function flattenCfnCompositeAlarmMixinProps(props) {
    const ret = {};
    if ((props.actionsSuppressor !== undefined))
        ret.actionsSuppressor = cdk.getRefProperty(props.actionsSuppressor?.alarmRef, 'alarmArn') ?? cdk.getRefProperty(props.actionsSuppressor?.compositeAlarmRef, 'compositeAlarmArn') ?? cdk.ensureStringOrUndefined(props.actionsSuppressor, "actionsSuppressor", "cloudwatch.IAlarmRef | cloudwatch.ICompositeAlarmRef | string");
    if ((props.alarmActions !== undefined))
        ret.alarmActions = cdk.mapArrayInPlace(props.alarmActions, (item) => cdk.getRefProperty(item?.topicRef, 'topicArn') ?? cdk.ensureStringOrUndefined(item, "alarmActions", "sns.ITopicRef | string"));
    if ((props.okActions !== undefined))
        ret.okActions = cdk.mapArrayInPlace(props.okActions, (item) => cdk.getRefProperty(item?.topicRef, 'topicArn') ?? cdk.ensureStringOrUndefined(item, "okActions", "sns.ITopicRef | string"));
    return ret;
}
/**
 * The `AWS::CloudWatch::Dashboard` resource specifies an Amazon CloudWatch dashboard.
 *
 * A dashboard is a customizable home page in the CloudWatch console that you can use to monitor your AWS resources in a single view.
 *
 * All dashboards in your account are global, not region-specific.
 *
 * @cloudformationResource AWS::CloudWatch::Dashboard
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-dashboard.html
 */
class CfnDashboardPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudwatch.CfnDashboardPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["dashboardBody", "dashboardName", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudWatch::Dashboard`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudwatch_CfnDashboardMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDashboardPropsMixin);
            }
            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.CfnDashboard.isCfnDashboard(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDashboardPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDashboardPropsMixin = CfnDashboardPropsMixin;
/**
 * Creates or updates a Contributor Insights rule.
 *
 * Rules evaluate log events in a CloudWatch Logs log group, enabling you to find contributor data for the log events in that log group. For more information, see [Using Contributor Insights to Analyze High-Cardinality Data](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights.html) in the *Amazon CloudWatch User Guide* .
 *
 * @cloudformationResource AWS::CloudWatch::InsightRule
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-insightrule.html
 */
class CfnInsightRulePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudwatch.CfnInsightRulePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["applyOnTransformedLogs", "ruleBody", "ruleName", "ruleState", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudWatch::InsightRule`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudwatch_CfnInsightRuleMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnInsightRulePropsMixin);
            }
            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.CfnInsightRule.isCfnInsightRule(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnInsightRulePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnInsightRulePropsMixin = CfnInsightRulePropsMixin;
/**
 * Creates or updates a metric stream.
 *
 * Metrics streams can automatically stream CloudWatch metrics to AWS destinations including Amazon S3 and to many third-party solutions. For more information, see [Metric streams](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Metric-Streams.html) .
 *
 * To create a metric stream, you must be logged on to an account that has the `iam:PassRole` permission and either the *CloudWatchFullAccess* policy or the `cloudwatch:PutMetricStream` permission.
 *
 * When you create or update a metric stream, you choose one of the following:
 *
 * - Stream metrics from all metric namespaces in the account.
 * - Stream metrics from all metric namespaces in the account, except for the namespaces that you list in `ExcludeFilters` .
 * - Stream metrics from only the metric namespaces that you list in `IncludeFilters` .
 *
 * When you create a metric stream, the stream is created in the `running` state. If you update an existing metric stream, the state does not change.
 *
 * If you create a metric stream in an account that has been set up as a monitoring account in CloudWatch cross-account observability, you can choose whether to include metrics from linked source accounts in the metric stream.
 *
 * @cloudformationResource AWS::CloudWatch::MetricStream
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-metricstream.html
 */
class CfnMetricStreamPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudwatch.CfnMetricStreamPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["excludeFilters", "firehoseArn", "includeFilters", "includeLinkedAccountsMetrics", "name", "outputFormat", "roleArn", "statisticsConfigurations", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudWatch::MetricStream`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudwatch_CfnMetricStreamMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnMetricStreamPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnMetricStreamMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnMetricStream.isCfnMetricStream(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnMetricStreamPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnMetricStreamPropsMixin = CfnMetricStreamPropsMixin;
// @ts-ignore TS6133
function flattenCfnMetricStreamMixinProps(props) {
    const ret = {};
    if ((props.firehoseArn !== undefined))
        ret.firehoseArn = cdk.getRefProperty(props.firehoseArn?.deliveryStreamRef, 'deliveryStreamArn') ?? cdk.ensureStringOrUndefined(props.firehoseArn, "firehoseArn", "kinesisfirehose.IDeliveryStreamRef | string");
    if ((props.roleArn !== undefined))
        ret.roleArn = cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string");
    return ret;
}
/**
 * Resource Type definition for AWS::CloudWatch::AlarmMuteRule that allows defining a rule and targeting alarms to mute their actions during the specified window.
 *
 * @cloudformationResource AWS::CloudWatch::AlarmMuteRule
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-alarmmuterule.html
 */
class CfnAlarmMuteRulePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudwatch.CfnAlarmMuteRulePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "expireDate", "muteTargets", "name", "rule", "startDate", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudWatch::AlarmMuteRule`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudwatch_CfnAlarmMuteRuleMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnAlarmMuteRulePropsMixin);
            }
            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.CfnAlarmMuteRule.isCfnAlarmMuteRule(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnAlarmMuteRulePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnAlarmMuteRulePropsMixin = CfnAlarmMuteRulePropsMixin;
/**
 * AWS::CloudWatch::OTelEnrichment enables OTel metric enrichment in CloudWatch, allowing CloudWatch vended metrics to be available for PromQL querying enriched with AWS resource tags and metadata.
 *
 * @cloudformationResource AWS::CloudWatch::OTelEnrichment
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-otelenrichment.html
 */
class CfnOTelEnrichmentPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudwatch.CfnOTelEnrichmentPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = [];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudWatch::OTelEnrichment`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudwatch_CfnOTelEnrichmentMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnOTelEnrichmentPropsMixin);
            }
            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.CfnOTelEnrichment.isCfnOTelEnrichment(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnOTelEnrichmentPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnOTelEnrichmentPropsMixin = CfnOTelEnrichmentPropsMixin;
