// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function dbInstanceRestoreToPointInTimeToTerraform(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 {
        restore_time: cdktf.stringToTerraform(struct.restoreTime),
        source_db_instance_identifier: cdktf.stringToTerraform(struct.sourceDbInstanceIdentifier),
        source_dbi_resource_id: cdktf.stringToTerraform(struct.sourceDbiResourceId),
        use_latest_restorable_time: cdktf.booleanToTerraform(struct.useLatestRestorableTime),
    };
}
export class DbInstanceRestoreToPointInTimeOutputReference 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._restoreTime !== undefined) {
            hasAnyValues = true;
            internalValueResult.restoreTime = this._restoreTime;
        }
        if (this._sourceDbInstanceIdentifier !== undefined) {
            hasAnyValues = true;
            internalValueResult.sourceDbInstanceIdentifier = this._sourceDbInstanceIdentifier;
        }
        if (this._sourceDbiResourceId !== undefined) {
            hasAnyValues = true;
            internalValueResult.sourceDbiResourceId = this._sourceDbiResourceId;
        }
        if (this._useLatestRestorableTime !== undefined) {
            hasAnyValues = true;
            internalValueResult.useLatestRestorableTime = this._useLatestRestorableTime;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._restoreTime = undefined;
            this._sourceDbInstanceIdentifier = undefined;
            this._sourceDbiResourceId = undefined;
            this._useLatestRestorableTime = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._restoreTime = value.restoreTime;
            this._sourceDbInstanceIdentifier = value.sourceDbInstanceIdentifier;
            this._sourceDbiResourceId = value.sourceDbiResourceId;
            this._useLatestRestorableTime = value.useLatestRestorableTime;
        }
    }
    // restore_time - computed: false, optional: true, required: false
    _restoreTime;
    get restoreTime() {
        return this.getStringAttribute('restore_time');
    }
    set restoreTime(value) {
        this._restoreTime = value;
    }
    resetRestoreTime() {
        this._restoreTime = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get restoreTimeInput() {
        return this._restoreTime;
    }
    // source_db_instance_identifier - computed: false, optional: true, required: false
    _sourceDbInstanceIdentifier;
    get sourceDbInstanceIdentifier() {
        return this.getStringAttribute('source_db_instance_identifier');
    }
    set sourceDbInstanceIdentifier(value) {
        this._sourceDbInstanceIdentifier = value;
    }
    resetSourceDbInstanceIdentifier() {
        this._sourceDbInstanceIdentifier = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get sourceDbInstanceIdentifierInput() {
        return this._sourceDbInstanceIdentifier;
    }
    // source_dbi_resource_id - computed: false, optional: true, required: false
    _sourceDbiResourceId;
    get sourceDbiResourceId() {
        return this.getStringAttribute('source_dbi_resource_id');
    }
    set sourceDbiResourceId(value) {
        this._sourceDbiResourceId = value;
    }
    resetSourceDbiResourceId() {
        this._sourceDbiResourceId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get sourceDbiResourceIdInput() {
        return this._sourceDbiResourceId;
    }
    // use_latest_restorable_time - computed: false, optional: true, required: false
    _useLatestRestorableTime;
    get useLatestRestorableTime() {
        return this.getBooleanAttribute('use_latest_restorable_time');
    }
    set useLatestRestorableTime(value) {
        this._useLatestRestorableTime = value;
    }
    resetUseLatestRestorableTime() {
        this._useLatestRestorableTime = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get useLatestRestorableTimeInput() {
        return this._useLatestRestorableTime;
    }
}
export function dbInstanceS3ImportToTerraform(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_name: cdktf.stringToTerraform(struct.bucketName),
        bucket_prefix: cdktf.stringToTerraform(struct.bucketPrefix),
        ingestion_role: cdktf.stringToTerraform(struct.ingestionRole),
        source_engine: cdktf.stringToTerraform(struct.sourceEngine),
        source_engine_version: cdktf.stringToTerraform(struct.sourceEngineVersion),
    };
}
export class DbInstanceS3ImportOutputReference 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._bucketName !== undefined) {
            hasAnyValues = true;
            internalValueResult.bucketName = this._bucketName;
        }
        if (this._bucketPrefix !== undefined) {
            hasAnyValues = true;
            internalValueResult.bucketPrefix = this._bucketPrefix;
        }
        if (this._ingestionRole !== undefined) {
            hasAnyValues = true;
            internalValueResult.ingestionRole = this._ingestionRole;
        }
        if (this._sourceEngine !== undefined) {
            hasAnyValues = true;
            internalValueResult.sourceEngine = this._sourceEngine;
        }
        if (this._sourceEngineVersion !== undefined) {
            hasAnyValues = true;
            internalValueResult.sourceEngineVersion = this._sourceEngineVersion;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._bucketName = undefined;
            this._bucketPrefix = undefined;
            this._ingestionRole = undefined;
            this._sourceEngine = undefined;
            this._sourceEngineVersion = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._bucketName = value.bucketName;
            this._bucketPrefix = value.bucketPrefix;
            this._ingestionRole = value.ingestionRole;
            this._sourceEngine = value.sourceEngine;
            this._sourceEngineVersion = value.sourceEngineVersion;
        }
    }
    // bucket_name - computed: false, optional: false, required: true
    _bucketName;
    get bucketName() {
        return this.getStringAttribute('bucket_name');
    }
    set bucketName(value) {
        this._bucketName = value;
    }
    // Temporarily expose input value. Use with caution.
    get bucketNameInput() {
        return this._bucketName;
    }
    // bucket_prefix - computed: false, optional: true, required: false
    _bucketPrefix;
    get bucketPrefix() {
        return this.getStringAttribute('bucket_prefix');
    }
    set bucketPrefix(value) {
        this._bucketPrefix = value;
    }
    resetBucketPrefix() {
        this._bucketPrefix = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get bucketPrefixInput() {
        return this._bucketPrefix;
    }
    // ingestion_role - computed: false, optional: false, required: true
    _ingestionRole;
    get ingestionRole() {
        return this.getStringAttribute('ingestion_role');
    }
    set ingestionRole(value) {
        this._ingestionRole = value;
    }
    // Temporarily expose input value. Use with caution.
    get ingestionRoleInput() {
        return this._ingestionRole;
    }
    // source_engine - computed: false, optional: false, required: true
    _sourceEngine;
    get sourceEngine() {
        return this.getStringAttribute('source_engine');
    }
    set sourceEngine(value) {
        this._sourceEngine = value;
    }
    // Temporarily expose input value. Use with caution.
    get sourceEngineInput() {
        return this._sourceEngine;
    }
    // source_engine_version - computed: false, optional: false, required: true
    _sourceEngineVersion;
    get sourceEngineVersion() {
        return this.getStringAttribute('source_engine_version');
    }
    set sourceEngineVersion(value) {
        this._sourceEngineVersion = value;
    }
    // Temporarily expose input value. Use with caution.
    get sourceEngineVersionInput() {
        return this._sourceEngineVersion;
    }
}
export function dbInstanceTimeoutsToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        create: cdktf.stringToTerraform(struct.create),
        delete: cdktf.stringToTerraform(struct.delete),
        update: cdktf.stringToTerraform(struct.update),
    };
}
export class DbInstanceTimeoutsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._create !== undefined) {
            hasAnyValues = true;
            internalValueResult.create = this._create;
        }
        if (this._delete !== undefined) {
            hasAnyValues = true;
            internalValueResult.delete = this._delete;
        }
        if (this._update !== undefined) {
            hasAnyValues = true;
            internalValueResult.update = this._update;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._create = undefined;
            this._delete = undefined;
            this._update = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._create = value.create;
            this._delete = value.delete;
            this._update = value.update;
        }
    }
    // create - computed: false, optional: true, required: false
    _create;
    get create() {
        return this.getStringAttribute('create');
    }
    set create(value) {
        this._create = value;
    }
    resetCreate() {
        this._create = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get createInput() {
        return this._create;
    }
    // delete - computed: false, optional: true, required: false
    _delete;
    get delete() {
        return this.getStringAttribute('delete');
    }
    set delete(value) {
        this._delete = value;
    }
    resetDelete() {
        this._delete = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deleteInput() {
        return this._delete;
    }
    // update - computed: false, optional: true, required: false
    _update;
    get update() {
        return this.getStringAttribute('update');
    }
    set update(value) {
        this._update = value;
    }
    resetUpdate() {
        this._update = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get updateInput() {
        return this._update;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/db_instance aws_db_instance}
*/
export class DbInstance extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_db_instance";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/db_instance aws_db_instance} 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 DbInstanceConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_db_instance',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._allocatedStorage = config.allocatedStorage;
        this._allowMajorVersionUpgrade = config.allowMajorVersionUpgrade;
        this._applyImmediately = config.applyImmediately;
        this._autoMinorVersionUpgrade = config.autoMinorVersionUpgrade;
        this._availabilityZone = config.availabilityZone;
        this._backupRetentionPeriod = config.backupRetentionPeriod;
        this._backupWindow = config.backupWindow;
        this._caCertIdentifier = config.caCertIdentifier;
        this._characterSetName = config.characterSetName;
        this._copyTagsToSnapshot = config.copyTagsToSnapshot;
        this._customerOwnedIpEnabled = config.customerOwnedIpEnabled;
        this._dbName = config.dbName;
        this._dbSubnetGroupName = config.dbSubnetGroupName;
        this._deleteAutomatedBackups = config.deleteAutomatedBackups;
        this._deletionProtection = config.deletionProtection;
        this._domain = config.domain;
        this._domainIamRoleName = config.domainIamRoleName;
        this._enabledCloudwatchLogsExports = config.enabledCloudwatchLogsExports;
        this._engine = config.engine;
        this._engineVersion = config.engineVersion;
        this._finalSnapshotIdentifier = config.finalSnapshotIdentifier;
        this._iamDatabaseAuthenticationEnabled = config.iamDatabaseAuthenticationEnabled;
        this._identifier = config.identifier;
        this._identifierPrefix = config.identifierPrefix;
        this._instanceClass = config.instanceClass;
        this._iops = config.iops;
        this._kmsKeyId = config.kmsKeyId;
        this._licenseModel = config.licenseModel;
        this._maintenanceWindow = config.maintenanceWindow;
        this._maxAllocatedStorage = config.maxAllocatedStorage;
        this._monitoringInterval = config.monitoringInterval;
        this._monitoringRoleArn = config.monitoringRoleArn;
        this._multiAz = config.multiAz;
        this._name = config.name;
        this._ncharCharacterSetName = config.ncharCharacterSetName;
        this._optionGroupName = config.optionGroupName;
        this._parameterGroupName = config.parameterGroupName;
        this._password = config.password;
        this._performanceInsightsEnabled = config.performanceInsightsEnabled;
        this._performanceInsightsKmsKeyId = config.performanceInsightsKmsKeyId;
        this._performanceInsightsRetentionPeriod = config.performanceInsightsRetentionPeriod;
        this._port = config.port;
        this._publiclyAccessible = config.publiclyAccessible;
        this._replicaMode = config.replicaMode;
        this._replicateSourceDb = config.replicateSourceDb;
        this._securityGroupNames = config.securityGroupNames;
        this._skipFinalSnapshot = config.skipFinalSnapshot;
        this._snapshotIdentifier = config.snapshotIdentifier;
        this._storageEncrypted = config.storageEncrypted;
        this._storageType = config.storageType;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._timezone = config.timezone;
        this._username = config.username;
        this._vpcSecurityGroupIds = config.vpcSecurityGroupIds;
        this._restoreToPointInTime.internalValue = config.restoreToPointInTime;
        this._s3Import.internalValue = config.s3Import;
        this._timeouts.internalValue = config.timeouts;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // address - computed: true, optional: false, required: false
    get address() {
        return this.getStringAttribute('address');
    }
    // allocated_storage - computed: true, optional: true, required: false
    _allocatedStorage;
    get allocatedStorage() {
        return this.getNumberAttribute('allocated_storage');
    }
    set allocatedStorage(value) {
        this._allocatedStorage = value;
    }
    resetAllocatedStorage() {
        this._allocatedStorage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get allocatedStorageInput() {
        return this._allocatedStorage;
    }
    // allow_major_version_upgrade - computed: false, optional: true, required: false
    _allowMajorVersionUpgrade;
    get allowMajorVersionUpgrade() {
        return this.getBooleanAttribute('allow_major_version_upgrade');
    }
    set allowMajorVersionUpgrade(value) {
        this._allowMajorVersionUpgrade = value;
    }
    resetAllowMajorVersionUpgrade() {
        this._allowMajorVersionUpgrade = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get allowMajorVersionUpgradeInput() {
        return this._allowMajorVersionUpgrade;
    }
    // apply_immediately - computed: true, optional: true, required: false
    _applyImmediately;
    get applyImmediately() {
        return this.getBooleanAttribute('apply_immediately');
    }
    set applyImmediately(value) {
        this._applyImmediately = value;
    }
    resetApplyImmediately() {
        this._applyImmediately = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get applyImmediatelyInput() {
        return this._applyImmediately;
    }
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // auto_minor_version_upgrade - computed: false, optional: true, required: false
    _autoMinorVersionUpgrade;
    get autoMinorVersionUpgrade() {
        return this.getBooleanAttribute('auto_minor_version_upgrade');
    }
    set autoMinorVersionUpgrade(value) {
        this._autoMinorVersionUpgrade = value;
    }
    resetAutoMinorVersionUpgrade() {
        this._autoMinorVersionUpgrade = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get autoMinorVersionUpgradeInput() {
        return this._autoMinorVersionUpgrade;
    }
    // availability_zone - computed: true, optional: true, required: false
    _availabilityZone;
    get availabilityZone() {
        return this.getStringAttribute('availability_zone');
    }
    set availabilityZone(value) {
        this._availabilityZone = value;
    }
    resetAvailabilityZone() {
        this._availabilityZone = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get availabilityZoneInput() {
        return this._availabilityZone;
    }
    // backup_retention_period - computed: true, optional: true, required: false
    _backupRetentionPeriod;
    get backupRetentionPeriod() {
        return this.getNumberAttribute('backup_retention_period');
    }
    set backupRetentionPeriod(value) {
        this._backupRetentionPeriod = value;
    }
    resetBackupRetentionPeriod() {
        this._backupRetentionPeriod = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get backupRetentionPeriodInput() {
        return this._backupRetentionPeriod;
    }
    // backup_window - computed: true, optional: true, required: false
    _backupWindow;
    get backupWindow() {
        return this.getStringAttribute('backup_window');
    }
    set backupWindow(value) {
        this._backupWindow = value;
    }
    resetBackupWindow() {
        this._backupWindow = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get backupWindowInput() {
        return this._backupWindow;
    }
    // ca_cert_identifier - computed: true, optional: true, required: false
    _caCertIdentifier;
    get caCertIdentifier() {
        return this.getStringAttribute('ca_cert_identifier');
    }
    set caCertIdentifier(value) {
        this._caCertIdentifier = value;
    }
    resetCaCertIdentifier() {
        this._caCertIdentifier = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get caCertIdentifierInput() {
        return this._caCertIdentifier;
    }
    // character_set_name - computed: true, optional: true, required: false
    _characterSetName;
    get characterSetName() {
        return this.getStringAttribute('character_set_name');
    }
    set characterSetName(value) {
        this._characterSetName = value;
    }
    resetCharacterSetName() {
        this._characterSetName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get characterSetNameInput() {
        return this._characterSetName;
    }
    // copy_tags_to_snapshot - computed: false, optional: true, required: false
    _copyTagsToSnapshot;
    get copyTagsToSnapshot() {
        return this.getBooleanAttribute('copy_tags_to_snapshot');
    }
    set copyTagsToSnapshot(value) {
        this._copyTagsToSnapshot = value;
    }
    resetCopyTagsToSnapshot() {
        this._copyTagsToSnapshot = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get copyTagsToSnapshotInput() {
        return this._copyTagsToSnapshot;
    }
    // customer_owned_ip_enabled - computed: false, optional: true, required: false
    _customerOwnedIpEnabled;
    get customerOwnedIpEnabled() {
        return this.getBooleanAttribute('customer_owned_ip_enabled');
    }
    set customerOwnedIpEnabled(value) {
        this._customerOwnedIpEnabled = value;
    }
    resetCustomerOwnedIpEnabled() {
        this._customerOwnedIpEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get customerOwnedIpEnabledInput() {
        return this._customerOwnedIpEnabled;
    }
    // db_name - computed: true, optional: true, required: false
    _dbName;
    get dbName() {
        return this.getStringAttribute('db_name');
    }
    set dbName(value) {
        this._dbName = value;
    }
    resetDbName() {
        this._dbName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get dbNameInput() {
        return this._dbName;
    }
    // db_subnet_group_name - computed: true, optional: true, required: false
    _dbSubnetGroupName;
    get dbSubnetGroupName() {
        return this.getStringAttribute('db_subnet_group_name');
    }
    set dbSubnetGroupName(value) {
        this._dbSubnetGroupName = value;
    }
    resetDbSubnetGroupName() {
        this._dbSubnetGroupName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get dbSubnetGroupNameInput() {
        return this._dbSubnetGroupName;
    }
    // delete_automated_backups - computed: false, optional: true, required: false
    _deleteAutomatedBackups;
    get deleteAutomatedBackups() {
        return this.getBooleanAttribute('delete_automated_backups');
    }
    set deleteAutomatedBackups(value) {
        this._deleteAutomatedBackups = value;
    }
    resetDeleteAutomatedBackups() {
        this._deleteAutomatedBackups = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deleteAutomatedBackupsInput() {
        return this._deleteAutomatedBackups;
    }
    // deletion_protection - computed: false, optional: true, required: false
    _deletionProtection;
    get deletionProtection() {
        return this.getBooleanAttribute('deletion_protection');
    }
    set deletionProtection(value) {
        this._deletionProtection = value;
    }
    resetDeletionProtection() {
        this._deletionProtection = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deletionProtectionInput() {
        return this._deletionProtection;
    }
    // domain - computed: false, optional: true, required: false
    _domain;
    get domain() {
        return this.getStringAttribute('domain');
    }
    set domain(value) {
        this._domain = value;
    }
    resetDomain() {
        this._domain = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get domainInput() {
        return this._domain;
    }
    // domain_iam_role_name - computed: false, optional: true, required: false
    _domainIamRoleName;
    get domainIamRoleName() {
        return this.getStringAttribute('domain_iam_role_name');
    }
    set domainIamRoleName(value) {
        this._domainIamRoleName = value;
    }
    resetDomainIamRoleName() {
        this._domainIamRoleName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get domainIamRoleNameInput() {
        return this._domainIamRoleName;
    }
    // enabled_cloudwatch_logs_exports - computed: false, optional: true, required: false
    _enabledCloudwatchLogsExports;
    get enabledCloudwatchLogsExports() {
        return cdktf.Fn.tolist(this.getListAttribute('enabled_cloudwatch_logs_exports'));
    }
    set enabledCloudwatchLogsExports(value) {
        this._enabledCloudwatchLogsExports = value;
    }
    resetEnabledCloudwatchLogsExports() {
        this._enabledCloudwatchLogsExports = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get enabledCloudwatchLogsExportsInput() {
        return this._enabledCloudwatchLogsExports;
    }
    // endpoint - computed: true, optional: false, required: false
    get endpoint() {
        return this.getStringAttribute('endpoint');
    }
    // engine - computed: true, optional: true, required: false
    _engine;
    get engine() {
        return this.getStringAttribute('engine');
    }
    set engine(value) {
        this._engine = value;
    }
    resetEngine() {
        this._engine = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get engineInput() {
        return this._engine;
    }
    // engine_version - computed: true, optional: true, required: false
    _engineVersion;
    get engineVersion() {
        return this.getStringAttribute('engine_version');
    }
    set engineVersion(value) {
        this._engineVersion = value;
    }
    resetEngineVersion() {
        this._engineVersion = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get engineVersionInput() {
        return this._engineVersion;
    }
    // engine_version_actual - computed: true, optional: false, required: false
    get engineVersionActual() {
        return this.getStringAttribute('engine_version_actual');
    }
    // final_snapshot_identifier - computed: false, optional: true, required: false
    _finalSnapshotIdentifier;
    get finalSnapshotIdentifier() {
        return this.getStringAttribute('final_snapshot_identifier');
    }
    set finalSnapshotIdentifier(value) {
        this._finalSnapshotIdentifier = value;
    }
    resetFinalSnapshotIdentifier() {
        this._finalSnapshotIdentifier = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get finalSnapshotIdentifierInput() {
        return this._finalSnapshotIdentifier;
    }
    // hosted_zone_id - computed: true, optional: false, required: false
    get hostedZoneId() {
        return this.getStringAttribute('hosted_zone_id');
    }
    // iam_database_authentication_enabled - computed: false, optional: true, required: false
    _iamDatabaseAuthenticationEnabled;
    get iamDatabaseAuthenticationEnabled() {
        return this.getBooleanAttribute('iam_database_authentication_enabled');
    }
    set iamDatabaseAuthenticationEnabled(value) {
        this._iamDatabaseAuthenticationEnabled = value;
    }
    resetIamDatabaseAuthenticationEnabled() {
        this._iamDatabaseAuthenticationEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get iamDatabaseAuthenticationEnabledInput() {
        return this._iamDatabaseAuthenticationEnabled;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // identifier - computed: true, optional: true, required: false
    _identifier;
    get identifier() {
        return this.getStringAttribute('identifier');
    }
    set identifier(value) {
        this._identifier = value;
    }
    resetIdentifier() {
        this._identifier = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get identifierInput() {
        return this._identifier;
    }
    // identifier_prefix - computed: true, optional: true, required: false
    _identifierPrefix;
    get identifierPrefix() {
        return this.getStringAttribute('identifier_prefix');
    }
    set identifierPrefix(value) {
        this._identifierPrefix = value;
    }
    resetIdentifierPrefix() {
        this._identifierPrefix = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get identifierPrefixInput() {
        return this._identifierPrefix;
    }
    // instance_class - computed: false, optional: false, required: true
    _instanceClass;
    get instanceClass() {
        return this.getStringAttribute('instance_class');
    }
    set instanceClass(value) {
        this._instanceClass = value;
    }
    // Temporarily expose input value. Use with caution.
    get instanceClassInput() {
        return this._instanceClass;
    }
    // iops - computed: false, optional: true, required: false
    _iops;
    get iops() {
        return this.getNumberAttribute('iops');
    }
    set iops(value) {
        this._iops = value;
    }
    resetIops() {
        this._iops = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get iopsInput() {
        return this._iops;
    }
    // kms_key_id - computed: true, optional: true, required: false
    _kmsKeyId;
    get kmsKeyId() {
        return this.getStringAttribute('kms_key_id');
    }
    set kmsKeyId(value) {
        this._kmsKeyId = value;
    }
    resetKmsKeyId() {
        this._kmsKeyId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get kmsKeyIdInput() {
        return this._kmsKeyId;
    }
    // latest_restorable_time - computed: true, optional: false, required: false
    get latestRestorableTime() {
        return this.getStringAttribute('latest_restorable_time');
    }
    // license_model - computed: true, optional: true, required: false
    _licenseModel;
    get licenseModel() {
        return this.getStringAttribute('license_model');
    }
    set licenseModel(value) {
        this._licenseModel = value;
    }
    resetLicenseModel() {
        this._licenseModel = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get licenseModelInput() {
        return this._licenseModel;
    }
    // maintenance_window - computed: true, optional: true, required: false
    _maintenanceWindow;
    get maintenanceWindow() {
        return this.getStringAttribute('maintenance_window');
    }
    set maintenanceWindow(value) {
        this._maintenanceWindow = value;
    }
    resetMaintenanceWindow() {
        this._maintenanceWindow = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get maintenanceWindowInput() {
        return this._maintenanceWindow;
    }
    // max_allocated_storage - computed: false, optional: true, required: false
    _maxAllocatedStorage;
    get maxAllocatedStorage() {
        return this.getNumberAttribute('max_allocated_storage');
    }
    set maxAllocatedStorage(value) {
        this._maxAllocatedStorage = value;
    }
    resetMaxAllocatedStorage() {
        this._maxAllocatedStorage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get maxAllocatedStorageInput() {
        return this._maxAllocatedStorage;
    }
    // monitoring_interval - computed: false, optional: true, required: false
    _monitoringInterval;
    get monitoringInterval() {
        return this.getNumberAttribute('monitoring_interval');
    }
    set monitoringInterval(value) {
        this._monitoringInterval = value;
    }
    resetMonitoringInterval() {
        this._monitoringInterval = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get monitoringIntervalInput() {
        return this._monitoringInterval;
    }
    // monitoring_role_arn - computed: true, optional: true, required: false
    _monitoringRoleArn;
    get monitoringRoleArn() {
        return this.getStringAttribute('monitoring_role_arn');
    }
    set monitoringRoleArn(value) {
        this._monitoringRoleArn = value;
    }
    resetMonitoringRoleArn() {
        this._monitoringRoleArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get monitoringRoleArnInput() {
        return this._monitoringRoleArn;
    }
    // multi_az - computed: true, optional: true, required: false
    _multiAz;
    get multiAz() {
        return this.getBooleanAttribute('multi_az');
    }
    set multiAz(value) {
        this._multiAz = value;
    }
    resetMultiAz() {
        this._multiAz = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get multiAzInput() {
        return this._multiAz;
    }
    // name - computed: true, 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;
    }
    // nchar_character_set_name - computed: true, optional: true, required: false
    _ncharCharacterSetName;
    get ncharCharacterSetName() {
        return this.getStringAttribute('nchar_character_set_name');
    }
    set ncharCharacterSetName(value) {
        this._ncharCharacterSetName = value;
    }
    resetNcharCharacterSetName() {
        this._ncharCharacterSetName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ncharCharacterSetNameInput() {
        return this._ncharCharacterSetName;
    }
    // option_group_name - computed: true, optional: true, required: false
    _optionGroupName;
    get optionGroupName() {
        return this.getStringAttribute('option_group_name');
    }
    set optionGroupName(value) {
        this._optionGroupName = value;
    }
    resetOptionGroupName() {
        this._optionGroupName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get optionGroupNameInput() {
        return this._optionGroupName;
    }
    // parameter_group_name - computed: true, optional: true, required: false
    _parameterGroupName;
    get parameterGroupName() {
        return this.getStringAttribute('parameter_group_name');
    }
    set parameterGroupName(value) {
        this._parameterGroupName = value;
    }
    resetParameterGroupName() {
        this._parameterGroupName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get parameterGroupNameInput() {
        return this._parameterGroupName;
    }
    // password - computed: false, optional: true, required: false
    _password;
    get password() {
        return this.getStringAttribute('password');
    }
    set password(value) {
        this._password = value;
    }
    resetPassword() {
        this._password = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get passwordInput() {
        return this._password;
    }
    // performance_insights_enabled - computed: false, optional: true, required: false
    _performanceInsightsEnabled;
    get performanceInsightsEnabled() {
        return this.getBooleanAttribute('performance_insights_enabled');
    }
    set performanceInsightsEnabled(value) {
        this._performanceInsightsEnabled = value;
    }
    resetPerformanceInsightsEnabled() {
        this._performanceInsightsEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get performanceInsightsEnabledInput() {
        return this._performanceInsightsEnabled;
    }
    // performance_insights_kms_key_id - computed: true, optional: true, required: false
    _performanceInsightsKmsKeyId;
    get performanceInsightsKmsKeyId() {
        return this.getStringAttribute('performance_insights_kms_key_id');
    }
    set performanceInsightsKmsKeyId(value) {
        this._performanceInsightsKmsKeyId = value;
    }
    resetPerformanceInsightsKmsKeyId() {
        this._performanceInsightsKmsKeyId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get performanceInsightsKmsKeyIdInput() {
        return this._performanceInsightsKmsKeyId;
    }
    // performance_insights_retention_period - computed: true, optional: true, required: false
    _performanceInsightsRetentionPeriod;
    get performanceInsightsRetentionPeriod() {
        return this.getNumberAttribute('performance_insights_retention_period');
    }
    set performanceInsightsRetentionPeriod(value) {
        this._performanceInsightsRetentionPeriod = value;
    }
    resetPerformanceInsightsRetentionPeriod() {
        this._performanceInsightsRetentionPeriod = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get performanceInsightsRetentionPeriodInput() {
        return this._performanceInsightsRetentionPeriod;
    }
    // port - computed: true, optional: true, required: false
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    resetPort() {
        this._port = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
    // publicly_accessible - computed: false, optional: true, required: false
    _publiclyAccessible;
    get publiclyAccessible() {
        return this.getBooleanAttribute('publicly_accessible');
    }
    set publiclyAccessible(value) {
        this._publiclyAccessible = value;
    }
    resetPubliclyAccessible() {
        this._publiclyAccessible = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get publiclyAccessibleInput() {
        return this._publiclyAccessible;
    }
    // replica_mode - computed: true, optional: true, required: false
    _replicaMode;
    get replicaMode() {
        return this.getStringAttribute('replica_mode');
    }
    set replicaMode(value) {
        this._replicaMode = value;
    }
    resetReplicaMode() {
        this._replicaMode = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get replicaModeInput() {
        return this._replicaMode;
    }
    // replicas - computed: true, optional: false, required: false
    get replicas() {
        return this.getListAttribute('replicas');
    }
    // replicate_source_db - computed: false, optional: true, required: false
    _replicateSourceDb;
    get replicateSourceDb() {
        return this.getStringAttribute('replicate_source_db');
    }
    set replicateSourceDb(value) {
        this._replicateSourceDb = value;
    }
    resetReplicateSourceDb() {
        this._replicateSourceDb = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get replicateSourceDbInput() {
        return this._replicateSourceDb;
    }
    // resource_id - computed: true, optional: false, required: false
    get resourceId() {
        return this.getStringAttribute('resource_id');
    }
    // security_group_names - computed: false, optional: true, required: false
    _securityGroupNames;
    get securityGroupNames() {
        return cdktf.Fn.tolist(this.getListAttribute('security_group_names'));
    }
    set securityGroupNames(value) {
        this._securityGroupNames = value;
    }
    resetSecurityGroupNames() {
        this._securityGroupNames = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get securityGroupNamesInput() {
        return this._securityGroupNames;
    }
    // skip_final_snapshot - computed: false, optional: true, required: false
    _skipFinalSnapshot;
    get skipFinalSnapshot() {
        return this.getBooleanAttribute('skip_final_snapshot');
    }
    set skipFinalSnapshot(value) {
        this._skipFinalSnapshot = value;
    }
    resetSkipFinalSnapshot() {
        this._skipFinalSnapshot = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get skipFinalSnapshotInput() {
        return this._skipFinalSnapshot;
    }
    // snapshot_identifier - computed: true, optional: true, required: false
    _snapshotIdentifier;
    get snapshotIdentifier() {
        return this.getStringAttribute('snapshot_identifier');
    }
    set snapshotIdentifier(value) {
        this._snapshotIdentifier = value;
    }
    resetSnapshotIdentifier() {
        this._snapshotIdentifier = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get snapshotIdentifierInput() {
        return this._snapshotIdentifier;
    }
    // status - computed: true, optional: false, required: false
    get status() {
        return this.getStringAttribute('status');
    }
    // storage_encrypted - computed: false, optional: true, required: false
    _storageEncrypted;
    get storageEncrypted() {
        return this.getBooleanAttribute('storage_encrypted');
    }
    set storageEncrypted(value) {
        this._storageEncrypted = value;
    }
    resetStorageEncrypted() {
        this._storageEncrypted = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get storageEncryptedInput() {
        return this._storageEncrypted;
    }
    // storage_type - computed: true, optional: true, required: false
    _storageType;
    get storageType() {
        return this.getStringAttribute('storage_type');
    }
    set storageType(value) {
        this._storageType = value;
    }
    resetStorageType() {
        this._storageType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get storageTypeInput() {
        return this._storageType;
    }
    // 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;
    }
    // timezone - computed: true, optional: true, required: false
    _timezone;
    get timezone() {
        return this.getStringAttribute('timezone');
    }
    set timezone(value) {
        this._timezone = value;
    }
    resetTimezone() {
        this._timezone = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get timezoneInput() {
        return this._timezone;
    }
    // username - computed: true, optional: true, required: false
    _username;
    get username() {
        return this.getStringAttribute('username');
    }
    set username(value) {
        this._username = value;
    }
    resetUsername() {
        this._username = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get usernameInput() {
        return this._username;
    }
    // vpc_security_group_ids - computed: true, optional: true, required: false
    _vpcSecurityGroupIds;
    get vpcSecurityGroupIds() {
        return cdktf.Fn.tolist(this.getListAttribute('vpc_security_group_ids'));
    }
    set vpcSecurityGroupIds(value) {
        this._vpcSecurityGroupIds = value;
    }
    resetVpcSecurityGroupIds() {
        this._vpcSecurityGroupIds = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get vpcSecurityGroupIdsInput() {
        return this._vpcSecurityGroupIds;
    }
    // restore_to_point_in_time - computed: false, optional: true, required: false
    _restoreToPointInTime = new DbInstanceRestoreToPointInTimeOutputReference(this, "restore_to_point_in_time", true);
    get restoreToPointInTime() {
        return this._restoreToPointInTime;
    }
    putRestoreToPointInTime(value) {
        this._restoreToPointInTime.internalValue = value;
    }
    resetRestoreToPointInTime() {
        this._restoreToPointInTime.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get restoreToPointInTimeInput() {
        return this._restoreToPointInTime.internalValue;
    }
    // s3_import - computed: false, optional: true, required: false
    _s3Import = new DbInstanceS3ImportOutputReference(this, "s3_import", true);
    get s3Import() {
        return this._s3Import;
    }
    putS3Import(value) {
        this._s3Import.internalValue = value;
    }
    resetS3Import() {
        this._s3Import.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get s3ImportInput() {
        return this._s3Import.internalValue;
    }
    // timeouts - computed: false, optional: true, required: false
    _timeouts = new DbInstanceTimeoutsOutputReference(this, "timeouts", true);
    get timeouts() {
        return this._timeouts;
    }
    putTimeouts(value) {
        this._timeouts.internalValue = value;
    }
    resetTimeouts() {
        this._timeouts.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get timeoutsInput() {
        return this._timeouts.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            allocated_storage: cdktf.numberToTerraform(this._allocatedStorage),
            allow_major_version_upgrade: cdktf.booleanToTerraform(this._allowMajorVersionUpgrade),
            apply_immediately: cdktf.booleanToTerraform(this._applyImmediately),
            auto_minor_version_upgrade: cdktf.booleanToTerraform(this._autoMinorVersionUpgrade),
            availability_zone: cdktf.stringToTerraform(this._availabilityZone),
            backup_retention_period: cdktf.numberToTerraform(this._backupRetentionPeriod),
            backup_window: cdktf.stringToTerraform(this._backupWindow),
            ca_cert_identifier: cdktf.stringToTerraform(this._caCertIdentifier),
            character_set_name: cdktf.stringToTerraform(this._characterSetName),
            copy_tags_to_snapshot: cdktf.booleanToTerraform(this._copyTagsToSnapshot),
            customer_owned_ip_enabled: cdktf.booleanToTerraform(this._customerOwnedIpEnabled),
            db_name: cdktf.stringToTerraform(this._dbName),
            db_subnet_group_name: cdktf.stringToTerraform(this._dbSubnetGroupName),
            delete_automated_backups: cdktf.booleanToTerraform(this._deleteAutomatedBackups),
            deletion_protection: cdktf.booleanToTerraform(this._deletionProtection),
            domain: cdktf.stringToTerraform(this._domain),
            domain_iam_role_name: cdktf.stringToTerraform(this._domainIamRoleName),
            enabled_cloudwatch_logs_exports: cdktf.listMapper(cdktf.stringToTerraform)(this._enabledCloudwatchLogsExports),
            engine: cdktf.stringToTerraform(this._engine),
            engine_version: cdktf.stringToTerraform(this._engineVersion),
            final_snapshot_identifier: cdktf.stringToTerraform(this._finalSnapshotIdentifier),
            iam_database_authentication_enabled: cdktf.booleanToTerraform(this._iamDatabaseAuthenticationEnabled),
            identifier: cdktf.stringToTerraform(this._identifier),
            identifier_prefix: cdktf.stringToTerraform(this._identifierPrefix),
            instance_class: cdktf.stringToTerraform(this._instanceClass),
            iops: cdktf.numberToTerraform(this._iops),
            kms_key_id: cdktf.stringToTerraform(this._kmsKeyId),
            license_model: cdktf.stringToTerraform(this._licenseModel),
            maintenance_window: cdktf.stringToTerraform(this._maintenanceWindow),
            max_allocated_storage: cdktf.numberToTerraform(this._maxAllocatedStorage),
            monitoring_interval: cdktf.numberToTerraform(this._monitoringInterval),
            monitoring_role_arn: cdktf.stringToTerraform(this._monitoringRoleArn),
            multi_az: cdktf.booleanToTerraform(this._multiAz),
            name: cdktf.stringToTerraform(this._name),
            nchar_character_set_name: cdktf.stringToTerraform(this._ncharCharacterSetName),
            option_group_name: cdktf.stringToTerraform(this._optionGroupName),
            parameter_group_name: cdktf.stringToTerraform(this._parameterGroupName),
            password: cdktf.stringToTerraform(this._password),
            performance_insights_enabled: cdktf.booleanToTerraform(this._performanceInsightsEnabled),
            performance_insights_kms_key_id: cdktf.stringToTerraform(this._performanceInsightsKmsKeyId),
            performance_insights_retention_period: cdktf.numberToTerraform(this._performanceInsightsRetentionPeriod),
            port: cdktf.numberToTerraform(this._port),
            publicly_accessible: cdktf.booleanToTerraform(this._publiclyAccessible),
            replica_mode: cdktf.stringToTerraform(this._replicaMode),
            replicate_source_db: cdktf.stringToTerraform(this._replicateSourceDb),
            security_group_names: cdktf.listMapper(cdktf.stringToTerraform)(this._securityGroupNames),
            skip_final_snapshot: cdktf.booleanToTerraform(this._skipFinalSnapshot),
            snapshot_identifier: cdktf.stringToTerraform(this._snapshotIdentifier),
            storage_encrypted: cdktf.booleanToTerraform(this._storageEncrypted),
            storage_type: cdktf.stringToTerraform(this._storageType),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            timezone: cdktf.stringToTerraform(this._timezone),
            username: cdktf.stringToTerraform(this._username),
            vpc_security_group_ids: cdktf.listMapper(cdktf.stringToTerraform)(this._vpcSecurityGroupIds),
            restore_to_point_in_time: dbInstanceRestoreToPointInTimeToTerraform(this._restoreToPointInTime.internalValue),
            s3_import: dbInstanceS3ImportToTerraform(this._s3Import.internalValue),
            timeouts: dbInstanceTimeoutsToTerraform(this._timeouts.internalValue),
        };
    }
}
//# sourceMappingURL=db-instance.js.map