"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.CfnWALWorkspacePropsMixin = exports.CfnStudioSessionMappingPropsMixin = exports.CfnStudioPropsMixin = exports.CfnStepPropsMixin = exports.CfnSecurityConfigurationPropsMixin = exports.CfnInstanceGroupConfigPropsMixin = exports.CfnInstanceFleetConfigPropsMixin = exports.CfnClusterPropsMixin = 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-emr"));
/**
 * The `AWS::EMR::Cluster` resource specifies an Amazon EMR cluster.
 *
 * This cluster is a collection of Amazon EC2 instances that run open source big data frameworks and applications to process and analyze vast amounts of data. For more information, see the [Amazon EMR Management Guide](https://docs.aws.amazon.com//emr/latest/ManagementGuide/) .
 *
 * Amazon EMR now supports launching task instance groups and task instance fleets as part of the `AWS::EMR::Cluster` resource. This can be done by using the `JobFlowInstancesConfig` property type's `TaskInstanceGroups` and `TaskInstanceFleets` subproperties. Using these subproperties reduces delays in provisioning task nodes compared to specifying task nodes with the `AWS::EMR::InstanceGroupConfig` and `AWS::EMR::InstanceFleetConfig` resources. Please refer to the examples at the bottom of this page to learn how to use these subproperties.
 *
 * @cloudformationResource AWS::EMR::Cluster
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html
 */
class CfnClusterPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_emr.CfnClusterPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["additionalInfo", "applications", "autoScalingRole", "autoTerminationPolicy", "bootstrapActions", "configurations", "customAmiId", "ebsRootVolumeIops", "ebsRootVolumeSize", "ebsRootVolumeThroughput", "instances", "jobFlowRole", "kerberosAttributes", "logEncryptionKmsKeyId", "logUri", "managedScalingPolicy", "name", "osReleaseLabel", "placementGroupConfigs", "releaseLabel", "scaleDownBehavior", "securityConfiguration", "serviceRole", "stepConcurrencyLevel", "steps", "tags", "visibleToAllUsers"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::EMR::Cluster`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_emr_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;
        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;
/**
 * Use `InstanceFleetConfig` to define instance fleets for an EMR cluster.
 *
 * A cluster can not use both instance fleets and instance groups. For more information, see [Configure Instance Fleets](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-instance-group-configuration.html) in the *Amazon EMR Management Guide* .
 *
 * > The instance fleet configuration is available only in Amazon EMR versions 4.8.0 and later, excluding 5.0.x versions. > You can currently only add a task instance fleet to a cluster with this resource. If you use this resource, CloudFormation waits for the cluster launch to complete before adding the task instance fleet to the cluster. In order to add a task instance fleet to the cluster as part of the cluster launch and minimize delays in provisioning task nodes, use the `TaskInstanceFleets` subproperty for the [AWS::EMR::Cluster JobFlowInstancesConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html) property instead. To use this subproperty, see [AWS::EMR::Cluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html) for examples.
 *
 * @cloudformationResource AWS::EMR::InstanceFleetConfig
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancefleetconfig.html
 */
class CfnInstanceFleetConfigPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_emr.CfnInstanceFleetConfigPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["clusterId", "instanceFleetType", "instanceTypeConfigs", "launchSpecifications", "name", "resizeSpecifications", "targetOnDemandCapacity", "targetSpotCapacity"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::EMR::InstanceFleetConfig`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_emr_CfnInstanceFleetConfigMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnInstanceFleetConfigPropsMixin);
            }
            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.CfnInstanceFleetConfig.isCfnInstanceFleetConfig(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnInstanceFleetConfigPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnInstanceFleetConfigPropsMixin = CfnInstanceFleetConfigPropsMixin;
/**
 * Use `InstanceGroupConfig` to define instance groups for an EMR cluster.
 *
 * A cluster can not use both instance groups and instance fleets. For more information, see [Create a Cluster with Instance Fleets or Uniform Instance Groups](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-instance-group-configuration.html) in the *Amazon EMR Management Guide* .
 *
 * > You can currently only add task instance groups to a cluster with this resource. If you use this resource, CloudFormation waits for the cluster launch to complete before adding the task instance group to the cluster. In order to add task instance groups to the cluster as part of the cluster launch and minimize delays in provisioning task nodes, use the `TaskInstanceGroups` subproperty for the [AWS::EMR::Cluster JobFlowInstancesConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-cluster-jobflowinstancesconfig.html) property instead. To use this subproperty, see [AWS::EMR::Cluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticmapreduce-cluster.html) for examples.
 *
 * @cloudformationResource AWS::EMR::InstanceGroupConfig
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-instancegroupconfig.html
 */
class CfnInstanceGroupConfigPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_emr.CfnInstanceGroupConfigPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["autoScalingPolicy", "bidPrice", "configurations", "customAmiId", "ebsConfiguration", "instanceCount", "instanceRole", "instanceType", "jobFlowId", "market", "name"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::EMR::InstanceGroupConfig`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_emr_CfnInstanceGroupConfigMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnInstanceGroupConfigPropsMixin);
            }
            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.CfnInstanceGroupConfig.isCfnInstanceGroupConfig(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnInstanceGroupConfigPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnInstanceGroupConfigPropsMixin = CfnInstanceGroupConfigPropsMixin;
/**
 * Use a `SecurityConfiguration` resource to configure data encryption, Kerberos authentication (available in Amazon EMR release version 5.10.0 and later), and Amazon S3 authorization for EMRFS (available in EMR 5.10.0 and later). You can re-use a security configuration for any number of clusters in your account. For more information and example security configuration JSON objects, see [Create a Security Configuration](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-create-security-configuration.html) in the *Amazon EMR Management Guide* .
 *
 * @cloudformationResource AWS::EMR::SecurityConfiguration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-securityconfiguration.html
 */
class CfnSecurityConfigurationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_emr.CfnSecurityConfigurationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["name", "securityConfiguration"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::EMR::SecurityConfiguration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_emr_CfnSecurityConfigurationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnSecurityConfigurationPropsMixin);
            }
            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.CfnSecurityConfiguration.isCfnSecurityConfiguration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnSecurityConfigurationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnSecurityConfigurationPropsMixin = CfnSecurityConfigurationPropsMixin;
/**
 * Use `Step` to specify a cluster (job flow) step, which runs only on the master node.
 *
 * Steps are used to submit data processing jobs to a cluster.
 *
 * @cloudformationResource AWS::EMR::Step
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-step.html
 */
class CfnStepPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_emr.CfnStepPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["actionOnFailure", "encryptionKeyArn", "hadoopJarStep", "jobFlowId", "logUri", "name"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::EMR::Step`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_emr_CfnStepMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnStepPropsMixin);
            }
            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.CfnStep.isCfnStep(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnStepPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnStepPropsMixin = CfnStepPropsMixin;
/**
 * The `AWS::EMR::Studio` resource specifies an Amazon EMR Studio.
 *
 * An EMR Studio is a web-based, integrated development environment for fully managed Jupyter notebooks that run on Amazon EMR clusters. For more information, see the [*Amazon EMR Management Guide*](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio.html) .
 *
 * @cloudformationResource AWS::EMR::Studio
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studio.html
 */
class CfnStudioPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_emr.CfnStudioPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["authMode", "defaultS3Location", "description", "encryptionKeyArn", "engineSecurityGroupId", "idcInstanceArn", "idcUserAssignment", "idpAuthUrl", "idpRelayStateParameterName", "name", "serviceRole", "subnetIds", "tags", "trustedIdentityPropagationEnabled", "userRole", "vpcId", "workspaceSecurityGroupId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::EMR::Studio`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_emr_CfnStudioMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnStudioPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnStudioMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnStudio.isCfnStudio(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnStudioPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnStudioPropsMixin = CfnStudioPropsMixin;
// @ts-ignore TS6133
function flattenCfnStudioMixinProps(props) {
    const ret = {};
    if ((props.defaultS3Location !== undefined))
        ret.defaultS3Location = cdk.getRefProperty(props.defaultS3Location?.bucketRef, 'bucketName') ?? cdk.ensureStringOrUndefined(props.defaultS3Location, "defaultS3Location", "s3.IBucketRef | string");
    if ((props.encryptionKeyArn !== undefined))
        ret.encryptionKeyArn = cdk.getRefProperty(props.encryptionKeyArn?.keyRef, 'keyArn') ?? cdk.ensureStringOrUndefined(props.encryptionKeyArn, "encryptionKeyArn", "kms.IKeyRef | string");
    if ((props.engineSecurityGroupId !== undefined))
        ret.engineSecurityGroupId = cdk.getRefProperty(props.engineSecurityGroupId?.securityGroupRef, 'securityGroupId') ?? cdk.ensureStringOrUndefined(props.engineSecurityGroupId, "engineSecurityGroupId", "ec2.ISecurityGroupRef | string");
    if ((props.serviceRole !== undefined))
        ret.serviceRole = cdk.getRefProperty(props.serviceRole?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.serviceRole, "serviceRole", "iam.IRoleRef | string");
    if ((props.subnetIds !== undefined))
        ret.subnetIds = cdk.mapArrayInPlace(props.subnetIds, (item) => cdk.getRefProperty(item?.subnetRef, 'subnetId') ?? cdk.ensureStringOrUndefined(item, "subnetIds", "ec2.ISubnetRef | string"));
    if ((props.userRole !== undefined))
        ret.userRole = cdk.getRefProperty(props.userRole?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.userRole, "userRole", "iam.IRoleRef | string");
    if ((props.vpcId !== undefined))
        ret.vpcId = cdk.getRefProperty(props.vpcId?.vpcRef, 'vpcId') ?? cdk.ensureStringOrUndefined(props.vpcId, "vpcId", "ec2.IVPCRef | string");
    if ((props.workspaceSecurityGroupId !== undefined))
        ret.workspaceSecurityGroupId = cdk.getRefProperty(props.workspaceSecurityGroupId?.securityGroupRef, 'securityGroupId') ?? cdk.ensureStringOrUndefined(props.workspaceSecurityGroupId, "workspaceSecurityGroupId", "ec2.ISecurityGroupRef | string");
    return ret;
}
/**
 * The `AWS::EMR::StudioSessionMapping` resource is an Amazon EMR resource type that maps a user or group to the Amazon EMR Studio specified by `StudioId` , and applies a session policy that defines Studio permissions for that user or group.
 *
 * @cloudformationResource AWS::EMR::StudioSessionMapping
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-studiosessionmapping.html
 */
class CfnStudioSessionMappingPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_emr.CfnStudioSessionMappingPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["identityName", "identityType", "sessionPolicyArn", "studioId"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::EMR::StudioSessionMapping`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_emr_CfnStudioSessionMappingMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnStudioSessionMappingPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnStudioSessionMappingMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnStudioSessionMapping.isCfnStudioSessionMapping(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnStudioSessionMappingPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnStudioSessionMappingPropsMixin = CfnStudioSessionMappingPropsMixin;
// @ts-ignore TS6133
function flattenCfnStudioSessionMappingMixinProps(props) {
    const ret = {};
    if ((props.sessionPolicyArn !== undefined))
        ret.sessionPolicyArn = cdk.getRefProperty(props.sessionPolicyArn?.managedPolicyRef, 'policyArn') ?? cdk.ensureStringOrUndefined(props.sessionPolicyArn, "sessionPolicyArn", "iam.IManagedPolicyRef | string");
    if ((props.studioId !== undefined))
        ret.studioId = cdk.getRefProperty(props.studioId?.studioRef, 'studioId') ?? cdk.ensureStringOrUndefined(props.studioId, "studioId", "emr.IStudioRef | string");
    return ret;
}
/**
 * http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-walworkspace.html.
 *
 * @cloudformationResource AWS::EMR::WALWorkspace
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-walworkspace.html
 */
class CfnWALWorkspacePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_emr.CfnWALWorkspacePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["tags", "walWorkspaceName"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::EMR::WALWorkspace`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_emr_CfnWALWorkspaceMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnWALWorkspacePropsMixin);
            }
            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.CfnWALWorkspace.isCfnWALWorkspace(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnWALWorkspacePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnWALWorkspacePropsMixin = CfnWALWorkspacePropsMixin;
