"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.CfnResolverRuleAssociationPropsMixin = exports.CfnResolverRulePropsMixin = exports.CfnResolverQueryLoggingConfigAssociationPropsMixin = exports.CfnResolverQueryLoggingConfigPropsMixin = exports.CfnResolverEndpointPropsMixin = exports.CfnResolverDNSSECConfigPropsMixin = exports.CfnResolverConfigPropsMixin = exports.CfnOutpostResolverPropsMixin = exports.CfnFirewallRuleGroupAssociationPropsMixin = exports.CfnFirewallRuleGroupPropsMixin = exports.CfnFirewallDomainListPropsMixin = 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-route53resolver"));
/**
 * High-level information about a list of firewall domains for use in a [AWS::Route53Resolver::FirewallRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53resolver-firewallrulegroup-rule.html) . This is returned by [GetFirewallDomainList](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_GetFirewallDomainList.html) .
 *
 * To retrieve the domains that are defined for this domain list, call [ListFirewallDomains](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_ListFirewallDomains.html) .
 *
 * @cloudformationResource AWS::Route53Resolver::FirewallDomainList
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-firewalldomainlist.html
 */
class CfnFirewallDomainListPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnFirewallDomainListPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["domainFileUrl", "domains", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::FirewallDomainList`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnFirewallDomainListMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnFirewallDomainListPropsMixin);
            }
            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.CfnFirewallDomainList.isCfnFirewallDomainList(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnFirewallDomainListPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnFirewallDomainListPropsMixin = CfnFirewallDomainListPropsMixin;
/**
 * High-level information for a firewall rule group.
 *
 * A firewall rule group is a collection of rules that DNS Firewall uses to filter DNS network traffic for a VPC. To retrieve the rules for the rule group, call [ListFirewallRules](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_ListFirewallRules.html) .
 *
 * @cloudformationResource AWS::Route53Resolver::FirewallRuleGroup
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-firewallrulegroup.html
 */
class CfnFirewallRuleGroupPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnFirewallRuleGroupPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["firewallRules", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::FirewallRuleGroup`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnFirewallRuleGroupMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnFirewallRuleGroupPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnFirewallRuleGroupMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnFirewallRuleGroup.isCfnFirewallRuleGroup(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnFirewallRuleGroupPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnFirewallRuleGroupPropsMixin = CfnFirewallRuleGroupPropsMixin;
// @ts-ignore TS6133
function flattenCfnFirewallRuleGroupPropsMixinFirewallRuleProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        action: (!props.action ? undefined : props.action),
        blockOverrideDnsType: (!props.blockOverrideDnsType ? undefined : props.blockOverrideDnsType),
        blockOverrideDomain: (!props.blockOverrideDomain ? undefined : props.blockOverrideDomain),
        blockOverrideTtl: (!props.blockOverrideTtl ? undefined : props.blockOverrideTtl),
        blockResponse: (!props.blockResponse ? undefined : props.blockResponse),
        confidenceThreshold: (!props.confidenceThreshold ? undefined : props.confidenceThreshold),
        dnsThreatProtection: (!props.dnsThreatProtection ? undefined : props.dnsThreatProtection),
        firewallDomainListId: (!props.firewallDomainListId ? undefined : cdk.getRefProperty(props.firewallDomainListId?.firewallDomainListRef, 'firewallDomainListId') ?? cdk.ensureStringOrUndefined(props.firewallDomainListId, "firewallDomainListId", "route53resolver.IFirewallDomainListRef | string")),
        firewallDomainRedirectionAction: (!props.firewallDomainRedirectionAction ? undefined : props.firewallDomainRedirectionAction),
        firewallRuleType: (!props.firewallRuleType ? undefined : props.firewallRuleType),
        firewallThreatProtectionId: (!props.firewallThreatProtectionId ? undefined : props.firewallThreatProtectionId),
        priority: (!props.priority ? undefined : props.priority),
        qtype: (!props.qtype ? undefined : props.qtype)
    };
}
// @ts-ignore TS6133
function flattenCfnFirewallRuleGroupMixinProps(props) {
    const ret = {};
    if ((props.firewallRules !== undefined))
        ret.firewallRules = (cdk.isResolvableObject(props.firewallRules) ? props.firewallRules : cdk.mapArrayInPlace(props.firewallRules, (item) => flattenCfnFirewallRuleGroupPropsMixinFirewallRuleProperty(item)));
    return ret;
}
/**
 * An association between a firewall rule group and a VPC, which enables DNS filtering for the VPC.
 *
 * @cloudformationResource AWS::Route53Resolver::FirewallRuleGroupAssociation
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-firewallrulegroupassociation.html
 */
class CfnFirewallRuleGroupAssociationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnFirewallRuleGroupAssociationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["firewallRuleGroupId", "mutationProtection", "name", "priority", "tags", "vpcId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::FirewallRuleGroupAssociation`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnFirewallRuleGroupAssociationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnFirewallRuleGroupAssociationPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnFirewallRuleGroupAssociationMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnFirewallRuleGroupAssociation.isCfnFirewallRuleGroupAssociation(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnFirewallRuleGroupAssociationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnFirewallRuleGroupAssociationPropsMixin = CfnFirewallRuleGroupAssociationPropsMixin;
// @ts-ignore TS6133
function flattenCfnFirewallRuleGroupAssociationMixinProps(props) {
    const ret = {};
    if ((props.firewallRuleGroupId !== undefined))
        ret.firewallRuleGroupId = cdk.getRefProperty(props.firewallRuleGroupId?.firewallRuleGroupRef, 'firewallRuleGroupId') ?? cdk.ensureStringOrUndefined(props.firewallRuleGroupId, "firewallRuleGroupId", "route53resolver.IFirewallRuleGroupRef | string");
    if ((props.vpcId !== undefined))
        ret.vpcId = cdk.getRefProperty(props.vpcId?.vpcRef, 'vpcId') ?? cdk.ensureStringOrUndefined(props.vpcId, "vpcId", "ec2.IVPCRef | string");
    return ret;
}
/**
 * Creates a Amazon Route 53 Resolver on an Outpost.
 *
 * @cloudformationResource AWS::Route53Resolver::OutpostResolver
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-outpostresolver.html
 */
class CfnOutpostResolverPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnOutpostResolverPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["instanceCount", "name", "outpostArn", "preferredInstanceType", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::OutpostResolver`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnOutpostResolverMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnOutpostResolverPropsMixin);
            }
            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.CfnOutpostResolver.isCfnOutpostResolver(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnOutpostResolverPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnOutpostResolverPropsMixin = CfnOutpostResolverPropsMixin;
/**
 * A complex type that contains information about a Resolver configuration for a VPC.
 *
 * @cloudformationResource AWS::Route53Resolver::ResolverConfig
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverconfig.html
 */
class CfnResolverConfigPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnResolverConfigPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["autodefinedReverseFlag", "resourceId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::ResolverConfig`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnResolverConfigMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResolverConfigPropsMixin);
            }
            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.CfnResolverConfig.isCfnResolverConfig(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResolverConfigPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResolverConfigPropsMixin = CfnResolverConfigPropsMixin;
/**
 * The `AWS::Route53Resolver::ResolverDNSSECConfig` resource is a complex type that contains information about a configuration for DNSSEC validation.
 *
 * @cloudformationResource AWS::Route53Resolver::ResolverDNSSECConfig
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverdnssecconfig.html
 */
class CfnResolverDNSSECConfigPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnResolverDNSSECConfigPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["resourceId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::ResolverDNSSECConfig`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnResolverDNSSECConfigMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResolverDNSSECConfigPropsMixin);
            }
            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.CfnResolverDNSSECConfig.isCfnResolverDNSSECConfig(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResolverDNSSECConfigPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResolverDNSSECConfigPropsMixin = CfnResolverDNSSECConfigPropsMixin;
/**
 * Creates a Resolver endpoint. There are two types of Resolver endpoints, inbound and outbound:.
 *
 * - An *inbound Resolver endpoint* forwards DNS queries to the DNS service for a VPC from your network.
 * - An *outbound Resolver endpoint* forwards DNS queries from the DNS service for a VPC to your network.
 *
 * > - You cannot update `ResolverEndpointType` and `IpAddresses` in the same request.
 * > - When you update a dual-stack IP address, you must update both IP addresses. You can’t update only an IPv4 or IPv6 and keep an existing IP address.
 *
 * @cloudformationResource AWS::Route53Resolver::ResolverEndpoint
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverendpoint.html
 */
class CfnResolverEndpointPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnResolverEndpointPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["direction", "dns64Enabled", "ipAddresses", "ipv6InternetAccessEnabled", "name", "outpostArn", "preferredInstanceType", "protocols", "resolverEndpointType", "rniEnhancedMetricsEnabled", "securityGroupIds", "tags", "targetNameServerMetricsEnabled"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::ResolverEndpoint`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnResolverEndpointMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResolverEndpointPropsMixin);
            }
            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.CfnResolverEndpoint.isCfnResolverEndpoint(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResolverEndpointPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResolverEndpointPropsMixin = CfnResolverEndpointPropsMixin;
/**
 * The AWS::Route53Resolver::ResolverQueryLoggingConfig resource is a complex type that contains settings for one query logging configuration.
 *
 * @cloudformationResource AWS::Route53Resolver::ResolverQueryLoggingConfig
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverqueryloggingconfig.html
 */
class CfnResolverQueryLoggingConfigPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnResolverQueryLoggingConfigPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["destinationArn", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::ResolverQueryLoggingConfig`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnResolverQueryLoggingConfigMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResolverQueryLoggingConfigPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnResolverQueryLoggingConfigMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnResolverQueryLoggingConfig.isCfnResolverQueryLoggingConfig(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResolverQueryLoggingConfigPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResolverQueryLoggingConfigPropsMixin = CfnResolverQueryLoggingConfigPropsMixin;
// @ts-ignore TS6133
function flattenCfnResolverQueryLoggingConfigMixinProps(props) {
    const ret = {};
    if ((props.destinationArn !== undefined))
        ret.destinationArn = cdk.getRefProperty(props.destinationArn?.logGroupRef, 'logGroupArn') ?? cdk.getRefProperty(props.destinationArn?.bucketRef, 'bucketArn') ?? cdk.ensureStringOrUndefined(props.destinationArn, "destinationArn", "logs.ILogGroupRef | s3.IBucketRef | string");
    return ret;
}
/**
 * The AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation resource is a configuration for DNS query logging.
 *
 * After you create a query logging configuration, Amazon Route 53 begins to publish log data to an Amazon CloudWatch Logs log group.
 *
 * @cloudformationResource AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverqueryloggingconfigassociation.html
 */
class CfnResolverQueryLoggingConfigAssociationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnResolverQueryLoggingConfigAssociationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["resolverQueryLogConfigId", "resourceId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnResolverQueryLoggingConfigAssociationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResolverQueryLoggingConfigAssociationPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnResolverQueryLoggingConfigAssociationMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnResolverQueryLoggingConfigAssociation.isCfnResolverQueryLoggingConfigAssociation(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResolverQueryLoggingConfigAssociationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResolverQueryLoggingConfigAssociationPropsMixin = CfnResolverQueryLoggingConfigAssociationPropsMixin;
// @ts-ignore TS6133
function flattenCfnResolverQueryLoggingConfigAssociationMixinProps(props) {
    const ret = {};
    if ((props.resolverQueryLogConfigId !== undefined))
        ret.resolverQueryLogConfigId = cdk.getRefProperty(props.resolverQueryLogConfigId?.resolverQueryLoggingConfigRef, 'resolverQueryLoggingConfigId') ?? cdk.ensureStringOrUndefined(props.resolverQueryLogConfigId, "resolverQueryLogConfigId", "route53resolver.IResolverQueryLoggingConfigRef | string");
    if ((props.resourceId !== undefined))
        ret.resourceId = cdk.getRefProperty(props.resourceId?.vpcRef, 'vpcId') ?? cdk.ensureStringOrUndefined(props.resourceId, "resourceId", "ec2.IVPCRef | string");
    return ret;
}
/**
 * For DNS queries that originate in your VPCs, specifies which Resolver endpoint the queries pass through, one domain name that you want to forward to your network, and the IP addresses of the DNS resolvers in your network.
 *
 * @cloudformationResource AWS::Route53Resolver::ResolverRule
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverrule.html
 */
class CfnResolverRulePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnResolverRulePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["delegationRecord", "domainName", "name", "resolverEndpointId", "ruleType", "tags", "targetIps"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::ResolverRule`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnResolverRuleMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResolverRulePropsMixin);
            }
            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.CfnResolverRule.isCfnResolverRule(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResolverRulePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResolverRulePropsMixin = CfnResolverRulePropsMixin;
/**
 * In the response to an [AssociateResolverRule](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_AssociateResolverRule.html) , [DisassociateResolverRule](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_DisassociateResolverRule.html) , or [ListResolverRuleAssociations](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_ListResolverRuleAssociations.html) request, provides information about an association between a resolver rule and a VPC. The association determines which DNS queries that originate in the VPC are forwarded to your network.
 *
 * @cloudformationResource AWS::Route53Resolver::ResolverRuleAssociation
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53resolver-resolverruleassociation.html
 */
class CfnResolverRuleAssociationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_route53resolver.CfnResolverRuleAssociationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["name", "resolverRuleId", "vpcId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::Route53Resolver::ResolverRuleAssociation`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_route53resolver_CfnResolverRuleAssociationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResolverRuleAssociationPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnResolverRuleAssociationMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnResolverRuleAssociation.isCfnResolverRuleAssociation(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResolverRuleAssociationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResolverRuleAssociationPropsMixin = CfnResolverRuleAssociationPropsMixin;
// @ts-ignore TS6133
function flattenCfnResolverRuleAssociationMixinProps(props) {
    const ret = {};
    if ((props.resolverRuleId !== undefined))
        ret.resolverRuleId = cdk.getRefProperty(props.resolverRuleId?.resolverRuleRef, 'resolverRuleId') ?? cdk.ensureStringOrUndefined(props.resolverRuleId, "resolverRuleId", "route53resolver.IResolverRuleRef | string");
    if ((props.vpcId !== undefined))
        ret.vpcId = cdk.getRefProperty(props.vpcId?.vpcRef, 'vpcId') ?? cdk.ensureStringOrUndefined(props.vpcId, "vpcId", "ec2.IVPCRef | string");
    return ret;
}
