// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function kinesisAnalyticsApplicationCloudwatchLoggingOptionsToTerraform(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 {
        log_stream_arn: cdktf.stringToTerraform(struct.logStreamArn),
        role_arn: cdktf.stringToTerraform(struct.roleArn),
    };
}
export class KinesisAnalyticsApplicationCloudwatchLoggingOptionsOutputReference 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._logStreamArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.logStreamArn = this._logStreamArn;
        }
        if (this._roleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.roleArn = this._roleArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._logStreamArn = undefined;
            this._roleArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._logStreamArn = value.logStreamArn;
            this._roleArn = value.roleArn;
        }
    }
    // id - computed: true, optional: false, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // log_stream_arn - computed: false, optional: false, required: true
    _logStreamArn;
    get logStreamArn() {
        return this.getStringAttribute('log_stream_arn');
    }
    set logStreamArn(value) {
        this._logStreamArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get logStreamArnInput() {
        return this._logStreamArn;
    }
    // role_arn - computed: false, optional: false, required: true
    _roleArn;
    get roleArn() {
        return this.getStringAttribute('role_arn');
    }
    set roleArn(value) {
        this._roleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get roleArnInput() {
        return this._roleArn;
    }
}
export function kinesisAnalyticsApplicationInputsKinesisFirehoseToTerraform(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 {
        resource_arn: cdktf.stringToTerraform(struct.resourceArn),
        role_arn: cdktf.stringToTerraform(struct.roleArn),
    };
}
export class KinesisAnalyticsApplicationInputsKinesisFirehoseOutputReference 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._resourceArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.resourceArn = this._resourceArn;
        }
        if (this._roleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.roleArn = this._roleArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._resourceArn = undefined;
            this._roleArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._resourceArn = value.resourceArn;
            this._roleArn = value.roleArn;
        }
    }
    // resource_arn - computed: false, optional: false, required: true
    _resourceArn;
    get resourceArn() {
        return this.getStringAttribute('resource_arn');
    }
    set resourceArn(value) {
        this._resourceArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get resourceArnInput() {
        return this._resourceArn;
    }
    // role_arn - computed: false, optional: false, required: true
    _roleArn;
    get roleArn() {
        return this.getStringAttribute('role_arn');
    }
    set roleArn(value) {
        this._roleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get roleArnInput() {
        return this._roleArn;
    }
}
export function kinesisAnalyticsApplicationInputsKinesisStreamToTerraform(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 {
        resource_arn: cdktf.stringToTerraform(struct.resourceArn),
        role_arn: cdktf.stringToTerraform(struct.roleArn),
    };
}
export class KinesisAnalyticsApplicationInputsKinesisStreamOutputReference 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._resourceArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.resourceArn = this._resourceArn;
        }
        if (this._roleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.roleArn = this._roleArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._resourceArn = undefined;
            this._roleArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._resourceArn = value.resourceArn;
            this._roleArn = value.roleArn;
        }
    }
    // resource_arn - computed: false, optional: false, required: true
    _resourceArn;
    get resourceArn() {
        return this.getStringAttribute('resource_arn');
    }
    set resourceArn(value) {
        this._resourceArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get resourceArnInput() {
        return this._resourceArn;
    }
    // role_arn - computed: false, optional: false, required: true
    _roleArn;
    get roleArn() {
        return this.getStringAttribute('role_arn');
    }
    set roleArn(value) {
        this._roleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get roleArnInput() {
        return this._roleArn;
    }
}
export function kinesisAnalyticsApplicationInputsParallelismToTerraform(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 {
        count: cdktf.numberToTerraform(struct.count),
    };
}
export class KinesisAnalyticsApplicationInputsParallelismOutputReference 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._count !== undefined) {
            hasAnyValues = true;
            internalValueResult.count = this._count;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._count = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._count = value.count;
        }
    }
    // count - computed: true, optional: true, required: false
    _count;
    get count() {
        return this.getNumberAttribute('count');
    }
    set count(value) {
        this._count = value;
    }
    resetCount() {
        this._count = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get countInput() {
        return this._count;
    }
}
export function kinesisAnalyticsApplicationInputsProcessingConfigurationLambdaToTerraform(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 {
        resource_arn: cdktf.stringToTerraform(struct.resourceArn),
        role_arn: cdktf.stringToTerraform(struct.roleArn),
    };
}
export class KinesisAnalyticsApplicationInputsProcessingConfigurationLambdaOutputReference 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._resourceArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.resourceArn = this._resourceArn;
        }
        if (this._roleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.roleArn = this._roleArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._resourceArn = undefined;
            this._roleArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._resourceArn = value.resourceArn;
            this._roleArn = value.roleArn;
        }
    }
    // resource_arn - computed: false, optional: false, required: true
    _resourceArn;
    get resourceArn() {
        return this.getStringAttribute('resource_arn');
    }
    set resourceArn(value) {
        this._resourceArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get resourceArnInput() {
        return this._resourceArn;
    }
    // role_arn - computed: false, optional: false, required: true
    _roleArn;
    get roleArn() {
        return this.getStringAttribute('role_arn');
    }
    set roleArn(value) {
        this._roleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get roleArnInput() {
        return this._roleArn;
    }
}
export function kinesisAnalyticsApplicationInputsProcessingConfigurationToTerraform(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 {
        lambda: kinesisAnalyticsApplicationInputsProcessingConfigurationLambdaToTerraform(struct.lambda),
    };
}
export class KinesisAnalyticsApplicationInputsProcessingConfigurationOutputReference 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._lambda?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.lambda = this._lambda?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._lambda.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._lambda.internalValue = value.lambda;
        }
    }
    // lambda - computed: false, optional: false, required: true
    _lambda = new KinesisAnalyticsApplicationInputsProcessingConfigurationLambdaOutputReference(this, "lambda", true);
    get lambda() {
        return this._lambda;
    }
    putLambda(value) {
        this._lambda.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get lambdaInput() {
        return this._lambda.internalValue;
    }
}
export function kinesisAnalyticsApplicationInputsSchemaRecordColumnsToTerraform(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 {
        mapping: cdktf.stringToTerraform(struct.mapping),
        name: cdktf.stringToTerraform(struct.name),
        sql_type: cdktf.stringToTerraform(struct.sqlType),
    };
}
export function kinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersCsvToTerraform(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 {
        record_column_delimiter: cdktf.stringToTerraform(struct.recordColumnDelimiter),
        record_row_delimiter: cdktf.stringToTerraform(struct.recordRowDelimiter),
    };
}
export class KinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersCsvOutputReference 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._recordColumnDelimiter !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordColumnDelimiter = this._recordColumnDelimiter;
        }
        if (this._recordRowDelimiter !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordRowDelimiter = this._recordRowDelimiter;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._recordColumnDelimiter = undefined;
            this._recordRowDelimiter = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._recordColumnDelimiter = value.recordColumnDelimiter;
            this._recordRowDelimiter = value.recordRowDelimiter;
        }
    }
    // record_column_delimiter - computed: false, optional: false, required: true
    _recordColumnDelimiter;
    get recordColumnDelimiter() {
        return this.getStringAttribute('record_column_delimiter');
    }
    set recordColumnDelimiter(value) {
        this._recordColumnDelimiter = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordColumnDelimiterInput() {
        return this._recordColumnDelimiter;
    }
    // record_row_delimiter - computed: false, optional: false, required: true
    _recordRowDelimiter;
    get recordRowDelimiter() {
        return this.getStringAttribute('record_row_delimiter');
    }
    set recordRowDelimiter(value) {
        this._recordRowDelimiter = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordRowDelimiterInput() {
        return this._recordRowDelimiter;
    }
}
export function kinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersJsonToTerraform(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 {
        record_row_path: cdktf.stringToTerraform(struct.recordRowPath),
    };
}
export class KinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersJsonOutputReference 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._recordRowPath !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordRowPath = this._recordRowPath;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._recordRowPath = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._recordRowPath = value.recordRowPath;
        }
    }
    // record_row_path - computed: false, optional: false, required: true
    _recordRowPath;
    get recordRowPath() {
        return this.getStringAttribute('record_row_path');
    }
    set recordRowPath(value) {
        this._recordRowPath = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordRowPathInput() {
        return this._recordRowPath;
    }
}
export function kinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersToTerraform(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 {
        csv: kinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersCsvToTerraform(struct.csv),
        json: kinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersJsonToTerraform(struct.json),
    };
}
export class KinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersOutputReference 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._csv?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.csv = this._csv?.internalValue;
        }
        if (this._json?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.json = this._json?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._csv.internalValue = undefined;
            this._json.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._csv.internalValue = value.csv;
            this._json.internalValue = value.json;
        }
    }
    // csv - computed: false, optional: true, required: false
    _csv = new KinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersCsvOutputReference(this, "csv", true);
    get csv() {
        return this._csv;
    }
    putCsv(value) {
        this._csv.internalValue = value;
    }
    resetCsv() {
        this._csv.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get csvInput() {
        return this._csv.internalValue;
    }
    // json - computed: false, optional: true, required: false
    _json = new KinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersJsonOutputReference(this, "json", true);
    get json() {
        return this._json;
    }
    putJson(value) {
        this._json.internalValue = value;
    }
    resetJson() {
        this._json.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get jsonInput() {
        return this._json.internalValue;
    }
}
export function kinesisAnalyticsApplicationInputsSchemaRecordFormatToTerraform(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 {
        mapping_parameters: kinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersToTerraform(struct.mappingParameters),
    };
}
export class KinesisAnalyticsApplicationInputsSchemaRecordFormatOutputReference 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._mappingParameters?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.mappingParameters = this._mappingParameters?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._mappingParameters.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._mappingParameters.internalValue = value.mappingParameters;
        }
    }
    // record_format_type - computed: true, optional: false, required: false
    get recordFormatType() {
        return this.getStringAttribute('record_format_type');
    }
    // mapping_parameters - computed: false, optional: true, required: false
    _mappingParameters = new KinesisAnalyticsApplicationInputsSchemaRecordFormatMappingParametersOutputReference(this, "mapping_parameters", true);
    get mappingParameters() {
        return this._mappingParameters;
    }
    putMappingParameters(value) {
        this._mappingParameters.internalValue = value;
    }
    resetMappingParameters() {
        this._mappingParameters.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get mappingParametersInput() {
        return this._mappingParameters.internalValue;
    }
}
export function kinesisAnalyticsApplicationInputsSchemaToTerraform(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 {
        record_encoding: cdktf.stringToTerraform(struct.recordEncoding),
        record_columns: cdktf.listMapper(kinesisAnalyticsApplicationInputsSchemaRecordColumnsToTerraform)(struct.recordColumns),
        record_format: kinesisAnalyticsApplicationInputsSchemaRecordFormatToTerraform(struct.recordFormat),
    };
}
export class KinesisAnalyticsApplicationInputsSchemaOutputReference 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._recordEncoding !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordEncoding = this._recordEncoding;
        }
        if (this._recordColumns !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordColumns = this._recordColumns;
        }
        if (this._recordFormat?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordFormat = this._recordFormat?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._recordEncoding = undefined;
            this._recordColumns = undefined;
            this._recordFormat.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._recordEncoding = value.recordEncoding;
            this._recordColumns = value.recordColumns;
            this._recordFormat.internalValue = value.recordFormat;
        }
    }
    // record_encoding - computed: false, optional: true, required: false
    _recordEncoding;
    get recordEncoding() {
        return this.getStringAttribute('record_encoding');
    }
    set recordEncoding(value) {
        this._recordEncoding = value;
    }
    resetRecordEncoding() {
        this._recordEncoding = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get recordEncodingInput() {
        return this._recordEncoding;
    }
    // record_columns - computed: false, optional: false, required: true
    _recordColumns;
    get recordColumns() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('record_columns');
    }
    set recordColumns(value) {
        this._recordColumns = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordColumnsInput() {
        return this._recordColumns;
    }
    // record_format - computed: false, optional: false, required: true
    _recordFormat = new KinesisAnalyticsApplicationInputsSchemaRecordFormatOutputReference(this, "record_format", true);
    get recordFormat() {
        return this._recordFormat;
    }
    putRecordFormat(value) {
        this._recordFormat.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordFormatInput() {
        return this._recordFormat.internalValue;
    }
}
export function kinesisAnalyticsApplicationInputsStartingPositionConfigurationToTerraform(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 {
        starting_position: cdktf.stringToTerraform(struct.startingPosition),
    };
}
export function kinesisAnalyticsApplicationInputsToTerraform(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 {
        name_prefix: cdktf.stringToTerraform(struct.namePrefix),
        kinesis_firehose: kinesisAnalyticsApplicationInputsKinesisFirehoseToTerraform(struct.kinesisFirehose),
        kinesis_stream: kinesisAnalyticsApplicationInputsKinesisStreamToTerraform(struct.kinesisStream),
        parallelism: kinesisAnalyticsApplicationInputsParallelismToTerraform(struct.parallelism),
        processing_configuration: kinesisAnalyticsApplicationInputsProcessingConfigurationToTerraform(struct.processingConfiguration),
        schema: kinesisAnalyticsApplicationInputsSchemaToTerraform(struct.schema),
        starting_position_configuration: cdktf.listMapper(kinesisAnalyticsApplicationInputsStartingPositionConfigurationToTerraform)(struct.startingPositionConfiguration),
    };
}
export class KinesisAnalyticsApplicationInputsOutputReference 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._namePrefix !== undefined) {
            hasAnyValues = true;
            internalValueResult.namePrefix = this._namePrefix;
        }
        if (this._kinesisFirehose?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.kinesisFirehose = this._kinesisFirehose?.internalValue;
        }
        if (this._kinesisStream?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.kinesisStream = this._kinesisStream?.internalValue;
        }
        if (this._parallelism?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.parallelism = this._parallelism?.internalValue;
        }
        if (this._processingConfiguration?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.processingConfiguration = this._processingConfiguration?.internalValue;
        }
        if (this._schema?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.schema = this._schema?.internalValue;
        }
        if (this._startingPositionConfiguration !== undefined) {
            hasAnyValues = true;
            internalValueResult.startingPositionConfiguration = this._startingPositionConfiguration;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._namePrefix = undefined;
            this._kinesisFirehose.internalValue = undefined;
            this._kinesisStream.internalValue = undefined;
            this._parallelism.internalValue = undefined;
            this._processingConfiguration.internalValue = undefined;
            this._schema.internalValue = undefined;
            this._startingPositionConfiguration = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._namePrefix = value.namePrefix;
            this._kinesisFirehose.internalValue = value.kinesisFirehose;
            this._kinesisStream.internalValue = value.kinesisStream;
            this._parallelism.internalValue = value.parallelism;
            this._processingConfiguration.internalValue = value.processingConfiguration;
            this._schema.internalValue = value.schema;
            this._startingPositionConfiguration = value.startingPositionConfiguration;
        }
    }
    // id - computed: true, optional: false, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // name_prefix - computed: false, optional: false, required: true
    _namePrefix;
    get namePrefix() {
        return this.getStringAttribute('name_prefix');
    }
    set namePrefix(value) {
        this._namePrefix = value;
    }
    // Temporarily expose input value. Use with caution.
    get namePrefixInput() {
        return this._namePrefix;
    }
    // stream_names - computed: true, optional: false, required: false
    get streamNames() {
        return this.getListAttribute('stream_names');
    }
    // kinesis_firehose - computed: false, optional: true, required: false
    _kinesisFirehose = new KinesisAnalyticsApplicationInputsKinesisFirehoseOutputReference(this, "kinesis_firehose", true);
    get kinesisFirehose() {
        return this._kinesisFirehose;
    }
    putKinesisFirehose(value) {
        this._kinesisFirehose.internalValue = value;
    }
    resetKinesisFirehose() {
        this._kinesisFirehose.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get kinesisFirehoseInput() {
        return this._kinesisFirehose.internalValue;
    }
    // kinesis_stream - computed: false, optional: true, required: false
    _kinesisStream = new KinesisAnalyticsApplicationInputsKinesisStreamOutputReference(this, "kinesis_stream", true);
    get kinesisStream() {
        return this._kinesisStream;
    }
    putKinesisStream(value) {
        this._kinesisStream.internalValue = value;
    }
    resetKinesisStream() {
        this._kinesisStream.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get kinesisStreamInput() {
        return this._kinesisStream.internalValue;
    }
    // parallelism - computed: false, optional: true, required: false
    _parallelism = new KinesisAnalyticsApplicationInputsParallelismOutputReference(this, "parallelism", true);
    get parallelism() {
        return this._parallelism;
    }
    putParallelism(value) {
        this._parallelism.internalValue = value;
    }
    resetParallelism() {
        this._parallelism.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get parallelismInput() {
        return this._parallelism.internalValue;
    }
    // processing_configuration - computed: false, optional: true, required: false
    _processingConfiguration = new KinesisAnalyticsApplicationInputsProcessingConfigurationOutputReference(this, "processing_configuration", true);
    get processingConfiguration() {
        return this._processingConfiguration;
    }
    putProcessingConfiguration(value) {
        this._processingConfiguration.internalValue = value;
    }
    resetProcessingConfiguration() {
        this._processingConfiguration.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get processingConfigurationInput() {
        return this._processingConfiguration.internalValue;
    }
    // schema - computed: false, optional: false, required: true
    _schema = new KinesisAnalyticsApplicationInputsSchemaOutputReference(this, "schema", true);
    get schema() {
        return this._schema;
    }
    putSchema(value) {
        this._schema.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get schemaInput() {
        return this._schema.internalValue;
    }
    // starting_position_configuration - computed: false, optional: true, required: false
    _startingPositionConfiguration;
    get startingPositionConfiguration() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('starting_position_configuration');
    }
    set startingPositionConfiguration(value) {
        this._startingPositionConfiguration = value;
    }
    resetStartingPositionConfiguration() {
        this._startingPositionConfiguration = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get startingPositionConfigurationInput() {
        return this._startingPositionConfiguration;
    }
}
export function kinesisAnalyticsApplicationOutputsKinesisFirehoseToTerraform(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 {
        resource_arn: cdktf.stringToTerraform(struct.resourceArn),
        role_arn: cdktf.stringToTerraform(struct.roleArn),
    };
}
export class KinesisAnalyticsApplicationOutputsKinesisFirehoseOutputReference 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._resourceArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.resourceArn = this._resourceArn;
        }
        if (this._roleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.roleArn = this._roleArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._resourceArn = undefined;
            this._roleArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._resourceArn = value.resourceArn;
            this._roleArn = value.roleArn;
        }
    }
    // resource_arn - computed: false, optional: false, required: true
    _resourceArn;
    get resourceArn() {
        return this.getStringAttribute('resource_arn');
    }
    set resourceArn(value) {
        this._resourceArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get resourceArnInput() {
        return this._resourceArn;
    }
    // role_arn - computed: false, optional: false, required: true
    _roleArn;
    get roleArn() {
        return this.getStringAttribute('role_arn');
    }
    set roleArn(value) {
        this._roleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get roleArnInput() {
        return this._roleArn;
    }
}
export function kinesisAnalyticsApplicationOutputsKinesisStreamToTerraform(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 {
        resource_arn: cdktf.stringToTerraform(struct.resourceArn),
        role_arn: cdktf.stringToTerraform(struct.roleArn),
    };
}
export class KinesisAnalyticsApplicationOutputsKinesisStreamOutputReference 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._resourceArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.resourceArn = this._resourceArn;
        }
        if (this._roleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.roleArn = this._roleArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._resourceArn = undefined;
            this._roleArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._resourceArn = value.resourceArn;
            this._roleArn = value.roleArn;
        }
    }
    // resource_arn - computed: false, optional: false, required: true
    _resourceArn;
    get resourceArn() {
        return this.getStringAttribute('resource_arn');
    }
    set resourceArn(value) {
        this._resourceArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get resourceArnInput() {
        return this._resourceArn;
    }
    // role_arn - computed: false, optional: false, required: true
    _roleArn;
    get roleArn() {
        return this.getStringAttribute('role_arn');
    }
    set roleArn(value) {
        this._roleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get roleArnInput() {
        return this._roleArn;
    }
}
export function kinesisAnalyticsApplicationOutputsLambdaToTerraform(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 {
        resource_arn: cdktf.stringToTerraform(struct.resourceArn),
        role_arn: cdktf.stringToTerraform(struct.roleArn),
    };
}
export class KinesisAnalyticsApplicationOutputsLambdaOutputReference 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._resourceArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.resourceArn = this._resourceArn;
        }
        if (this._roleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.roleArn = this._roleArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._resourceArn = undefined;
            this._roleArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._resourceArn = value.resourceArn;
            this._roleArn = value.roleArn;
        }
    }
    // resource_arn - computed: false, optional: false, required: true
    _resourceArn;
    get resourceArn() {
        return this.getStringAttribute('resource_arn');
    }
    set resourceArn(value) {
        this._resourceArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get resourceArnInput() {
        return this._resourceArn;
    }
    // role_arn - computed: false, optional: false, required: true
    _roleArn;
    get roleArn() {
        return this.getStringAttribute('role_arn');
    }
    set roleArn(value) {
        this._roleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get roleArnInput() {
        return this._roleArn;
    }
}
export function kinesisAnalyticsApplicationOutputsSchemaToTerraform(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 {
        record_format_type: cdktf.stringToTerraform(struct.recordFormatType),
    };
}
export class KinesisAnalyticsApplicationOutputsSchemaOutputReference 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._recordFormatType !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordFormatType = this._recordFormatType;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._recordFormatType = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._recordFormatType = value.recordFormatType;
        }
    }
    // record_format_type - computed: false, optional: false, required: true
    _recordFormatType;
    get recordFormatType() {
        return this.getStringAttribute('record_format_type');
    }
    set recordFormatType(value) {
        this._recordFormatType = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordFormatTypeInput() {
        return this._recordFormatType;
    }
}
export function kinesisAnalyticsApplicationOutputsToTerraform(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 {
        name: cdktf.stringToTerraform(struct.name),
        kinesis_firehose: kinesisAnalyticsApplicationOutputsKinesisFirehoseToTerraform(struct.kinesisFirehose),
        kinesis_stream: kinesisAnalyticsApplicationOutputsKinesisStreamToTerraform(struct.kinesisStream),
        lambda: kinesisAnalyticsApplicationOutputsLambdaToTerraform(struct.lambda),
        schema: kinesisAnalyticsApplicationOutputsSchemaToTerraform(struct.schema),
    };
}
export function kinesisAnalyticsApplicationReferenceDataSourcesS3ToTerraform(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_arn: cdktf.stringToTerraform(struct.bucketArn),
        file_key: cdktf.stringToTerraform(struct.fileKey),
        role_arn: cdktf.stringToTerraform(struct.roleArn),
    };
}
export class KinesisAnalyticsApplicationReferenceDataSourcesS3OutputReference 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._bucketArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.bucketArn = this._bucketArn;
        }
        if (this._fileKey !== undefined) {
            hasAnyValues = true;
            internalValueResult.fileKey = this._fileKey;
        }
        if (this._roleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.roleArn = this._roleArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._bucketArn = undefined;
            this._fileKey = undefined;
            this._roleArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._bucketArn = value.bucketArn;
            this._fileKey = value.fileKey;
            this._roleArn = value.roleArn;
        }
    }
    // bucket_arn - computed: false, optional: false, required: true
    _bucketArn;
    get bucketArn() {
        return this.getStringAttribute('bucket_arn');
    }
    set bucketArn(value) {
        this._bucketArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get bucketArnInput() {
        return this._bucketArn;
    }
    // file_key - computed: false, optional: false, required: true
    _fileKey;
    get fileKey() {
        return this.getStringAttribute('file_key');
    }
    set fileKey(value) {
        this._fileKey = value;
    }
    // Temporarily expose input value. Use with caution.
    get fileKeyInput() {
        return this._fileKey;
    }
    // role_arn - computed: false, optional: false, required: true
    _roleArn;
    get roleArn() {
        return this.getStringAttribute('role_arn');
    }
    set roleArn(value) {
        this._roleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get roleArnInput() {
        return this._roleArn;
    }
}
export function kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordColumnsToTerraform(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 {
        mapping: cdktf.stringToTerraform(struct.mapping),
        name: cdktf.stringToTerraform(struct.name),
        sql_type: cdktf.stringToTerraform(struct.sqlType),
    };
}
export function kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersCsvToTerraform(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 {
        record_column_delimiter: cdktf.stringToTerraform(struct.recordColumnDelimiter),
        record_row_delimiter: cdktf.stringToTerraform(struct.recordRowDelimiter),
    };
}
export class KinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersCsvOutputReference 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._recordColumnDelimiter !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordColumnDelimiter = this._recordColumnDelimiter;
        }
        if (this._recordRowDelimiter !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordRowDelimiter = this._recordRowDelimiter;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._recordColumnDelimiter = undefined;
            this._recordRowDelimiter = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._recordColumnDelimiter = value.recordColumnDelimiter;
            this._recordRowDelimiter = value.recordRowDelimiter;
        }
    }
    // record_column_delimiter - computed: false, optional: false, required: true
    _recordColumnDelimiter;
    get recordColumnDelimiter() {
        return this.getStringAttribute('record_column_delimiter');
    }
    set recordColumnDelimiter(value) {
        this._recordColumnDelimiter = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordColumnDelimiterInput() {
        return this._recordColumnDelimiter;
    }
    // record_row_delimiter - computed: false, optional: false, required: true
    _recordRowDelimiter;
    get recordRowDelimiter() {
        return this.getStringAttribute('record_row_delimiter');
    }
    set recordRowDelimiter(value) {
        this._recordRowDelimiter = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordRowDelimiterInput() {
        return this._recordRowDelimiter;
    }
}
export function kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersJsonToTerraform(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 {
        record_row_path: cdktf.stringToTerraform(struct.recordRowPath),
    };
}
export class KinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersJsonOutputReference 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._recordRowPath !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordRowPath = this._recordRowPath;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._recordRowPath = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._recordRowPath = value.recordRowPath;
        }
    }
    // record_row_path - computed: false, optional: false, required: true
    _recordRowPath;
    get recordRowPath() {
        return this.getStringAttribute('record_row_path');
    }
    set recordRowPath(value) {
        this._recordRowPath = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordRowPathInput() {
        return this._recordRowPath;
    }
}
export function kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersToTerraform(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 {
        csv: kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersCsvToTerraform(struct.csv),
        json: kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersJsonToTerraform(struct.json),
    };
}
export class KinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersOutputReference 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._csv?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.csv = this._csv?.internalValue;
        }
        if (this._json?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.json = this._json?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._csv.internalValue = undefined;
            this._json.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._csv.internalValue = value.csv;
            this._json.internalValue = value.json;
        }
    }
    // csv - computed: false, optional: true, required: false
    _csv = new KinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersCsvOutputReference(this, "csv", true);
    get csv() {
        return this._csv;
    }
    putCsv(value) {
        this._csv.internalValue = value;
    }
    resetCsv() {
        this._csv.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get csvInput() {
        return this._csv.internalValue;
    }
    // json - computed: false, optional: true, required: false
    _json = new KinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersJsonOutputReference(this, "json", true);
    get json() {
        return this._json;
    }
    putJson(value) {
        this._json.internalValue = value;
    }
    resetJson() {
        this._json.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get jsonInput() {
        return this._json.internalValue;
    }
}
export function kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatToTerraform(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 {
        mapping_parameters: kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersToTerraform(struct.mappingParameters),
    };
}
export class KinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatOutputReference 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._mappingParameters?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.mappingParameters = this._mappingParameters?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._mappingParameters.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._mappingParameters.internalValue = value.mappingParameters;
        }
    }
    // record_format_type - computed: true, optional: false, required: false
    get recordFormatType() {
        return this.getStringAttribute('record_format_type');
    }
    // mapping_parameters - computed: false, optional: true, required: false
    _mappingParameters = new KinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatMappingParametersOutputReference(this, "mapping_parameters", true);
    get mappingParameters() {
        return this._mappingParameters;
    }
    putMappingParameters(value) {
        this._mappingParameters.internalValue = value;
    }
    resetMappingParameters() {
        this._mappingParameters.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get mappingParametersInput() {
        return this._mappingParameters.internalValue;
    }
}
export function kinesisAnalyticsApplicationReferenceDataSourcesSchemaToTerraform(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 {
        record_encoding: cdktf.stringToTerraform(struct.recordEncoding),
        record_columns: cdktf.listMapper(kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordColumnsToTerraform)(struct.recordColumns),
        record_format: kinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatToTerraform(struct.recordFormat),
    };
}
export class KinesisAnalyticsApplicationReferenceDataSourcesSchemaOutputReference 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._recordEncoding !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordEncoding = this._recordEncoding;
        }
        if (this._recordColumns !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordColumns = this._recordColumns;
        }
        if (this._recordFormat?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.recordFormat = this._recordFormat?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._recordEncoding = undefined;
            this._recordColumns = undefined;
            this._recordFormat.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._recordEncoding = value.recordEncoding;
            this._recordColumns = value.recordColumns;
            this._recordFormat.internalValue = value.recordFormat;
        }
    }
    // record_encoding - computed: false, optional: true, required: false
    _recordEncoding;
    get recordEncoding() {
        return this.getStringAttribute('record_encoding');
    }
    set recordEncoding(value) {
        this._recordEncoding = value;
    }
    resetRecordEncoding() {
        this._recordEncoding = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get recordEncodingInput() {
        return this._recordEncoding;
    }
    // record_columns - computed: false, optional: false, required: true
    _recordColumns;
    get recordColumns() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('record_columns');
    }
    set recordColumns(value) {
        this._recordColumns = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordColumnsInput() {
        return this._recordColumns;
    }
    // record_format - computed: false, optional: false, required: true
    _recordFormat = new KinesisAnalyticsApplicationReferenceDataSourcesSchemaRecordFormatOutputReference(this, "record_format", true);
    get recordFormat() {
        return this._recordFormat;
    }
    putRecordFormat(value) {
        this._recordFormat.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get recordFormatInput() {
        return this._recordFormat.internalValue;
    }
}
export function kinesisAnalyticsApplicationReferenceDataSourcesToTerraform(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 {
        table_name: cdktf.stringToTerraform(struct.tableName),
        s3: kinesisAnalyticsApplicationReferenceDataSourcesS3ToTerraform(struct.s3),
        schema: kinesisAnalyticsApplicationReferenceDataSourcesSchemaToTerraform(struct.schema),
    };
}
export class KinesisAnalyticsApplicationReferenceDataSourcesOutputReference 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._tableName !== undefined) {
            hasAnyValues = true;
            internalValueResult.tableName = this._tableName;
        }
        if (this._s3?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.s3 = this._s3?.internalValue;
        }
        if (this._schema?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.schema = this._schema?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._tableName = undefined;
            this._s3.internalValue = undefined;
            this._schema.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._tableName = value.tableName;
            this._s3.internalValue = value.s3;
            this._schema.internalValue = value.schema;
        }
    }
    // id - computed: true, optional: false, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // table_name - computed: false, optional: false, required: true
    _tableName;
    get tableName() {
        return this.getStringAttribute('table_name');
    }
    set tableName(value) {
        this._tableName = value;
    }
    // Temporarily expose input value. Use with caution.
    get tableNameInput() {
        return this._tableName;
    }
    // s3 - computed: false, optional: false, required: true
    _s3 = new KinesisAnalyticsApplicationReferenceDataSourcesS3OutputReference(this, "s3", true);
    get s3() {
        return this._s3;
    }
    putS3(value) {
        this._s3.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get s3Input() {
        return this._s3.internalValue;
    }
    // schema - computed: false, optional: false, required: true
    _schema = new KinesisAnalyticsApplicationReferenceDataSourcesSchemaOutputReference(this, "schema", true);
    get schema() {
        return this._schema;
    }
    putSchema(value) {
        this._schema.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get schemaInput() {
        return this._schema.internalValue;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/kinesis_analytics_application aws_kinesis_analytics_application}
*/
export class KinesisAnalyticsApplication extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_kinesis_analytics_application";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/kinesis_analytics_application aws_kinesis_analytics_application} 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 KinesisAnalyticsApplicationConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_kinesis_analytics_application',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._code = config.code;
        this._description = config.description;
        this._name = config.name;
        this._startApplication = config.startApplication;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._cloudwatchLoggingOptions.internalValue = config.cloudwatchLoggingOptions;
        this._inputs.internalValue = config.inputs;
        this._outputs = config.outputs;
        this._referenceDataSources.internalValue = config.referenceDataSources;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // code - computed: false, optional: true, required: false
    _code;
    get code() {
        return this.getStringAttribute('code');
    }
    set code(value) {
        this._code = value;
    }
    resetCode() {
        this._code = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get codeInput() {
        return this._code;
    }
    // create_timestamp - computed: true, optional: false, required: false
    get createTimestamp() {
        return this.getStringAttribute('create_timestamp');
    }
    // description - computed: false, optional: true, required: false
    _description;
    get description() {
        return this.getStringAttribute('description');
    }
    set description(value) {
        this._description = value;
    }
    resetDescription() {
        this._description = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get descriptionInput() {
        return this._description;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // last_update_timestamp - computed: true, optional: false, required: false
    get lastUpdateTimestamp() {
        return this.getStringAttribute('last_update_timestamp');
    }
    // name - computed: false, optional: false, required: true
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // start_application - computed: false, optional: true, required: false
    _startApplication;
    get startApplication() {
        return this.getBooleanAttribute('start_application');
    }
    set startApplication(value) {
        this._startApplication = value;
    }
    resetStartApplication() {
        this._startApplication = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get startApplicationInput() {
        return this._startApplication;
    }
    // status - computed: true, optional: false, required: false
    get status() {
        return this.getStringAttribute('status');
    }
    // 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;
    }
    // version - computed: true, optional: false, required: false
    get version() {
        return this.getNumberAttribute('version');
    }
    // cloudwatch_logging_options - computed: false, optional: true, required: false
    _cloudwatchLoggingOptions = new KinesisAnalyticsApplicationCloudwatchLoggingOptionsOutputReference(this, "cloudwatch_logging_options", true);
    get cloudwatchLoggingOptions() {
        return this._cloudwatchLoggingOptions;
    }
    putCloudwatchLoggingOptions(value) {
        this._cloudwatchLoggingOptions.internalValue = value;
    }
    resetCloudwatchLoggingOptions() {
        this._cloudwatchLoggingOptions.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cloudwatchLoggingOptionsInput() {
        return this._cloudwatchLoggingOptions.internalValue;
    }
    // inputs - computed: false, optional: true, required: false
    _inputs = new KinesisAnalyticsApplicationInputsOutputReference(this, "inputs", true);
    get inputs() {
        return this._inputs;
    }
    putInputs(value) {
        this._inputs.internalValue = value;
    }
    resetInputs() {
        this._inputs.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get inputsInput() {
        return this._inputs.internalValue;
    }
    // outputs - computed: false, optional: true, required: false
    _outputs;
    get outputs() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('outputs')));
    }
    set outputs(value) {
        this._outputs = value;
    }
    resetOutputs() {
        this._outputs = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get outputsInput() {
        return this._outputs;
    }
    // reference_data_sources - computed: false, optional: true, required: false
    _referenceDataSources = new KinesisAnalyticsApplicationReferenceDataSourcesOutputReference(this, "reference_data_sources", true);
    get referenceDataSources() {
        return this._referenceDataSources;
    }
    putReferenceDataSources(value) {
        this._referenceDataSources.internalValue = value;
    }
    resetReferenceDataSources() {
        this._referenceDataSources.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get referenceDataSourcesInput() {
        return this._referenceDataSources.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            code: cdktf.stringToTerraform(this._code),
            description: cdktf.stringToTerraform(this._description),
            name: cdktf.stringToTerraform(this._name),
            start_application: cdktf.booleanToTerraform(this._startApplication),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            cloudwatch_logging_options: kinesisAnalyticsApplicationCloudwatchLoggingOptionsToTerraform(this._cloudwatchLoggingOptions.internalValue),
            inputs: kinesisAnalyticsApplicationInputsToTerraform(this._inputs.internalValue),
            outputs: cdktf.listMapper(kinesisAnalyticsApplicationOutputsToTerraform)(this._outputs),
            reference_data_sources: kinesisAnalyticsApplicationReferenceDataSourcesToTerraform(this._referenceDataSources.internalValue),
        };
    }
}
//# sourceMappingURL=kinesis-analytics-application.js.map