// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function glueCatalogTablePartitionIndexToTerraform(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 {
        index_name: cdktf.stringToTerraform(struct.indexName),
        keys: cdktf.listMapper(cdktf.stringToTerraform)(struct.keys),
    };
}
export function glueCatalogTablePartitionKeysToTerraform(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 {
        comment: cdktf.stringToTerraform(struct.comment),
        name: cdktf.stringToTerraform(struct.name),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export function glueCatalogTableStorageDescriptorColumnsToTerraform(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 {
        comment: cdktf.stringToTerraform(struct.comment),
        name: cdktf.stringToTerraform(struct.name),
        parameters: cdktf.hashMapper(cdktf.stringToTerraform)(struct.parameters),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export function glueCatalogTableStorageDescriptorSchemaReferenceSchemaIdToTerraform(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 {
        registry_name: cdktf.stringToTerraform(struct.registryName),
        schema_arn: cdktf.stringToTerraform(struct.schemaArn),
        schema_name: cdktf.stringToTerraform(struct.schemaName),
    };
}
export class GlueCatalogTableStorageDescriptorSchemaReferenceSchemaIdOutputReference 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._registryName !== undefined) {
            hasAnyValues = true;
            internalValueResult.registryName = this._registryName;
        }
        if (this._schemaArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.schemaArn = this._schemaArn;
        }
        if (this._schemaName !== undefined) {
            hasAnyValues = true;
            internalValueResult.schemaName = this._schemaName;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._registryName = undefined;
            this._schemaArn = undefined;
            this._schemaName = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._registryName = value.registryName;
            this._schemaArn = value.schemaArn;
            this._schemaName = value.schemaName;
        }
    }
    // registry_name - computed: false, optional: true, required: false
    _registryName;
    get registryName() {
        return this.getStringAttribute('registry_name');
    }
    set registryName(value) {
        this._registryName = value;
    }
    resetRegistryName() {
        this._registryName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get registryNameInput() {
        return this._registryName;
    }
    // schema_arn - computed: false, optional: true, required: false
    _schemaArn;
    get schemaArn() {
        return this.getStringAttribute('schema_arn');
    }
    set schemaArn(value) {
        this._schemaArn = value;
    }
    resetSchemaArn() {
        this._schemaArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get schemaArnInput() {
        return this._schemaArn;
    }
    // schema_name - computed: false, optional: true, required: false
    _schemaName;
    get schemaName() {
        return this.getStringAttribute('schema_name');
    }
    set schemaName(value) {
        this._schemaName = value;
    }
    resetSchemaName() {
        this._schemaName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get schemaNameInput() {
        return this._schemaName;
    }
}
export function glueCatalogTableStorageDescriptorSchemaReferenceToTerraform(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 {
        schema_version_id: cdktf.stringToTerraform(struct.schemaVersionId),
        schema_version_number: cdktf.numberToTerraform(struct.schemaVersionNumber),
        schema_id: glueCatalogTableStorageDescriptorSchemaReferenceSchemaIdToTerraform(struct.schemaId),
    };
}
export class GlueCatalogTableStorageDescriptorSchemaReferenceOutputReference 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._schemaVersionId !== undefined) {
            hasAnyValues = true;
            internalValueResult.schemaVersionId = this._schemaVersionId;
        }
        if (this._schemaVersionNumber !== undefined) {
            hasAnyValues = true;
            internalValueResult.schemaVersionNumber = this._schemaVersionNumber;
        }
        if (this._schemaId?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.schemaId = this._schemaId?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._schemaVersionId = undefined;
            this._schemaVersionNumber = undefined;
            this._schemaId.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._schemaVersionId = value.schemaVersionId;
            this._schemaVersionNumber = value.schemaVersionNumber;
            this._schemaId.internalValue = value.schemaId;
        }
    }
    // schema_version_id - computed: false, optional: true, required: false
    _schemaVersionId;
    get schemaVersionId() {
        return this.getStringAttribute('schema_version_id');
    }
    set schemaVersionId(value) {
        this._schemaVersionId = value;
    }
    resetSchemaVersionId() {
        this._schemaVersionId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get schemaVersionIdInput() {
        return this._schemaVersionId;
    }
    // schema_version_number - computed: false, optional: false, required: true
    _schemaVersionNumber;
    get schemaVersionNumber() {
        return this.getNumberAttribute('schema_version_number');
    }
    set schemaVersionNumber(value) {
        this._schemaVersionNumber = value;
    }
    // Temporarily expose input value. Use with caution.
    get schemaVersionNumberInput() {
        return this._schemaVersionNumber;
    }
    // schema_id - computed: false, optional: true, required: false
    _schemaId = new GlueCatalogTableStorageDescriptorSchemaReferenceSchemaIdOutputReference(this, "schema_id", true);
    get schemaId() {
        return this._schemaId;
    }
    putSchemaId(value) {
        this._schemaId.internalValue = value;
    }
    resetSchemaId() {
        this._schemaId.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get schemaIdInput() {
        return this._schemaId.internalValue;
    }
}
export function glueCatalogTableStorageDescriptorSerDeInfoToTerraform(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),
        parameters: cdktf.hashMapper(cdktf.stringToTerraform)(struct.parameters),
        serialization_library: cdktf.stringToTerraform(struct.serializationLibrary),
    };
}
export class GlueCatalogTableStorageDescriptorSerDeInfoOutputReference 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._name !== undefined) {
            hasAnyValues = true;
            internalValueResult.name = this._name;
        }
        if (this._parameters !== undefined) {
            hasAnyValues = true;
            internalValueResult.parameters = this._parameters;
        }
        if (this._serializationLibrary !== undefined) {
            hasAnyValues = true;
            internalValueResult.serializationLibrary = this._serializationLibrary;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._name = undefined;
            this._parameters = undefined;
            this._serializationLibrary = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._name = value.name;
            this._parameters = value.parameters;
            this._serializationLibrary = value.serializationLibrary;
        }
    }
    // name - computed: false, optional: true, required: false
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    resetName() {
        this._name = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // parameters - computed: false, optional: true, required: false
    _parameters;
    get parameters() {
        return this.getStringMapAttribute('parameters');
    }
    set parameters(value) {
        this._parameters = value;
    }
    resetParameters() {
        this._parameters = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get parametersInput() {
        return this._parameters;
    }
    // serialization_library - computed: false, optional: true, required: false
    _serializationLibrary;
    get serializationLibrary() {
        return this.getStringAttribute('serialization_library');
    }
    set serializationLibrary(value) {
        this._serializationLibrary = value;
    }
    resetSerializationLibrary() {
        this._serializationLibrary = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get serializationLibraryInput() {
        return this._serializationLibrary;
    }
}
export function glueCatalogTableStorageDescriptorSkewedInfoToTerraform(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 {
        skewed_column_names: cdktf.listMapper(cdktf.stringToTerraform)(struct.skewedColumnNames),
        skewed_column_value_location_maps: cdktf.hashMapper(cdktf.stringToTerraform)(struct.skewedColumnValueLocationMaps),
        skewed_column_values: cdktf.listMapper(cdktf.stringToTerraform)(struct.skewedColumnValues),
    };
}
export class GlueCatalogTableStorageDescriptorSkewedInfoOutputReference 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._skewedColumnNames !== undefined) {
            hasAnyValues = true;
            internalValueResult.skewedColumnNames = this._skewedColumnNames;
        }
        if (this._skewedColumnValueLocationMaps !== undefined) {
            hasAnyValues = true;
            internalValueResult.skewedColumnValueLocationMaps = this._skewedColumnValueLocationMaps;
        }
        if (this._skewedColumnValues !== undefined) {
            hasAnyValues = true;
            internalValueResult.skewedColumnValues = this._skewedColumnValues;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._skewedColumnNames = undefined;
            this._skewedColumnValueLocationMaps = undefined;
            this._skewedColumnValues = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._skewedColumnNames = value.skewedColumnNames;
            this._skewedColumnValueLocationMaps = value.skewedColumnValueLocationMaps;
            this._skewedColumnValues = value.skewedColumnValues;
        }
    }
    // skewed_column_names - computed: false, optional: true, required: false
    _skewedColumnNames;
    get skewedColumnNames() {
        return this.getListAttribute('skewed_column_names');
    }
    set skewedColumnNames(value) {
        this._skewedColumnNames = value;
    }
    resetSkewedColumnNames() {
        this._skewedColumnNames = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get skewedColumnNamesInput() {
        return this._skewedColumnNames;
    }
    // skewed_column_value_location_maps - computed: false, optional: true, required: false
    _skewedColumnValueLocationMaps;
    get skewedColumnValueLocationMaps() {
        return this.getStringMapAttribute('skewed_column_value_location_maps');
    }
    set skewedColumnValueLocationMaps(value) {
        this._skewedColumnValueLocationMaps = value;
    }
    resetSkewedColumnValueLocationMaps() {
        this._skewedColumnValueLocationMaps = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get skewedColumnValueLocationMapsInput() {
        return this._skewedColumnValueLocationMaps;
    }
    // skewed_column_values - computed: false, optional: true, required: false
    _skewedColumnValues;
    get skewedColumnValues() {
        return this.getListAttribute('skewed_column_values');
    }
    set skewedColumnValues(value) {
        this._skewedColumnValues = value;
    }
    resetSkewedColumnValues() {
        this._skewedColumnValues = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get skewedColumnValuesInput() {
        return this._skewedColumnValues;
    }
}
export function glueCatalogTableStorageDescriptorSortColumnsToTerraform(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 {
        column: cdktf.stringToTerraform(struct.column),
        sort_order: cdktf.numberToTerraform(struct.sortOrder),
    };
}
export function glueCatalogTableStorageDescriptorToTerraform(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_columns: cdktf.listMapper(cdktf.stringToTerraform)(struct.bucketColumns),
        compressed: cdktf.booleanToTerraform(struct.compressed),
        input_format: cdktf.stringToTerraform(struct.inputFormat),
        location: cdktf.stringToTerraform(struct.location),
        number_of_buckets: cdktf.numberToTerraform(struct.numberOfBuckets),
        output_format: cdktf.stringToTerraform(struct.outputFormat),
        parameters: cdktf.hashMapper(cdktf.stringToTerraform)(struct.parameters),
        stored_as_sub_directories: cdktf.booleanToTerraform(struct.storedAsSubDirectories),
        columns: cdktf.listMapper(glueCatalogTableStorageDescriptorColumnsToTerraform)(struct.columns),
        schema_reference: glueCatalogTableStorageDescriptorSchemaReferenceToTerraform(struct.schemaReference),
        ser_de_info: glueCatalogTableStorageDescriptorSerDeInfoToTerraform(struct.serDeInfo),
        skewed_info: glueCatalogTableStorageDescriptorSkewedInfoToTerraform(struct.skewedInfo),
        sort_columns: cdktf.listMapper(glueCatalogTableStorageDescriptorSortColumnsToTerraform)(struct.sortColumns),
    };
}
export class GlueCatalogTableStorageDescriptorOutputReference 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._bucketColumns !== undefined) {
            hasAnyValues = true;
            internalValueResult.bucketColumns = this._bucketColumns;
        }
        if (this._compressed !== undefined) {
            hasAnyValues = true;
            internalValueResult.compressed = this._compressed;
        }
        if (this._inputFormat !== undefined) {
            hasAnyValues = true;
            internalValueResult.inputFormat = this._inputFormat;
        }
        if (this._location !== undefined) {
            hasAnyValues = true;
            internalValueResult.location = this._location;
        }
        if (this._numberOfBuckets !== undefined) {
            hasAnyValues = true;
            internalValueResult.numberOfBuckets = this._numberOfBuckets;
        }
        if (this._outputFormat !== undefined) {
            hasAnyValues = true;
            internalValueResult.outputFormat = this._outputFormat;
        }
        if (this._parameters !== undefined) {
            hasAnyValues = true;
            internalValueResult.parameters = this._parameters;
        }
        if (this._storedAsSubDirectories !== undefined) {
            hasAnyValues = true;
            internalValueResult.storedAsSubDirectories = this._storedAsSubDirectories;
        }
        if (this._columns !== undefined) {
            hasAnyValues = true;
            internalValueResult.columns = this._columns;
        }
        if (this._schemaReference?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.schemaReference = this._schemaReference?.internalValue;
        }
        if (this._serDeInfo?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.serDeInfo = this._serDeInfo?.internalValue;
        }
        if (this._skewedInfo?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.skewedInfo = this._skewedInfo?.internalValue;
        }
        if (this._sortColumns !== undefined) {
            hasAnyValues = true;
            internalValueResult.sortColumns = this._sortColumns;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._bucketColumns = undefined;
            this._compressed = undefined;
            this._inputFormat = undefined;
            this._location = undefined;
            this._numberOfBuckets = undefined;
            this._outputFormat = undefined;
            this._parameters = undefined;
            this._storedAsSubDirectories = undefined;
            this._columns = undefined;
            this._schemaReference.internalValue = undefined;
            this._serDeInfo.internalValue = undefined;
            this._skewedInfo.internalValue = undefined;
            this._sortColumns = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._bucketColumns = value.bucketColumns;
            this._compressed = value.compressed;
            this._inputFormat = value.inputFormat;
            this._location = value.location;
            this._numberOfBuckets = value.numberOfBuckets;
            this._outputFormat = value.outputFormat;
            this._parameters = value.parameters;
            this._storedAsSubDirectories = value.storedAsSubDirectories;
            this._columns = value.columns;
            this._schemaReference.internalValue = value.schemaReference;
            this._serDeInfo.internalValue = value.serDeInfo;
            this._skewedInfo.internalValue = value.skewedInfo;
            this._sortColumns = value.sortColumns;
        }
    }
    // bucket_columns - computed: false, optional: true, required: false
    _bucketColumns;
    get bucketColumns() {
        return this.getListAttribute('bucket_columns');
    }
    set bucketColumns(value) {
        this._bucketColumns = value;
    }
    resetBucketColumns() {
        this._bucketColumns = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get bucketColumnsInput() {
        return this._bucketColumns;
    }
    // compressed - computed: false, optional: true, required: false
    _compressed;
    get compressed() {
        return this.getBooleanAttribute('compressed');
    }
    set compressed(value) {
        this._compressed = value;
    }
    resetCompressed() {
        this._compressed = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get compressedInput() {
        return this._compressed;
    }
    // input_format - computed: false, optional: true, required: false
    _inputFormat;
    get inputFormat() {
        return this.getStringAttribute('input_format');
    }
    set inputFormat(value) {
        this._inputFormat = value;
    }
    resetInputFormat() {
        this._inputFormat = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get inputFormatInput() {
        return this._inputFormat;
    }
    // location - computed: false, optional: true, required: false
    _location;
    get location() {
        return this.getStringAttribute('location');
    }
    set location(value) {
        this._location = value;
    }
    resetLocation() {
        this._location = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get locationInput() {
        return this._location;
    }
    // number_of_buckets - computed: false, optional: true, required: false
    _numberOfBuckets;
    get numberOfBuckets() {
        return this.getNumberAttribute('number_of_buckets');
    }
    set numberOfBuckets(value) {
        this._numberOfBuckets = value;
    }
    resetNumberOfBuckets() {
        this._numberOfBuckets = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get numberOfBucketsInput() {
        return this._numberOfBuckets;
    }
    // output_format - computed: false, optional: true, required: false
    _outputFormat;
    get outputFormat() {
        return this.getStringAttribute('output_format');
    }
    set outputFormat(value) {
        this._outputFormat = value;
    }
    resetOutputFormat() {
        this._outputFormat = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get outputFormatInput() {
        return this._outputFormat;
    }
    // parameters - computed: false, optional: true, required: false
    _parameters;
    get parameters() {
        return this.getStringMapAttribute('parameters');
    }
    set parameters(value) {
        this._parameters = value;
    }
    resetParameters() {
        this._parameters = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get parametersInput() {
        return this._parameters;
    }
    // stored_as_sub_directories - computed: false, optional: true, required: false
    _storedAsSubDirectories;
    get storedAsSubDirectories() {
        return this.getBooleanAttribute('stored_as_sub_directories');
    }
    set storedAsSubDirectories(value) {
        this._storedAsSubDirectories = value;
    }
    resetStoredAsSubDirectories() {
        this._storedAsSubDirectories = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get storedAsSubDirectoriesInput() {
        return this._storedAsSubDirectories;
    }
    // columns - computed: false, optional: true, required: false
    _columns;
    get columns() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('columns');
    }
    set columns(value) {
        this._columns = value;
    }
    resetColumns() {
        this._columns = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get columnsInput() {
        return this._columns;
    }
    // schema_reference - computed: false, optional: true, required: false
    _schemaReference = new GlueCatalogTableStorageDescriptorSchemaReferenceOutputReference(this, "schema_reference", true);
    get schemaReference() {
        return this._schemaReference;
    }
    putSchemaReference(value) {
        this._schemaReference.internalValue = value;
    }
    resetSchemaReference() {
        this._schemaReference.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get schemaReferenceInput() {
        return this._schemaReference.internalValue;
    }
    // ser_de_info - computed: false, optional: true, required: false
    _serDeInfo = new GlueCatalogTableStorageDescriptorSerDeInfoOutputReference(this, "ser_de_info", true);
    get serDeInfo() {
        return this._serDeInfo;
    }
    putSerDeInfo(value) {
        this._serDeInfo.internalValue = value;
    }
    resetSerDeInfo() {
        this._serDeInfo.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get serDeInfoInput() {
        return this._serDeInfo.internalValue;
    }
    // skewed_info - computed: false, optional: true, required: false
    _skewedInfo = new GlueCatalogTableStorageDescriptorSkewedInfoOutputReference(this, "skewed_info", true);
    get skewedInfo() {
        return this._skewedInfo;
    }
    putSkewedInfo(value) {
        this._skewedInfo.internalValue = value;
    }
    resetSkewedInfo() {
        this._skewedInfo.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get skewedInfoInput() {
        return this._skewedInfo.internalValue;
    }
    // sort_columns - computed: false, optional: true, required: false
    _sortColumns;
    get sortColumns() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('sort_columns');
    }
    set sortColumns(value) {
        this._sortColumns = value;
    }
    resetSortColumns() {
        this._sortColumns = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get sortColumnsInput() {
        return this._sortColumns;
    }
}
export function glueCatalogTableTargetTableToTerraform(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 {
        catalog_id: cdktf.stringToTerraform(struct.catalogId),
        database_name: cdktf.stringToTerraform(struct.databaseName),
        name: cdktf.stringToTerraform(struct.name),
    };
}
export class GlueCatalogTableTargetTableOutputReference 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._catalogId !== undefined) {
            hasAnyValues = true;
            internalValueResult.catalogId = this._catalogId;
        }
        if (this._databaseName !== undefined) {
            hasAnyValues = true;
            internalValueResult.databaseName = this._databaseName;
        }
        if (this._name !== undefined) {
            hasAnyValues = true;
            internalValueResult.name = this._name;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._catalogId = undefined;
            this._databaseName = undefined;
            this._name = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._catalogId = value.catalogId;
            this._databaseName = value.databaseName;
            this._name = value.name;
        }
    }
    // catalog_id - computed: false, optional: false, required: true
    _catalogId;
    get catalogId() {
        return this.getStringAttribute('catalog_id');
    }
    set catalogId(value) {
        this._catalogId = value;
    }
    // Temporarily expose input value. Use with caution.
    get catalogIdInput() {
        return this._catalogId;
    }
    // database_name - computed: false, optional: false, required: true
    _databaseName;
    get databaseName() {
        return this.getStringAttribute('database_name');
    }
    set databaseName(value) {
        this._databaseName = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseNameInput() {
        return this._databaseName;
    }
    // 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;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/glue_catalog_table aws_glue_catalog_table}
*/
export class GlueCatalogTable extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_glue_catalog_table";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/glue_catalog_table aws_glue_catalog_table} 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 GlueCatalogTableConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_glue_catalog_table',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._catalogId = config.catalogId;
        this._databaseName = config.databaseName;
        this._description = config.description;
        this._name = config.name;
        this._owner = config.owner;
        this._parameters = config.parameters;
        this._retention = config.retention;
        this._tableType = config.tableType;
        this._viewExpandedText = config.viewExpandedText;
        this._viewOriginalText = config.viewOriginalText;
        this._partitionIndex = config.partitionIndex;
        this._partitionKeys = config.partitionKeys;
        this._storageDescriptor.internalValue = config.storageDescriptor;
        this._targetTable.internalValue = config.targetTable;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // catalog_id - computed: true, optional: true, required: false
    _catalogId;
    get catalogId() {
        return this.getStringAttribute('catalog_id');
    }
    set catalogId(value) {
        this._catalogId = value;
    }
    resetCatalogId() {
        this._catalogId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get catalogIdInput() {
        return this._catalogId;
    }
    // database_name - computed: false, optional: false, required: true
    _databaseName;
    get databaseName() {
        return this.getStringAttribute('database_name');
    }
    set databaseName(value) {
        this._databaseName = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseNameInput() {
        return this._databaseName;
    }
    // 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');
    }
    // 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;
    }
    // owner - computed: false, optional: true, required: false
    _owner;
    get owner() {
        return this.getStringAttribute('owner');
    }
    set owner(value) {
        this._owner = value;
    }
    resetOwner() {
        this._owner = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ownerInput() {
        return this._owner;
    }
    // parameters - computed: false, optional: true, required: false
    _parameters;
    get parameters() {
        return this.getStringMapAttribute('parameters');
    }
    set parameters(value) {
        this._parameters = value;
    }
    resetParameters() {
        this._parameters = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get parametersInput() {
        return this._parameters;
    }
    // retention - computed: false, optional: true, required: false
    _retention;
    get retention() {
        return this.getNumberAttribute('retention');
    }
    set retention(value) {
        this._retention = value;
    }
    resetRetention() {
        this._retention = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get retentionInput() {
        return this._retention;
    }
    // table_type - computed: false, optional: true, required: false
    _tableType;
    get tableType() {
        return this.getStringAttribute('table_type');
    }
    set tableType(value) {
        this._tableType = value;
    }
    resetTableType() {
        this._tableType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tableTypeInput() {
        return this._tableType;
    }
    // view_expanded_text - computed: false, optional: true, required: false
    _viewExpandedText;
    get viewExpandedText() {
        return this.getStringAttribute('view_expanded_text');
    }
    set viewExpandedText(value) {
        this._viewExpandedText = value;
    }
    resetViewExpandedText() {
        this._viewExpandedText = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get viewExpandedTextInput() {
        return this._viewExpandedText;
    }
    // view_original_text - computed: false, optional: true, required: false
    _viewOriginalText;
    get viewOriginalText() {
        return this.getStringAttribute('view_original_text');
    }
    set viewOriginalText(value) {
        this._viewOriginalText = value;
    }
    resetViewOriginalText() {
        this._viewOriginalText = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get viewOriginalTextInput() {
        return this._viewOriginalText;
    }
    // partition_index - computed: false, optional: true, required: false
    _partitionIndex;
    get partitionIndex() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('partition_index');
    }
    set partitionIndex(value) {
        this._partitionIndex = value;
    }
    resetPartitionIndex() {
        this._partitionIndex = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get partitionIndexInput() {
        return this._partitionIndex;
    }
    // partition_keys - computed: false, optional: true, required: false
    _partitionKeys;
    get partitionKeys() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('partition_keys');
    }
    set partitionKeys(value) {
        this._partitionKeys = value;
    }
    resetPartitionKeys() {
        this._partitionKeys = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get partitionKeysInput() {
        return this._partitionKeys;
    }
    // storage_descriptor - computed: false, optional: true, required: false
    _storageDescriptor = new GlueCatalogTableStorageDescriptorOutputReference(this, "storage_descriptor", true);
    get storageDescriptor() {
        return this._storageDescriptor;
    }
    putStorageDescriptor(value) {
        this._storageDescriptor.internalValue = value;
    }
    resetStorageDescriptor() {
        this._storageDescriptor.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get storageDescriptorInput() {
        return this._storageDescriptor.internalValue;
    }
    // target_table - computed: false, optional: true, required: false
    _targetTable = new GlueCatalogTableTargetTableOutputReference(this, "target_table", true);
    get targetTable() {
        return this._targetTable;
    }
    putTargetTable(value) {
        this._targetTable.internalValue = value;
    }
    resetTargetTable() {
        this._targetTable.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get targetTableInput() {
        return this._targetTable.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            catalog_id: cdktf.stringToTerraform(this._catalogId),
            database_name: cdktf.stringToTerraform(this._databaseName),
            description: cdktf.stringToTerraform(this._description),
            name: cdktf.stringToTerraform(this._name),
            owner: cdktf.stringToTerraform(this._owner),
            parameters: cdktf.hashMapper(cdktf.stringToTerraform)(this._parameters),
            retention: cdktf.numberToTerraform(this._retention),
            table_type: cdktf.stringToTerraform(this._tableType),
            view_expanded_text: cdktf.stringToTerraform(this._viewExpandedText),
            view_original_text: cdktf.stringToTerraform(this._viewOriginalText),
            partition_index: cdktf.listMapper(glueCatalogTablePartitionIndexToTerraform)(this._partitionIndex),
            partition_keys: cdktf.listMapper(glueCatalogTablePartitionKeysToTerraform)(this._partitionKeys),
            storage_descriptor: glueCatalogTableStorageDescriptorToTerraform(this._storageDescriptor.internalValue),
            target_table: glueCatalogTableTargetTableToTerraform(this._targetTable.internalValue),
        };
    }
}
//# sourceMappingURL=glue-catalog-table.js.map