// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function quicksightDataSourceCredentialsCredentialPairToTerraform(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 {
        password: cdktf.stringToTerraform(struct.password),
        username: cdktf.stringToTerraform(struct.username),
    };
}
export class QuicksightDataSourceCredentialsCredentialPairOutputReference 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._password !== undefined) {
            hasAnyValues = true;
            internalValueResult.password = this._password;
        }
        if (this._username !== undefined) {
            hasAnyValues = true;
            internalValueResult.username = this._username;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._password = undefined;
            this._username = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._password = value.password;
            this._username = value.username;
        }
    }
    // password - computed: false, optional: false, required: true
    _password;
    get password() {
        return this.getStringAttribute('password');
    }
    set password(value) {
        this._password = value;
    }
    // Temporarily expose input value. Use with caution.
    get passwordInput() {
        return this._password;
    }
    // username - computed: false, optional: false, required: true
    _username;
    get username() {
        return this.getStringAttribute('username');
    }
    set username(value) {
        this._username = value;
    }
    // Temporarily expose input value. Use with caution.
    get usernameInput() {
        return this._username;
    }
}
export function quicksightDataSourceCredentialsToTerraform(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 {
        copy_source_arn: cdktf.stringToTerraform(struct.copySourceArn),
        credential_pair: quicksightDataSourceCredentialsCredentialPairToTerraform(struct.credentialPair),
    };
}
export class QuicksightDataSourceCredentialsOutputReference 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._copySourceArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.copySourceArn = this._copySourceArn;
        }
        if (this._credentialPair?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.credentialPair = this._credentialPair?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._copySourceArn = undefined;
            this._credentialPair.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._copySourceArn = value.copySourceArn;
            this._credentialPair.internalValue = value.credentialPair;
        }
    }
    // copy_source_arn - computed: false, optional: true, required: false
    _copySourceArn;
    get copySourceArn() {
        return this.getStringAttribute('copy_source_arn');
    }
    set copySourceArn(value) {
        this._copySourceArn = value;
    }
    resetCopySourceArn() {
        this._copySourceArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get copySourceArnInput() {
        return this._copySourceArn;
    }
    // credential_pair - computed: false, optional: true, required: false
    _credentialPair = new QuicksightDataSourceCredentialsCredentialPairOutputReference(this, "credential_pair", true);
    get credentialPair() {
        return this._credentialPair;
    }
    putCredentialPair(value) {
        this._credentialPair.internalValue = value;
    }
    resetCredentialPair() {
        this._credentialPair.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get credentialPairInput() {
        return this._credentialPair.internalValue;
    }
}
export function quicksightDataSourceParametersAmazonElasticsearchToTerraform(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 {
        domain: cdktf.stringToTerraform(struct.domain),
    };
}
export class QuicksightDataSourceParametersAmazonElasticsearchOutputReference 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._domain !== undefined) {
            hasAnyValues = true;
            internalValueResult.domain = this._domain;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._domain = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._domain = value.domain;
        }
    }
    // domain - computed: false, optional: false, required: true
    _domain;
    get domain() {
        return this.getStringAttribute('domain');
    }
    set domain(value) {
        this._domain = value;
    }
    // Temporarily expose input value. Use with caution.
    get domainInput() {
        return this._domain;
    }
}
export function quicksightDataSourceParametersAthenaToTerraform(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 {
        work_group: cdktf.stringToTerraform(struct.workGroup),
    };
}
export class QuicksightDataSourceParametersAthenaOutputReference 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._workGroup !== undefined) {
            hasAnyValues = true;
            internalValueResult.workGroup = this._workGroup;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._workGroup = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._workGroup = value.workGroup;
        }
    }
    // work_group - computed: false, optional: true, required: false
    _workGroup;
    get workGroup() {
        return this.getStringAttribute('work_group');
    }
    set workGroup(value) {
        this._workGroup = value;
    }
    resetWorkGroup() {
        this._workGroup = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get workGroupInput() {
        return this._workGroup;
    }
}
export function quicksightDataSourceParametersAuroraToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersAuroraOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersAuroraPostgresqlToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersAuroraPostgresqlOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersAwsIotAnalyticsToTerraform(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 {
        data_set_name: cdktf.stringToTerraform(struct.dataSetName),
    };
}
export class QuicksightDataSourceParametersAwsIotAnalyticsOutputReference 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._dataSetName !== undefined) {
            hasAnyValues = true;
            internalValueResult.dataSetName = this._dataSetName;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._dataSetName = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._dataSetName = value.dataSetName;
        }
    }
    // data_set_name - computed: false, optional: false, required: true
    _dataSetName;
    get dataSetName() {
        return this.getStringAttribute('data_set_name');
    }
    set dataSetName(value) {
        this._dataSetName = value;
    }
    // Temporarily expose input value. Use with caution.
    get dataSetNameInput() {
        return this._dataSetName;
    }
}
export function quicksightDataSourceParametersJiraToTerraform(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 {
        site_base_url: cdktf.stringToTerraform(struct.siteBaseUrl),
    };
}
export class QuicksightDataSourceParametersJiraOutputReference 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._siteBaseUrl !== undefined) {
            hasAnyValues = true;
            internalValueResult.siteBaseUrl = this._siteBaseUrl;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._siteBaseUrl = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._siteBaseUrl = value.siteBaseUrl;
        }
    }
    // site_base_url - computed: false, optional: false, required: true
    _siteBaseUrl;
    get siteBaseUrl() {
        return this.getStringAttribute('site_base_url');
    }
    set siteBaseUrl(value) {
        this._siteBaseUrl = value;
    }
    // Temporarily expose input value. Use with caution.
    get siteBaseUrlInput() {
        return this._siteBaseUrl;
    }
}
export function quicksightDataSourceParametersMariaDbToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersMariaDbOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersMysqlToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersMysqlOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersOracleToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersOracleOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersPostgresqlToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersPostgresqlOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersPrestoToTerraform(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: cdktf.stringToTerraform(struct.catalog),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersPrestoOutputReference 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._catalog !== undefined) {
            hasAnyValues = true;
            internalValueResult.catalog = this._catalog;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._catalog = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._catalog = value.catalog;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // catalog - computed: false, optional: false, required: true
    _catalog;
    get catalog() {
        return this.getStringAttribute('catalog');
    }
    set catalog(value) {
        this._catalog = value;
    }
    // Temporarily expose input value. Use with caution.
    get catalogInput() {
        return this._catalog;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersRdsToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        instance_id: cdktf.stringToTerraform(struct.instanceId),
    };
}
export class QuicksightDataSourceParametersRdsOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._instanceId !== undefined) {
            hasAnyValues = true;
            internalValueResult.instanceId = this._instanceId;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._instanceId = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._instanceId = value.instanceId;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // instance_id - computed: false, optional: false, required: true
    _instanceId;
    get instanceId() {
        return this.getStringAttribute('instance_id');
    }
    set instanceId(value) {
        this._instanceId = value;
    }
    // Temporarily expose input value. Use with caution.
    get instanceIdInput() {
        return this._instanceId;
    }
}
export function quicksightDataSourceParametersRedshiftToTerraform(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 {
        cluster_id: cdktf.stringToTerraform(struct.clusterId),
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersRedshiftOutputReference 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._clusterId !== undefined) {
            hasAnyValues = true;
            internalValueResult.clusterId = this._clusterId;
        }
        if (this._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._clusterId = undefined;
            this._database = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._clusterId = value.clusterId;
            this._database = value.database;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // cluster_id - computed: false, optional: true, required: false
    _clusterId;
    get clusterId() {
        return this.getStringAttribute('cluster_id');
    }
    set clusterId(value) {
        this._clusterId = value;
    }
    resetClusterId() {
        this._clusterId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get clusterIdInput() {
        return this._clusterId;
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: true, required: false
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    resetHost() {
        this._host = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, 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;
    }
}
export function quicksightDataSourceParametersS3ManifestFileLocationToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        bucket: cdktf.stringToTerraform(struct.bucket),
        key: cdktf.stringToTerraform(struct.key),
    };
}
export class QuicksightDataSourceParametersS3ManifestFileLocationOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._bucket !== undefined) {
            hasAnyValues = true;
            internalValueResult.bucket = this._bucket;
        }
        if (this._key !== undefined) {
            hasAnyValues = true;
            internalValueResult.key = this._key;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._bucket = undefined;
            this._key = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._bucket = value.bucket;
            this._key = value.key;
        }
    }
    // bucket - computed: false, optional: false, required: true
    _bucket;
    get bucket() {
        return this.getStringAttribute('bucket');
    }
    set bucket(value) {
        this._bucket = value;
    }
    // Temporarily expose input value. Use with caution.
    get bucketInput() {
        return this._bucket;
    }
    // key - computed: false, optional: false, required: true
    _key;
    get key() {
        return this.getStringAttribute('key');
    }
    set key(value) {
        this._key = value;
    }
    // Temporarily expose input value. Use with caution.
    get keyInput() {
        return this._key;
    }
}
export function quicksightDataSourceParametersS3ToTerraform(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 {
        manifest_file_location: quicksightDataSourceParametersS3ManifestFileLocationToTerraform(struct.manifestFileLocation),
    };
}
export class QuicksightDataSourceParametersS3OutputReference 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._manifestFileLocation?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.manifestFileLocation = this._manifestFileLocation?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._manifestFileLocation.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._manifestFileLocation.internalValue = value.manifestFileLocation;
        }
    }
    // manifest_file_location - computed: false, optional: false, required: true
    _manifestFileLocation = new QuicksightDataSourceParametersS3ManifestFileLocationOutputReference(this, "manifest_file_location", true);
    get manifestFileLocation() {
        return this._manifestFileLocation;
    }
    putManifestFileLocation(value) {
        this._manifestFileLocation.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get manifestFileLocationInput() {
        return this._manifestFileLocation.internalValue;
    }
}
export function quicksightDataSourceParametersServiceNowToTerraform(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 {
        site_base_url: cdktf.stringToTerraform(struct.siteBaseUrl),
    };
}
export class QuicksightDataSourceParametersServiceNowOutputReference 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._siteBaseUrl !== undefined) {
            hasAnyValues = true;
            internalValueResult.siteBaseUrl = this._siteBaseUrl;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._siteBaseUrl = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._siteBaseUrl = value.siteBaseUrl;
        }
    }
    // site_base_url - computed: false, optional: false, required: true
    _siteBaseUrl;
    get siteBaseUrl() {
        return this.getStringAttribute('site_base_url');
    }
    set siteBaseUrl(value) {
        this._siteBaseUrl = value;
    }
    // Temporarily expose input value. Use with caution.
    get siteBaseUrlInput() {
        return this._siteBaseUrl;
    }
}
export function quicksightDataSourceParametersSnowflakeToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        warehouse: cdktf.stringToTerraform(struct.warehouse),
    };
}
export class QuicksightDataSourceParametersSnowflakeOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._warehouse !== undefined) {
            hasAnyValues = true;
            internalValueResult.warehouse = this._warehouse;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._host = undefined;
            this._warehouse = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._host = value.host;
            this._warehouse = value.warehouse;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // warehouse - computed: false, optional: false, required: true
    _warehouse;
    get warehouse() {
        return this.getStringAttribute('warehouse');
    }
    set warehouse(value) {
        this._warehouse = value;
    }
    // Temporarily expose input value. Use with caution.
    get warehouseInput() {
        return this._warehouse;
    }
}
export function quicksightDataSourceParametersSparkToTerraform(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 {
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersSparkOutputReference 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._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersSqlServerToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersSqlServerOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersTeradataToTerraform(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 {
        database: cdktf.stringToTerraform(struct.database),
        host: cdktf.stringToTerraform(struct.host),
        port: cdktf.numberToTerraform(struct.port),
    };
}
export class QuicksightDataSourceParametersTeradataOutputReference 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._database !== undefined) {
            hasAnyValues = true;
            internalValueResult.database = this._database;
        }
        if (this._host !== undefined) {
            hasAnyValues = true;
            internalValueResult.host = this._host;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._database = undefined;
            this._host = undefined;
            this._port = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._database = value.database;
            this._host = value.host;
            this._port = value.port;
        }
    }
    // database - computed: false, optional: false, required: true
    _database;
    get database() {
        return this.getStringAttribute('database');
    }
    set database(value) {
        this._database = value;
    }
    // Temporarily expose input value. Use with caution.
    get databaseInput() {
        return this._database;
    }
    // host - computed: false, optional: false, required: true
    _host;
    get host() {
        return this.getStringAttribute('host');
    }
    set host(value) {
        this._host = value;
    }
    // Temporarily expose input value. Use with caution.
    get hostInput() {
        return this._host;
    }
    // port - computed: false, optional: false, required: true
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
}
export function quicksightDataSourceParametersTwitterToTerraform(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 {
        max_rows: cdktf.numberToTerraform(struct.maxRows),
        query: cdktf.stringToTerraform(struct.query),
    };
}
export class QuicksightDataSourceParametersTwitterOutputReference 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._maxRows !== undefined) {
            hasAnyValues = true;
            internalValueResult.maxRows = this._maxRows;
        }
        if (this._query !== undefined) {
            hasAnyValues = true;
            internalValueResult.query = this._query;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._maxRows = undefined;
            this._query = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._maxRows = value.maxRows;
            this._query = value.query;
        }
    }
    // max_rows - computed: false, optional: false, required: true
    _maxRows;
    get maxRows() {
        return this.getNumberAttribute('max_rows');
    }
    set maxRows(value) {
        this._maxRows = value;
    }
    // Temporarily expose input value. Use with caution.
    get maxRowsInput() {
        return this._maxRows;
    }
    // query - computed: false, optional: false, required: true
    _query;
    get query() {
        return this.getStringAttribute('query');
    }
    set query(value) {
        this._query = value;
    }
    // Temporarily expose input value. Use with caution.
    get queryInput() {
        return this._query;
    }
}
export function quicksightDataSourceParametersToTerraform(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 {
        amazon_elasticsearch: quicksightDataSourceParametersAmazonElasticsearchToTerraform(struct.amazonElasticsearch),
        athena: quicksightDataSourceParametersAthenaToTerraform(struct.athena),
        aurora: quicksightDataSourceParametersAuroraToTerraform(struct.aurora),
        aurora_postgresql: quicksightDataSourceParametersAuroraPostgresqlToTerraform(struct.auroraPostgresql),
        aws_iot_analytics: quicksightDataSourceParametersAwsIotAnalyticsToTerraform(struct.awsIotAnalytics),
        jira: quicksightDataSourceParametersJiraToTerraform(struct.jira),
        maria_db: quicksightDataSourceParametersMariaDbToTerraform(struct.mariaDb),
        mysql: quicksightDataSourceParametersMysqlToTerraform(struct.mysql),
        oracle: quicksightDataSourceParametersOracleToTerraform(struct.oracle),
        postgresql: quicksightDataSourceParametersPostgresqlToTerraform(struct.postgresql),
        presto: quicksightDataSourceParametersPrestoToTerraform(struct.presto),
        rds: quicksightDataSourceParametersRdsToTerraform(struct.rds),
        redshift: quicksightDataSourceParametersRedshiftToTerraform(struct.redshift),
        s3: quicksightDataSourceParametersS3ToTerraform(struct.s3),
        service_now: quicksightDataSourceParametersServiceNowToTerraform(struct.serviceNow),
        snowflake: quicksightDataSourceParametersSnowflakeToTerraform(struct.snowflake),
        spark: quicksightDataSourceParametersSparkToTerraform(struct.spark),
        sql_server: quicksightDataSourceParametersSqlServerToTerraform(struct.sqlServer),
        teradata: quicksightDataSourceParametersTeradataToTerraform(struct.teradata),
        twitter: quicksightDataSourceParametersTwitterToTerraform(struct.twitter),
    };
}
export class QuicksightDataSourceParametersOutputReference 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._amazonElasticsearch?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.amazonElasticsearch = this._amazonElasticsearch?.internalValue;
        }
        if (this._athena?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.athena = this._athena?.internalValue;
        }
        if (this._aurora?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.aurora = this._aurora?.internalValue;
        }
        if (this._auroraPostgresql?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.auroraPostgresql = this._auroraPostgresql?.internalValue;
        }
        if (this._awsIotAnalytics?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.awsIotAnalytics = this._awsIotAnalytics?.internalValue;
        }
        if (this._jira?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.jira = this._jira?.internalValue;
        }
        if (this._mariaDb?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.mariaDb = this._mariaDb?.internalValue;
        }
        if (this._mysql?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.mysql = this._mysql?.internalValue;
        }
        if (this._oracle?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.oracle = this._oracle?.internalValue;
        }
        if (this._postgresql?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.postgresql = this._postgresql?.internalValue;
        }
        if (this._presto?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.presto = this._presto?.internalValue;
        }
        if (this._rds?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.rds = this._rds?.internalValue;
        }
        if (this._redshift?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.redshift = this._redshift?.internalValue;
        }
        if (this._s3?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.s3 = this._s3?.internalValue;
        }
        if (this._serviceNow?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.serviceNow = this._serviceNow?.internalValue;
        }
        if (this._snowflake?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.snowflake = this._snowflake?.internalValue;
        }
        if (this._spark?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.spark = this._spark?.internalValue;
        }
        if (this._sqlServer?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.sqlServer = this._sqlServer?.internalValue;
        }
        if (this._teradata?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.teradata = this._teradata?.internalValue;
        }
        if (this._twitter?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.twitter = this._twitter?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._amazonElasticsearch.internalValue = undefined;
            this._athena.internalValue = undefined;
            this._aurora.internalValue = undefined;
            this._auroraPostgresql.internalValue = undefined;
            this._awsIotAnalytics.internalValue = undefined;
            this._jira.internalValue = undefined;
            this._mariaDb.internalValue = undefined;
            this._mysql.internalValue = undefined;
            this._oracle.internalValue = undefined;
            this._postgresql.internalValue = undefined;
            this._presto.internalValue = undefined;
            this._rds.internalValue = undefined;
            this._redshift.internalValue = undefined;
            this._s3.internalValue = undefined;
            this._serviceNow.internalValue = undefined;
            this._snowflake.internalValue = undefined;
            this._spark.internalValue = undefined;
            this._sqlServer.internalValue = undefined;
            this._teradata.internalValue = undefined;
            this._twitter.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._amazonElasticsearch.internalValue = value.amazonElasticsearch;
            this._athena.internalValue = value.athena;
            this._aurora.internalValue = value.aurora;
            this._auroraPostgresql.internalValue = value.auroraPostgresql;
            this._awsIotAnalytics.internalValue = value.awsIotAnalytics;
            this._jira.internalValue = value.jira;
            this._mariaDb.internalValue = value.mariaDb;
            this._mysql.internalValue = value.mysql;
            this._oracle.internalValue = value.oracle;
            this._postgresql.internalValue = value.postgresql;
            this._presto.internalValue = value.presto;
            this._rds.internalValue = value.rds;
            this._redshift.internalValue = value.redshift;
            this._s3.internalValue = value.s3;
            this._serviceNow.internalValue = value.serviceNow;
            this._snowflake.internalValue = value.snowflake;
            this._spark.internalValue = value.spark;
            this._sqlServer.internalValue = value.sqlServer;
            this._teradata.internalValue = value.teradata;
            this._twitter.internalValue = value.twitter;
        }
    }
    // amazon_elasticsearch - computed: false, optional: true, required: false
    _amazonElasticsearch = new QuicksightDataSourceParametersAmazonElasticsearchOutputReference(this, "amazon_elasticsearch", true);
    get amazonElasticsearch() {
        return this._amazonElasticsearch;
    }
    putAmazonElasticsearch(value) {
        this._amazonElasticsearch.internalValue = value;
    }
    resetAmazonElasticsearch() {
        this._amazonElasticsearch.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get amazonElasticsearchInput() {
        return this._amazonElasticsearch.internalValue;
    }
    // athena - computed: false, optional: true, required: false
    _athena = new QuicksightDataSourceParametersAthenaOutputReference(this, "athena", true);
    get athena() {
        return this._athena;
    }
    putAthena(value) {
        this._athena.internalValue = value;
    }
    resetAthena() {
        this._athena.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get athenaInput() {
        return this._athena.internalValue;
    }
    // aurora - computed: false, optional: true, required: false
    _aurora = new QuicksightDataSourceParametersAuroraOutputReference(this, "aurora", true);
    get aurora() {
        return this._aurora;
    }
    putAurora(value) {
        this._aurora.internalValue = value;
    }
    resetAurora() {
        this._aurora.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get auroraInput() {
        return this._aurora.internalValue;
    }
    // aurora_postgresql - computed: false, optional: true, required: false
    _auroraPostgresql = new QuicksightDataSourceParametersAuroraPostgresqlOutputReference(this, "aurora_postgresql", true);
    get auroraPostgresql() {
        return this._auroraPostgresql;
    }
    putAuroraPostgresql(value) {
        this._auroraPostgresql.internalValue = value;
    }
    resetAuroraPostgresql() {
        this._auroraPostgresql.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get auroraPostgresqlInput() {
        return this._auroraPostgresql.internalValue;
    }
    // aws_iot_analytics - computed: false, optional: true, required: false
    _awsIotAnalytics = new QuicksightDataSourceParametersAwsIotAnalyticsOutputReference(this, "aws_iot_analytics", true);
    get awsIotAnalytics() {
        return this._awsIotAnalytics;
    }
    putAwsIotAnalytics(value) {
        this._awsIotAnalytics.internalValue = value;
    }
    resetAwsIotAnalytics() {
        this._awsIotAnalytics.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get awsIotAnalyticsInput() {
        return this._awsIotAnalytics.internalValue;
    }
    // jira - computed: false, optional: true, required: false
    _jira = new QuicksightDataSourceParametersJiraOutputReference(this, "jira", true);
    get jira() {
        return this._jira;
    }
    putJira(value) {
        this._jira.internalValue = value;
    }
    resetJira() {
        this._jira.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get jiraInput() {
        return this._jira.internalValue;
    }
    // maria_db - computed: false, optional: true, required: false
    _mariaDb = new QuicksightDataSourceParametersMariaDbOutputReference(this, "maria_db", true);
    get mariaDb() {
        return this._mariaDb;
    }
    putMariaDb(value) {
        this._mariaDb.internalValue = value;
    }
    resetMariaDb() {
        this._mariaDb.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get mariaDbInput() {
        return this._mariaDb.internalValue;
    }
    // mysql - computed: false, optional: true, required: false
    _mysql = new QuicksightDataSourceParametersMysqlOutputReference(this, "mysql", true);
    get mysql() {
        return this._mysql;
    }
    putMysql(value) {
        this._mysql.internalValue = value;
    }
    resetMysql() {
        this._mysql.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get mysqlInput() {
        return this._mysql.internalValue;
    }
    // oracle - computed: false, optional: true, required: false
    _oracle = new QuicksightDataSourceParametersOracleOutputReference(this, "oracle", true);
    get oracle() {
        return this._oracle;
    }
    putOracle(value) {
        this._oracle.internalValue = value;
    }
    resetOracle() {
        this._oracle.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get oracleInput() {
        return this._oracle.internalValue;
    }
    // postgresql - computed: false, optional: true, required: false
    _postgresql = new QuicksightDataSourceParametersPostgresqlOutputReference(this, "postgresql", true);
    get postgresql() {
        return this._postgresql;
    }
    putPostgresql(value) {
        this._postgresql.internalValue = value;
    }
    resetPostgresql() {
        this._postgresql.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get postgresqlInput() {
        return this._postgresql.internalValue;
    }
    // presto - computed: false, optional: true, required: false
    _presto = new QuicksightDataSourceParametersPrestoOutputReference(this, "presto", true);
    get presto() {
        return this._presto;
    }
    putPresto(value) {
        this._presto.internalValue = value;
    }
    resetPresto() {
        this._presto.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get prestoInput() {
        return this._presto.internalValue;
    }
    // rds - computed: false, optional: true, required: false
    _rds = new QuicksightDataSourceParametersRdsOutputReference(this, "rds", true);
    get rds() {
        return this._rds;
    }
    putRds(value) {
        this._rds.internalValue = value;
    }
    resetRds() {
        this._rds.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get rdsInput() {
        return this._rds.internalValue;
    }
    // redshift - computed: false, optional: true, required: false
    _redshift = new QuicksightDataSourceParametersRedshiftOutputReference(this, "redshift", true);
    get redshift() {
        return this._redshift;
    }
    putRedshift(value) {
        this._redshift.internalValue = value;
    }
    resetRedshift() {
        this._redshift.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get redshiftInput() {
        return this._redshift.internalValue;
    }
    // s3 - computed: false, optional: true, required: false
    _s3 = new QuicksightDataSourceParametersS3OutputReference(this, "s3", true);
    get s3() {
        return this._s3;
    }
    putS3(value) {
        this._s3.internalValue = value;
    }
    resetS3() {
        this._s3.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get s3Input() {
        return this._s3.internalValue;
    }
    // service_now - computed: false, optional: true, required: false
    _serviceNow = new QuicksightDataSourceParametersServiceNowOutputReference(this, "service_now", true);
    get serviceNow() {
        return this._serviceNow;
    }
    putServiceNow(value) {
        this._serviceNow.internalValue = value;
    }
    resetServiceNow() {
        this._serviceNow.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get serviceNowInput() {
        return this._serviceNow.internalValue;
    }
    // snowflake - computed: false, optional: true, required: false
    _snowflake = new QuicksightDataSourceParametersSnowflakeOutputReference(this, "snowflake", true);
    get snowflake() {
        return this._snowflake;
    }
    putSnowflake(value) {
        this._snowflake.internalValue = value;
    }
    resetSnowflake() {
        this._snowflake.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get snowflakeInput() {
        return this._snowflake.internalValue;
    }
    // spark - computed: false, optional: true, required: false
    _spark = new QuicksightDataSourceParametersSparkOutputReference(this, "spark", true);
    get spark() {
        return this._spark;
    }
    putSpark(value) {
        this._spark.internalValue = value;
    }
    resetSpark() {
        this._spark.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get sparkInput() {
        return this._spark.internalValue;
    }
    // sql_server - computed: false, optional: true, required: false
    _sqlServer = new QuicksightDataSourceParametersSqlServerOutputReference(this, "sql_server", true);
    get sqlServer() {
        return this._sqlServer;
    }
    putSqlServer(value) {
        this._sqlServer.internalValue = value;
    }
    resetSqlServer() {
        this._sqlServer.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get sqlServerInput() {
        return this._sqlServer.internalValue;
    }
    // teradata - computed: false, optional: true, required: false
    _teradata = new QuicksightDataSourceParametersTeradataOutputReference(this, "teradata", true);
    get teradata() {
        return this._teradata;
    }
    putTeradata(value) {
        this._teradata.internalValue = value;
    }
    resetTeradata() {
        this._teradata.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get teradataInput() {
        return this._teradata.internalValue;
    }
    // twitter - computed: false, optional: true, required: false
    _twitter = new QuicksightDataSourceParametersTwitterOutputReference(this, "twitter", true);
    get twitter() {
        return this._twitter;
    }
    putTwitter(value) {
        this._twitter.internalValue = value;
    }
    resetTwitter() {
        this._twitter.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get twitterInput() {
        return this._twitter.internalValue;
    }
}
export function quicksightDataSourcePermissionToTerraform(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 {
        actions: cdktf.listMapper(cdktf.stringToTerraform)(struct.actions),
        principal: cdktf.stringToTerraform(struct.principal),
    };
}
export function quicksightDataSourceSslPropertiesToTerraform(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 {
        disable_ssl: cdktf.booleanToTerraform(struct.disableSsl),
    };
}
export class QuicksightDataSourceSslPropertiesOutputReference 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._disableSsl !== undefined) {
            hasAnyValues = true;
            internalValueResult.disableSsl = this._disableSsl;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._disableSsl = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._disableSsl = value.disableSsl;
        }
    }
    // disable_ssl - computed: false, optional: false, required: true
    _disableSsl;
    get disableSsl() {
        return this.getBooleanAttribute('disable_ssl');
    }
    set disableSsl(value) {
        this._disableSsl = value;
    }
    // Temporarily expose input value. Use with caution.
    get disableSslInput() {
        return this._disableSsl;
    }
}
export function quicksightDataSourceVpcConnectionPropertiesToTerraform(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 {
        vpc_connection_arn: cdktf.stringToTerraform(struct.vpcConnectionArn),
    };
}
export class QuicksightDataSourceVpcConnectionPropertiesOutputReference 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._vpcConnectionArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.vpcConnectionArn = this._vpcConnectionArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._vpcConnectionArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._vpcConnectionArn = value.vpcConnectionArn;
        }
    }
    // vpc_connection_arn - computed: false, optional: false, required: true
    _vpcConnectionArn;
    get vpcConnectionArn() {
        return this.getStringAttribute('vpc_connection_arn');
    }
    set vpcConnectionArn(value) {
        this._vpcConnectionArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get vpcConnectionArnInput() {
        return this._vpcConnectionArn;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/quicksight_data_source aws_quicksight_data_source}
*/
export class QuicksightDataSource extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_quicksight_data_source";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/quicksight_data_source aws_quicksight_data_source} 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 QuicksightDataSourceConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_quicksight_data_source',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._awsAccountId = config.awsAccountId;
        this._dataSourceId = config.dataSourceId;
        this._name = config.name;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._type = config.type;
        this._credentials.internalValue = config.credentials;
        this._parameters.internalValue = config.parameters;
        this._permission = config.permission;
        this._sslProperties.internalValue = config.sslProperties;
        this._vpcConnectionProperties.internalValue = config.vpcConnectionProperties;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // aws_account_id - computed: true, optional: true, required: false
    _awsAccountId;
    get awsAccountId() {
        return this.getStringAttribute('aws_account_id');
    }
    set awsAccountId(value) {
        this._awsAccountId = value;
    }
    resetAwsAccountId() {
        this._awsAccountId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get awsAccountIdInput() {
        return this._awsAccountId;
    }
    // data_source_id - computed: false, optional: false, required: true
    _dataSourceId;
    get dataSourceId() {
        return this.getStringAttribute('data_source_id');
    }
    set dataSourceId(value) {
        this._dataSourceId = value;
    }
    // Temporarily expose input value. Use with caution.
    get dataSourceIdInput() {
        return this._dataSourceId;
    }
    // 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;
    }
    // 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;
    }
    // type - computed: false, optional: false, required: true
    _type;
    get type() {
        return this.getStringAttribute('type');
    }
    set type(value) {
        this._type = value;
    }
    // Temporarily expose input value. Use with caution.
    get typeInput() {
        return this._type;
    }
    // credentials - computed: false, optional: true, required: false
    _credentials = new QuicksightDataSourceCredentialsOutputReference(this, "credentials", true);
    get credentials() {
        return this._credentials;
    }
    putCredentials(value) {
        this._credentials.internalValue = value;
    }
    resetCredentials() {
        this._credentials.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get credentialsInput() {
        return this._credentials.internalValue;
    }
    // parameters - computed: false, optional: false, required: true
    _parameters = new QuicksightDataSourceParametersOutputReference(this, "parameters", true);
    get parameters() {
        return this._parameters;
    }
    putParameters(value) {
        this._parameters.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get parametersInput() {
        return this._parameters.internalValue;
    }
    // permission - computed: false, optional: true, required: false
    _permission;
    get permission() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('permission')));
    }
    set permission(value) {
        this._permission = value;
    }
    resetPermission() {
        this._permission = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get permissionInput() {
        return this._permission;
    }
    // ssl_properties - computed: false, optional: true, required: false
    _sslProperties = new QuicksightDataSourceSslPropertiesOutputReference(this, "ssl_properties", true);
    get sslProperties() {
        return this._sslProperties;
    }
    putSslProperties(value) {
        this._sslProperties.internalValue = value;
    }
    resetSslProperties() {
        this._sslProperties.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get sslPropertiesInput() {
        return this._sslProperties.internalValue;
    }
    // vpc_connection_properties - computed: false, optional: true, required: false
    _vpcConnectionProperties = new QuicksightDataSourceVpcConnectionPropertiesOutputReference(this, "vpc_connection_properties", true);
    get vpcConnectionProperties() {
        return this._vpcConnectionProperties;
    }
    putVpcConnectionProperties(value) {
        this._vpcConnectionProperties.internalValue = value;
    }
    resetVpcConnectionProperties() {
        this._vpcConnectionProperties.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get vpcConnectionPropertiesInput() {
        return this._vpcConnectionProperties.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            aws_account_id: cdktf.stringToTerraform(this._awsAccountId),
            data_source_id: cdktf.stringToTerraform(this._dataSourceId),
            name: cdktf.stringToTerraform(this._name),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            type: cdktf.stringToTerraform(this._type),
            credentials: quicksightDataSourceCredentialsToTerraform(this._credentials.internalValue),
            parameters: quicksightDataSourceParametersToTerraform(this._parameters.internalValue),
            permission: cdktf.listMapper(quicksightDataSourcePermissionToTerraform)(this._permission),
            ssl_properties: quicksightDataSourceSslPropertiesToTerraform(this._sslProperties.internalValue),
            vpc_connection_properties: quicksightDataSourceVpcConnectionPropertiesToTerraform(this._vpcConnectionProperties.internalValue),
        };
    }
}
//# sourceMappingURL=quicksight-data-source.js.map