// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function mskClusterBrokerNodeGroupInfoToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        az_distribution: cdktf.stringToTerraform(struct.azDistribution),
        client_subnets: cdktf.listMapper(cdktf.stringToTerraform)(struct.clientSubnets),
        ebs_volume_size: cdktf.numberToTerraform(struct.ebsVolumeSize),
        instance_type: cdktf.stringToTerraform(struct.instanceType),
        security_groups: cdktf.listMapper(cdktf.stringToTerraform)(struct.securityGroups),
    };
}
export class MskClusterBrokerNodeGroupInfoOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._azDistribution !== undefined) {
            hasAnyValues = true;
            internalValueResult.azDistribution = this._azDistribution;
        }
        if (this._clientSubnets !== undefined) {
            hasAnyValues = true;
            internalValueResult.clientSubnets = this._clientSubnets;
        }
        if (this._ebsVolumeSize !== undefined) {
            hasAnyValues = true;
            internalValueResult.ebsVolumeSize = this._ebsVolumeSize;
        }
        if (this._instanceType !== undefined) {
            hasAnyValues = true;
            internalValueResult.instanceType = this._instanceType;
        }
        if (this._securityGroups !== undefined) {
            hasAnyValues = true;
            internalValueResult.securityGroups = this._securityGroups;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._azDistribution = undefined;
            this._clientSubnets = undefined;
            this._ebsVolumeSize = undefined;
            this._instanceType = undefined;
            this._securityGroups = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._azDistribution = value.azDistribution;
            this._clientSubnets = value.clientSubnets;
            this._ebsVolumeSize = value.ebsVolumeSize;
            this._instanceType = value.instanceType;
            this._securityGroups = value.securityGroups;
        }
    }
    // az_distribution - computed: false, optional: true, required: false
    _azDistribution;
    get azDistribution() {
        return this.getStringAttribute('az_distribution');
    }
    set azDistribution(value) {
        this._azDistribution = value;
    }
    resetAzDistribution() {
        this._azDistribution = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get azDistributionInput() {
        return this._azDistribution;
    }
    // client_subnets - computed: false, optional: false, required: true
    _clientSubnets;
    get clientSubnets() {
        return cdktf.Fn.tolist(this.getListAttribute('client_subnets'));
    }
    set clientSubnets(value) {
        this._clientSubnets = value;
    }
    // Temporarily expose input value. Use with caution.
    get clientSubnetsInput() {
        return this._clientSubnets;
    }
    // ebs_volume_size - computed: false, optional: false, required: true
    _ebsVolumeSize;
    get ebsVolumeSize() {
        return this.getNumberAttribute('ebs_volume_size');
    }
    set ebsVolumeSize(value) {
        this._ebsVolumeSize = value;
    }
    // Temporarily expose input value. Use with caution.
    get ebsVolumeSizeInput() {
        return this._ebsVolumeSize;
    }
    // instance_type - computed: false, optional: false, required: true
    _instanceType;
    get instanceType() {
        return this.getStringAttribute('instance_type');
    }
    set instanceType(value) {
        this._instanceType = value;
    }
    // Temporarily expose input value. Use with caution.
    get instanceTypeInput() {
        return this._instanceType;
    }
    // security_groups - computed: false, optional: false, required: true
    _securityGroups;
    get securityGroups() {
        return cdktf.Fn.tolist(this.getListAttribute('security_groups'));
    }
    set securityGroups(value) {
        this._securityGroups = value;
    }
    // Temporarily expose input value. Use with caution.
    get securityGroupsInput() {
        return this._securityGroups;
    }
}
export function mskClusterClientAuthenticationSaslToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        iam: cdktf.booleanToTerraform(struct.iam),
        scram: cdktf.booleanToTerraform(struct.scram),
    };
}
export class MskClusterClientAuthenticationSaslOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._iam !== undefined) {
            hasAnyValues = true;
            internalValueResult.iam = this._iam;
        }
        if (this._scram !== undefined) {
            hasAnyValues = true;
            internalValueResult.scram = this._scram;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._iam = undefined;
            this._scram = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._iam = value.iam;
            this._scram = value.scram;
        }
    }
    // iam - computed: false, optional: true, required: false
    _iam;
    get iam() {
        return this.getBooleanAttribute('iam');
    }
    set iam(value) {
        this._iam = value;
    }
    resetIam() {
        this._iam = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get iamInput() {
        return this._iam;
    }
    // scram - computed: false, optional: true, required: false
    _scram;
    get scram() {
        return this.getBooleanAttribute('scram');
    }
    set scram(value) {
        this._scram = value;
    }
    resetScram() {
        this._scram = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get scramInput() {
        return this._scram;
    }
}
export function mskClusterClientAuthenticationTlsToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        certificate_authority_arns: cdktf.listMapper(cdktf.stringToTerraform)(struct.certificateAuthorityArns),
    };
}
export class MskClusterClientAuthenticationTlsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._certificateAuthorityArns !== undefined) {
            hasAnyValues = true;
            internalValueResult.certificateAuthorityArns = this._certificateAuthorityArns;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._certificateAuthorityArns = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._certificateAuthorityArns = value.certificateAuthorityArns;
        }
    }
    // certificate_authority_arns - computed: false, optional: true, required: false
    _certificateAuthorityArns;
    get certificateAuthorityArns() {
        return cdktf.Fn.tolist(this.getListAttribute('certificate_authority_arns'));
    }
    set certificateAuthorityArns(value) {
        this._certificateAuthorityArns = value;
    }
    resetCertificateAuthorityArns() {
        this._certificateAuthorityArns = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get certificateAuthorityArnsInput() {
        return this._certificateAuthorityArns;
    }
}
export function mskClusterClientAuthenticationToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        sasl: mskClusterClientAuthenticationSaslToTerraform(struct.sasl),
        tls: mskClusterClientAuthenticationTlsToTerraform(struct.tls),
    };
}
export class MskClusterClientAuthenticationOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._sasl?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.sasl = this._sasl?.internalValue;
        }
        if (this._tls?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.tls = this._tls?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._sasl.internalValue = undefined;
            this._tls.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._sasl.internalValue = value.sasl;
            this._tls.internalValue = value.tls;
        }
    }
    // sasl - computed: false, optional: true, required: false
    _sasl = new MskClusterClientAuthenticationSaslOutputReference(this, "sasl", true);
    get sasl() {
        return this._sasl;
    }
    putSasl(value) {
        this._sasl.internalValue = value;
    }
    resetSasl() {
        this._sasl.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get saslInput() {
        return this._sasl.internalValue;
    }
    // tls - computed: false, optional: true, required: false
    _tls = new MskClusterClientAuthenticationTlsOutputReference(this, "tls", true);
    get tls() {
        return this._tls;
    }
    putTls(value) {
        this._tls.internalValue = value;
    }
    resetTls() {
        this._tls.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tlsInput() {
        return this._tls.internalValue;
    }
}
export function mskClusterConfigurationInfoToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        arn: cdktf.stringToTerraform(struct.arn),
        revision: cdktf.numberToTerraform(struct.revision),
    };
}
export class MskClusterConfigurationInfoOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._arn !== undefined) {
            hasAnyValues = true;
            internalValueResult.arn = this._arn;
        }
        if (this._revision !== undefined) {
            hasAnyValues = true;
            internalValueResult.revision = this._revision;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._arn = undefined;
            this._revision = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._arn = value.arn;
            this._revision = value.revision;
        }
    }
    // arn - computed: false, optional: false, required: true
    _arn;
    get arn() {
        return this.getStringAttribute('arn');
    }
    set arn(value) {
        this._arn = value;
    }
    // Temporarily expose input value. Use with caution.
    get arnInput() {
        return this._arn;
    }
    // revision - computed: false, optional: false, required: true
    _revision;
    get revision() {
        return this.getNumberAttribute('revision');
    }
    set revision(value) {
        this._revision = value;
    }
    // Temporarily expose input value. Use with caution.
    get revisionInput() {
        return this._revision;
    }
}
export function mskClusterEncryptionInfoEncryptionInTransitToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        client_broker: cdktf.stringToTerraform(struct.clientBroker),
        in_cluster: cdktf.booleanToTerraform(struct.inCluster),
    };
}
export class MskClusterEncryptionInfoEncryptionInTransitOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._clientBroker !== undefined) {
            hasAnyValues = true;
            internalValueResult.clientBroker = this._clientBroker;
        }
        if (this._inCluster !== undefined) {
            hasAnyValues = true;
            internalValueResult.inCluster = this._inCluster;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._clientBroker = undefined;
            this._inCluster = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._clientBroker = value.clientBroker;
            this._inCluster = value.inCluster;
        }
    }
    // client_broker - computed: false, optional: true, required: false
    _clientBroker;
    get clientBroker() {
        return this.getStringAttribute('client_broker');
    }
    set clientBroker(value) {
        this._clientBroker = value;
    }
    resetClientBroker() {
        this._clientBroker = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get clientBrokerInput() {
        return this._clientBroker;
    }
    // in_cluster - computed: false, optional: true, required: false
    _inCluster;
    get inCluster() {
        return this.getBooleanAttribute('in_cluster');
    }
    set inCluster(value) {
        this._inCluster = value;
    }
    resetInCluster() {
        this._inCluster = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get inClusterInput() {
        return this._inCluster;
    }
}
export function mskClusterEncryptionInfoToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        encryption_at_rest_kms_key_arn: cdktf.stringToTerraform(struct.encryptionAtRestKmsKeyArn),
        encryption_in_transit: mskClusterEncryptionInfoEncryptionInTransitToTerraform(struct.encryptionInTransit),
    };
}
export class MskClusterEncryptionInfoOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._encryptionAtRestKmsKeyArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.encryptionAtRestKmsKeyArn = this._encryptionAtRestKmsKeyArn;
        }
        if (this._encryptionInTransit?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.encryptionInTransit = this._encryptionInTransit?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._encryptionAtRestKmsKeyArn = undefined;
            this._encryptionInTransit.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._encryptionAtRestKmsKeyArn = value.encryptionAtRestKmsKeyArn;
            this._encryptionInTransit.internalValue = value.encryptionInTransit;
        }
    }
    // encryption_at_rest_kms_key_arn - computed: true, optional: true, required: false
    _encryptionAtRestKmsKeyArn;
    get encryptionAtRestKmsKeyArn() {
        return this.getStringAttribute('encryption_at_rest_kms_key_arn');
    }
    set encryptionAtRestKmsKeyArn(value) {
        this._encryptionAtRestKmsKeyArn = value;
    }
    resetEncryptionAtRestKmsKeyArn() {
        this._encryptionAtRestKmsKeyArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get encryptionAtRestKmsKeyArnInput() {
        return this._encryptionAtRestKmsKeyArn;
    }
    // encryption_in_transit - computed: false, optional: true, required: false
    _encryptionInTransit = new MskClusterEncryptionInfoEncryptionInTransitOutputReference(this, "encryption_in_transit", true);
    get encryptionInTransit() {
        return this._encryptionInTransit;
    }
    putEncryptionInTransit(value) {
        this._encryptionInTransit.internalValue = value;
    }
    resetEncryptionInTransit() {
        this._encryptionInTransit.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get encryptionInTransitInput() {
        return this._encryptionInTransit.internalValue;
    }
}
export function mskClusterLoggingInfoBrokerLogsCloudwatchLogsToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        enabled: cdktf.booleanToTerraform(struct.enabled),
        log_group: cdktf.stringToTerraform(struct.logGroup),
    };
}
export class MskClusterLoggingInfoBrokerLogsCloudwatchLogsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._enabled !== undefined) {
            hasAnyValues = true;
            internalValueResult.enabled = this._enabled;
        }
        if (this._logGroup !== undefined) {
            hasAnyValues = true;
            internalValueResult.logGroup = this._logGroup;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._enabled = undefined;
            this._logGroup = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._enabled = value.enabled;
            this._logGroup = value.logGroup;
        }
    }
    // enabled - computed: false, optional: false, required: true
    _enabled;
    get enabled() {
        return this.getBooleanAttribute('enabled');
    }
    set enabled(value) {
        this._enabled = value;
    }
    // Temporarily expose input value. Use with caution.
    get enabledInput() {
        return this._enabled;
    }
    // log_group - computed: false, optional: true, required: false
    _logGroup;
    get logGroup() {
        return this.getStringAttribute('log_group');
    }
    set logGroup(value) {
        this._logGroup = value;
    }
    resetLogGroup() {
        this._logGroup = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get logGroupInput() {
        return this._logGroup;
    }
}
export function mskClusterLoggingInfoBrokerLogsFirehoseToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        delivery_stream: cdktf.stringToTerraform(struct.deliveryStream),
        enabled: cdktf.booleanToTerraform(struct.enabled),
    };
}
export class MskClusterLoggingInfoBrokerLogsFirehoseOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._deliveryStream !== undefined) {
            hasAnyValues = true;
            internalValueResult.deliveryStream = this._deliveryStream;
        }
        if (this._enabled !== undefined) {
            hasAnyValues = true;
            internalValueResult.enabled = this._enabled;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._deliveryStream = undefined;
            this._enabled = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._deliveryStream = value.deliveryStream;
            this._enabled = value.enabled;
        }
    }
    // delivery_stream - computed: false, optional: true, required: false
    _deliveryStream;
    get deliveryStream() {
        return this.getStringAttribute('delivery_stream');
    }
    set deliveryStream(value) {
        this._deliveryStream = value;
    }
    resetDeliveryStream() {
        this._deliveryStream = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deliveryStreamInput() {
        return this._deliveryStream;
    }
    // enabled - computed: false, optional: false, required: true
    _enabled;
    get enabled() {
        return this.getBooleanAttribute('enabled');
    }
    set enabled(value) {
        this._enabled = value;
    }
    // Temporarily expose input value. Use with caution.
    get enabledInput() {
        return this._enabled;
    }
}
export function mskClusterLoggingInfoBrokerLogsS3ToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        bucket: cdktf.stringToTerraform(struct.bucket),
        enabled: cdktf.booleanToTerraform(struct.enabled),
        prefix: cdktf.stringToTerraform(struct.prefix),
    };
}
export class MskClusterLoggingInfoBrokerLogsS3OutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._bucket !== undefined) {
            hasAnyValues = true;
            internalValueResult.bucket = this._bucket;
        }
        if (this._enabled !== undefined) {
            hasAnyValues = true;
            internalValueResult.enabled = this._enabled;
        }
        if (this._prefix !== undefined) {
            hasAnyValues = true;
            internalValueResult.prefix = this._prefix;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._bucket = undefined;
            this._enabled = undefined;
            this._prefix = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._bucket = value.bucket;
            this._enabled = value.enabled;
            this._prefix = value.prefix;
        }
    }
    // bucket - computed: false, optional: true, required: false
    _bucket;
    get bucket() {
        return this.getStringAttribute('bucket');
    }
    set bucket(value) {
        this._bucket = value;
    }
    resetBucket() {
        this._bucket = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get bucketInput() {
        return this._bucket;
    }
    // enabled - computed: false, optional: false, required: true
    _enabled;
    get enabled() {
        return this.getBooleanAttribute('enabled');
    }
    set enabled(value) {
        this._enabled = value;
    }
    // Temporarily expose input value. Use with caution.
    get enabledInput() {
        return this._enabled;
    }
    // prefix - computed: false, optional: true, required: false
    _prefix;
    get prefix() {
        return this.getStringAttribute('prefix');
    }
    set prefix(value) {
        this._prefix = value;
    }
    resetPrefix() {
        this._prefix = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get prefixInput() {
        return this._prefix;
    }
}
export function mskClusterLoggingInfoBrokerLogsToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        cloudwatch_logs: mskClusterLoggingInfoBrokerLogsCloudwatchLogsToTerraform(struct.cloudwatchLogs),
        firehose: mskClusterLoggingInfoBrokerLogsFirehoseToTerraform(struct.firehose),
        s3: mskClusterLoggingInfoBrokerLogsS3ToTerraform(struct.s3),
    };
}
export class MskClusterLoggingInfoBrokerLogsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._cloudwatchLogs?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.cloudwatchLogs = this._cloudwatchLogs?.internalValue;
        }
        if (this._firehose?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.firehose = this._firehose?.internalValue;
        }
        if (this._s3?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.s3 = this._s3?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._cloudwatchLogs.internalValue = undefined;
            this._firehose.internalValue = undefined;
            this._s3.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._cloudwatchLogs.internalValue = value.cloudwatchLogs;
            this._firehose.internalValue = value.firehose;
            this._s3.internalValue = value.s3;
        }
    }
    // cloudwatch_logs - computed: false, optional: true, required: false
    _cloudwatchLogs = new MskClusterLoggingInfoBrokerLogsCloudwatchLogsOutputReference(this, "cloudwatch_logs", true);
    get cloudwatchLogs() {
        return this._cloudwatchLogs;
    }
    putCloudwatchLogs(value) {
        this._cloudwatchLogs.internalValue = value;
    }
    resetCloudwatchLogs() {
        this._cloudwatchLogs.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cloudwatchLogsInput() {
        return this._cloudwatchLogs.internalValue;
    }
    // firehose - computed: false, optional: true, required: false
    _firehose = new MskClusterLoggingInfoBrokerLogsFirehoseOutputReference(this, "firehose", true);
    get firehose() {
        return this._firehose;
    }
    putFirehose(value) {
        this._firehose.internalValue = value;
    }
    resetFirehose() {
        this._firehose.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get firehoseInput() {
        return this._firehose.internalValue;
    }
    // s3 - computed: false, optional: true, required: false
    _s3 = new MskClusterLoggingInfoBrokerLogsS3OutputReference(this, "s3", true);
    get s3() {
        return this._s3;
    }
    putS3(value) {
        this._s3.internalValue = value;
    }
    resetS3() {
        this._s3.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get s3Input() {
        return this._s3.internalValue;
    }
}
export function mskClusterLoggingInfoToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        broker_logs: mskClusterLoggingInfoBrokerLogsToTerraform(struct.brokerLogs),
    };
}
export class MskClusterLoggingInfoOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._brokerLogs?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.brokerLogs = this._brokerLogs?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._brokerLogs.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._brokerLogs.internalValue = value.brokerLogs;
        }
    }
    // broker_logs - computed: false, optional: false, required: true
    _brokerLogs = new MskClusterLoggingInfoBrokerLogsOutputReference(this, "broker_logs", true);
    get brokerLogs() {
        return this._brokerLogs;
    }
    putBrokerLogs(value) {
        this._brokerLogs.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get brokerLogsInput() {
        return this._brokerLogs.internalValue;
    }
}
export function mskClusterOpenMonitoringPrometheusJmxExporterToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        enabled_in_broker: cdktf.booleanToTerraform(struct.enabledInBroker),
    };
}
export class MskClusterOpenMonitoringPrometheusJmxExporterOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._enabledInBroker !== undefined) {
            hasAnyValues = true;
            internalValueResult.enabledInBroker = this._enabledInBroker;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._enabledInBroker = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._enabledInBroker = value.enabledInBroker;
        }
    }
    // enabled_in_broker - computed: false, optional: false, required: true
    _enabledInBroker;
    get enabledInBroker() {
        return this.getBooleanAttribute('enabled_in_broker');
    }
    set enabledInBroker(value) {
        this._enabledInBroker = value;
    }
    // Temporarily expose input value. Use with caution.
    get enabledInBrokerInput() {
        return this._enabledInBroker;
    }
}
export function mskClusterOpenMonitoringPrometheusNodeExporterToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        enabled_in_broker: cdktf.booleanToTerraform(struct.enabledInBroker),
    };
}
export class MskClusterOpenMonitoringPrometheusNodeExporterOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._enabledInBroker !== undefined) {
            hasAnyValues = true;
            internalValueResult.enabledInBroker = this._enabledInBroker;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._enabledInBroker = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._enabledInBroker = value.enabledInBroker;
        }
    }
    // enabled_in_broker - computed: false, optional: false, required: true
    _enabledInBroker;
    get enabledInBroker() {
        return this.getBooleanAttribute('enabled_in_broker');
    }
    set enabledInBroker(value) {
        this._enabledInBroker = value;
    }
    // Temporarily expose input value. Use with caution.
    get enabledInBrokerInput() {
        return this._enabledInBroker;
    }
}
export function mskClusterOpenMonitoringPrometheusToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        jmx_exporter: mskClusterOpenMonitoringPrometheusJmxExporterToTerraform(struct.jmxExporter),
        node_exporter: mskClusterOpenMonitoringPrometheusNodeExporterToTerraform(struct.nodeExporter),
    };
}
export class MskClusterOpenMonitoringPrometheusOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._jmxExporter?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.jmxExporter = this._jmxExporter?.internalValue;
        }
        if (this._nodeExporter?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.nodeExporter = this._nodeExporter?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._jmxExporter.internalValue = undefined;
            this._nodeExporter.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._jmxExporter.internalValue = value.jmxExporter;
            this._nodeExporter.internalValue = value.nodeExporter;
        }
    }
    // jmx_exporter - computed: false, optional: true, required: false
    _jmxExporter = new MskClusterOpenMonitoringPrometheusJmxExporterOutputReference(this, "jmx_exporter", true);
    get jmxExporter() {
        return this._jmxExporter;
    }
    putJmxExporter(value) {
        this._jmxExporter.internalValue = value;
    }
    resetJmxExporter() {
        this._jmxExporter.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get jmxExporterInput() {
        return this._jmxExporter.internalValue;
    }
    // node_exporter - computed: false, optional: true, required: false
    _nodeExporter = new MskClusterOpenMonitoringPrometheusNodeExporterOutputReference(this, "node_exporter", true);
    get nodeExporter() {
        return this._nodeExporter;
    }
    putNodeExporter(value) {
        this._nodeExporter.internalValue = value;
    }
    resetNodeExporter() {
        this._nodeExporter.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get nodeExporterInput() {
        return this._nodeExporter.internalValue;
    }
}
export function mskClusterOpenMonitoringToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        prometheus: mskClusterOpenMonitoringPrometheusToTerraform(struct.prometheus),
    };
}
export class MskClusterOpenMonitoringOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._prometheus?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.prometheus = this._prometheus?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._prometheus.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._prometheus.internalValue = value.prometheus;
        }
    }
    // prometheus - computed: false, optional: false, required: true
    _prometheus = new MskClusterOpenMonitoringPrometheusOutputReference(this, "prometheus", true);
    get prometheus() {
        return this._prometheus;
    }
    putPrometheus(value) {
        this._prometheus.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get prometheusInput() {
        return this._prometheus.internalValue;
    }
}
export function mskClusterTimeoutsToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        create: cdktf.stringToTerraform(struct.create),
        delete: cdktf.stringToTerraform(struct.delete),
        update: cdktf.stringToTerraform(struct.update),
    };
}
export class MskClusterTimeoutsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._create !== undefined) {
            hasAnyValues = true;
            internalValueResult.create = this._create;
        }
        if (this._delete !== undefined) {
            hasAnyValues = true;
            internalValueResult.delete = this._delete;
        }
        if (this._update !== undefined) {
            hasAnyValues = true;
            internalValueResult.update = this._update;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._create = undefined;
            this._delete = undefined;
            this._update = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._create = value.create;
            this._delete = value.delete;
            this._update = value.update;
        }
    }
    // create - computed: false, optional: true, required: false
    _create;
    get create() {
        return this.getStringAttribute('create');
    }
    set create(value) {
        this._create = value;
    }
    resetCreate() {
        this._create = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get createInput() {
        return this._create;
    }
    // delete - computed: false, optional: true, required: false
    _delete;
    get delete() {
        return this.getStringAttribute('delete');
    }
    set delete(value) {
        this._delete = value;
    }
    resetDelete() {
        this._delete = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deleteInput() {
        return this._delete;
    }
    // update - computed: false, optional: true, required: false
    _update;
    get update() {
        return this.getStringAttribute('update');
    }
    set update(value) {
        this._update = value;
    }
    resetUpdate() {
        this._update = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get updateInput() {
        return this._update;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/msk_cluster aws_msk_cluster}
*/
export class MskCluster extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_msk_cluster";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/msk_cluster aws_msk_cluster} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options MskClusterConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_msk_cluster',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._clusterName = config.clusterName;
        this._enhancedMonitoring = config.enhancedMonitoring;
        this._kafkaVersion = config.kafkaVersion;
        this._numberOfBrokerNodes = config.numberOfBrokerNodes;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._brokerNodeGroupInfo.internalValue = config.brokerNodeGroupInfo;
        this._clientAuthentication.internalValue = config.clientAuthentication;
        this._configurationInfo.internalValue = config.configurationInfo;
        this._encryptionInfo.internalValue = config.encryptionInfo;
        this._loggingInfo.internalValue = config.loggingInfo;
        this._openMonitoring.internalValue = config.openMonitoring;
        this._timeouts.internalValue = config.timeouts;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // bootstrap_brokers - computed: true, optional: false, required: false
    get bootstrapBrokers() {
        return this.getStringAttribute('bootstrap_brokers');
    }
    // bootstrap_brokers_sasl_iam - computed: true, optional: false, required: false
    get bootstrapBrokersSaslIam() {
        return this.getStringAttribute('bootstrap_brokers_sasl_iam');
    }
    // bootstrap_brokers_sasl_scram - computed: true, optional: false, required: false
    get bootstrapBrokersSaslScram() {
        return this.getStringAttribute('bootstrap_brokers_sasl_scram');
    }
    // bootstrap_brokers_tls - computed: true, optional: false, required: false
    get bootstrapBrokersTls() {
        return this.getStringAttribute('bootstrap_brokers_tls');
    }
    // cluster_name - computed: false, optional: false, required: true
    _clusterName;
    get clusterName() {
        return this.getStringAttribute('cluster_name');
    }
    set clusterName(value) {
        this._clusterName = value;
    }
    // Temporarily expose input value. Use with caution.
    get clusterNameInput() {
        return this._clusterName;
    }
    // current_version - computed: true, optional: false, required: false
    get currentVersion() {
        return this.getStringAttribute('current_version');
    }
    // enhanced_monitoring - computed: false, optional: true, required: false
    _enhancedMonitoring;
    get enhancedMonitoring() {
        return this.getStringAttribute('enhanced_monitoring');
    }
    set enhancedMonitoring(value) {
        this._enhancedMonitoring = value;
    }
    resetEnhancedMonitoring() {
        this._enhancedMonitoring = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get enhancedMonitoringInput() {
        return this._enhancedMonitoring;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // kafka_version - computed: false, optional: false, required: true
    _kafkaVersion;
    get kafkaVersion() {
        return this.getStringAttribute('kafka_version');
    }
    set kafkaVersion(value) {
        this._kafkaVersion = value;
    }
    // Temporarily expose input value. Use with caution.
    get kafkaVersionInput() {
        return this._kafkaVersion;
    }
    // number_of_broker_nodes - computed: false, optional: false, required: true
    _numberOfBrokerNodes;
    get numberOfBrokerNodes() {
        return this.getNumberAttribute('number_of_broker_nodes');
    }
    set numberOfBrokerNodes(value) {
        this._numberOfBrokerNodes = value;
    }
    // Temporarily expose input value. Use with caution.
    get numberOfBrokerNodesInput() {
        return this._numberOfBrokerNodes;
    }
    // tags - computed: false, optional: true, required: false
    _tags;
    get tags() {
        return this.getStringMapAttribute('tags');
    }
    set tags(value) {
        this._tags = value;
    }
    resetTags() {
        this._tags = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsInput() {
        return this._tags;
    }
    // tags_all - computed: true, optional: true, required: false
    _tagsAll;
    get tagsAll() {
        return this.getStringMapAttribute('tags_all');
    }
    set tagsAll(value) {
        this._tagsAll = value;
    }
    resetTagsAll() {
        this._tagsAll = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsAllInput() {
        return this._tagsAll;
    }
    // zookeeper_connect_string - computed: true, optional: false, required: false
    get zookeeperConnectString() {
        return this.getStringAttribute('zookeeper_connect_string');
    }
    // zookeeper_connect_string_tls - computed: true, optional: false, required: false
    get zookeeperConnectStringTls() {
        return this.getStringAttribute('zookeeper_connect_string_tls');
    }
    // broker_node_group_info - computed: false, optional: false, required: true
    _brokerNodeGroupInfo = new MskClusterBrokerNodeGroupInfoOutputReference(this, "broker_node_group_info", true);
    get brokerNodeGroupInfo() {
        return this._brokerNodeGroupInfo;
    }
    putBrokerNodeGroupInfo(value) {
        this._brokerNodeGroupInfo.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get brokerNodeGroupInfoInput() {
        return this._brokerNodeGroupInfo.internalValue;
    }
    // client_authentication - computed: false, optional: true, required: false
    _clientAuthentication = new MskClusterClientAuthenticationOutputReference(this, "client_authentication", true);
    get clientAuthentication() {
        return this._clientAuthentication;
    }
    putClientAuthentication(value) {
        this._clientAuthentication.internalValue = value;
    }
    resetClientAuthentication() {
        this._clientAuthentication.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get clientAuthenticationInput() {
        return this._clientAuthentication.internalValue;
    }
    // configuration_info - computed: false, optional: true, required: false
    _configurationInfo = new MskClusterConfigurationInfoOutputReference(this, "configuration_info", true);
    get configurationInfo() {
        return this._configurationInfo;
    }
    putConfigurationInfo(value) {
        this._configurationInfo.internalValue = value;
    }
    resetConfigurationInfo() {
        this._configurationInfo.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get configurationInfoInput() {
        return this._configurationInfo.internalValue;
    }
    // encryption_info - computed: false, optional: true, required: false
    _encryptionInfo = new MskClusterEncryptionInfoOutputReference(this, "encryption_info", true);
    get encryptionInfo() {
        return this._encryptionInfo;
    }
    putEncryptionInfo(value) {
        this._encryptionInfo.internalValue = value;
    }
    resetEncryptionInfo() {
        this._encryptionInfo.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get encryptionInfoInput() {
        return this._encryptionInfo.internalValue;
    }
    // logging_info - computed: false, optional: true, required: false
    _loggingInfo = new MskClusterLoggingInfoOutputReference(this, "logging_info", true);
    get loggingInfo() {
        return this._loggingInfo;
    }
    putLoggingInfo(value) {
        this._loggingInfo.internalValue = value;
    }
    resetLoggingInfo() {
        this._loggingInfo.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get loggingInfoInput() {
        return this._loggingInfo.internalValue;
    }
    // open_monitoring - computed: false, optional: true, required: false
    _openMonitoring = new MskClusterOpenMonitoringOutputReference(this, "open_monitoring", true);
    get openMonitoring() {
        return this._openMonitoring;
    }
    putOpenMonitoring(value) {
        this._openMonitoring.internalValue = value;
    }
    resetOpenMonitoring() {
        this._openMonitoring.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get openMonitoringInput() {
        return this._openMonitoring.internalValue;
    }
    // timeouts - computed: false, optional: true, required: false
    _timeouts = new MskClusterTimeoutsOutputReference(this, "timeouts", true);
    get timeouts() {
        return this._timeouts;
    }
    putTimeouts(value) {
        this._timeouts.internalValue = value;
    }
    resetTimeouts() {
        this._timeouts.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get timeoutsInput() {
        return this._timeouts.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            cluster_name: cdktf.stringToTerraform(this._clusterName),
            enhanced_monitoring: cdktf.stringToTerraform(this._enhancedMonitoring),
            kafka_version: cdktf.stringToTerraform(this._kafkaVersion),
            number_of_broker_nodes: cdktf.numberToTerraform(this._numberOfBrokerNodes),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            broker_node_group_info: mskClusterBrokerNodeGroupInfoToTerraform(this._brokerNodeGroupInfo.internalValue),
            client_authentication: mskClusterClientAuthenticationToTerraform(this._clientAuthentication.internalValue),
            configuration_info: mskClusterConfigurationInfoToTerraform(this._configurationInfo.internalValue),
            encryption_info: mskClusterEncryptionInfoToTerraform(this._encryptionInfo.internalValue),
            logging_info: mskClusterLoggingInfoToTerraform(this._loggingInfo.internalValue),
            open_monitoring: mskClusterOpenMonitoringToTerraform(this._openMonitoring.internalValue),
            timeouts: mskClusterTimeoutsToTerraform(this._timeouts.internalValue),
        };
    }
}
//# sourceMappingURL=msk-cluster.js.map