// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function workspacesDirectorySelfServicePermissionsToTerraform(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 {
        change_compute_type: cdktf.booleanToTerraform(struct.changeComputeType),
        increase_volume_size: cdktf.booleanToTerraform(struct.increaseVolumeSize),
        rebuild_workspace: cdktf.booleanToTerraform(struct.rebuildWorkspace),
        restart_workspace: cdktf.booleanToTerraform(struct.restartWorkspace),
        switch_running_mode: cdktf.booleanToTerraform(struct.switchRunningMode),
    };
}
export class WorkspacesDirectorySelfServicePermissionsOutputReference 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._changeComputeType !== undefined) {
            hasAnyValues = true;
            internalValueResult.changeComputeType = this._changeComputeType;
        }
        if (this._increaseVolumeSize !== undefined) {
            hasAnyValues = true;
            internalValueResult.increaseVolumeSize = this._increaseVolumeSize;
        }
        if (this._rebuildWorkspace !== undefined) {
            hasAnyValues = true;
            internalValueResult.rebuildWorkspace = this._rebuildWorkspace;
        }
        if (this._restartWorkspace !== undefined) {
            hasAnyValues = true;
            internalValueResult.restartWorkspace = this._restartWorkspace;
        }
        if (this._switchRunningMode !== undefined) {
            hasAnyValues = true;
            internalValueResult.switchRunningMode = this._switchRunningMode;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._changeComputeType = undefined;
            this._increaseVolumeSize = undefined;
            this._rebuildWorkspace = undefined;
            this._restartWorkspace = undefined;
            this._switchRunningMode = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._changeComputeType = value.changeComputeType;
            this._increaseVolumeSize = value.increaseVolumeSize;
            this._rebuildWorkspace = value.rebuildWorkspace;
            this._restartWorkspace = value.restartWorkspace;
            this._switchRunningMode = value.switchRunningMode;
        }
    }
    // change_compute_type - computed: false, optional: true, required: false
    _changeComputeType;
    get changeComputeType() {
        return this.getBooleanAttribute('change_compute_type');
    }
    set changeComputeType(value) {
        this._changeComputeType = value;
    }
    resetChangeComputeType() {
        this._changeComputeType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get changeComputeTypeInput() {
        return this._changeComputeType;
    }
    // increase_volume_size - computed: false, optional: true, required: false
    _increaseVolumeSize;
    get increaseVolumeSize() {
        return this.getBooleanAttribute('increase_volume_size');
    }
    set increaseVolumeSize(value) {
        this._increaseVolumeSize = value;
    }
    resetIncreaseVolumeSize() {
        this._increaseVolumeSize = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get increaseVolumeSizeInput() {
        return this._increaseVolumeSize;
    }
    // rebuild_workspace - computed: false, optional: true, required: false
    _rebuildWorkspace;
    get rebuildWorkspace() {
        return this.getBooleanAttribute('rebuild_workspace');
    }
    set rebuildWorkspace(value) {
        this._rebuildWorkspace = value;
    }
    resetRebuildWorkspace() {
        this._rebuildWorkspace = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get rebuildWorkspaceInput() {
        return this._rebuildWorkspace;
    }
    // restart_workspace - computed: false, optional: true, required: false
    _restartWorkspace;
    get restartWorkspace() {
        return this.getBooleanAttribute('restart_workspace');
    }
    set restartWorkspace(value) {
        this._restartWorkspace = value;
    }
    resetRestartWorkspace() {
        this._restartWorkspace = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get restartWorkspaceInput() {
        return this._restartWorkspace;
    }
    // switch_running_mode - computed: false, optional: true, required: false
    _switchRunningMode;
    get switchRunningMode() {
        return this.getBooleanAttribute('switch_running_mode');
    }
    set switchRunningMode(value) {
        this._switchRunningMode = value;
    }
    resetSwitchRunningMode() {
        this._switchRunningMode = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get switchRunningModeInput() {
        return this._switchRunningMode;
    }
}
export function workspacesDirectoryWorkspaceAccessPropertiesToTerraform(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 {
        device_type_android: cdktf.stringToTerraform(struct.deviceTypeAndroid),
        device_type_chromeos: cdktf.stringToTerraform(struct.deviceTypeChromeos),
        device_type_ios: cdktf.stringToTerraform(struct.deviceTypeIos),
        device_type_linux: cdktf.stringToTerraform(struct.deviceTypeLinux),
        device_type_osx: cdktf.stringToTerraform(struct.deviceTypeOsx),
        device_type_web: cdktf.stringToTerraform(struct.deviceTypeWeb),
        device_type_windows: cdktf.stringToTerraform(struct.deviceTypeWindows),
        device_type_zeroclient: cdktf.stringToTerraform(struct.deviceTypeZeroclient),
    };
}
export class WorkspacesDirectoryWorkspaceAccessPropertiesOutputReference 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._deviceTypeAndroid !== undefined) {
            hasAnyValues = true;
            internalValueResult.deviceTypeAndroid = this._deviceTypeAndroid;
        }
        if (this._deviceTypeChromeos !== undefined) {
            hasAnyValues = true;
            internalValueResult.deviceTypeChromeos = this._deviceTypeChromeos;
        }
        if (this._deviceTypeIos !== undefined) {
            hasAnyValues = true;
            internalValueResult.deviceTypeIos = this._deviceTypeIos;
        }
        if (this._deviceTypeLinux !== undefined) {
            hasAnyValues = true;
            internalValueResult.deviceTypeLinux = this._deviceTypeLinux;
        }
        if (this._deviceTypeOsx !== undefined) {
            hasAnyValues = true;
            internalValueResult.deviceTypeOsx = this._deviceTypeOsx;
        }
        if (this._deviceTypeWeb !== undefined) {
            hasAnyValues = true;
            internalValueResult.deviceTypeWeb = this._deviceTypeWeb;
        }
        if (this._deviceTypeWindows !== undefined) {
            hasAnyValues = true;
            internalValueResult.deviceTypeWindows = this._deviceTypeWindows;
        }
        if (this._deviceTypeZeroclient !== undefined) {
            hasAnyValues = true;
            internalValueResult.deviceTypeZeroclient = this._deviceTypeZeroclient;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._deviceTypeAndroid = undefined;
            this._deviceTypeChromeos = undefined;
            this._deviceTypeIos = undefined;
            this._deviceTypeLinux = undefined;
            this._deviceTypeOsx = undefined;
            this._deviceTypeWeb = undefined;
            this._deviceTypeWindows = undefined;
            this._deviceTypeZeroclient = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._deviceTypeAndroid = value.deviceTypeAndroid;
            this._deviceTypeChromeos = value.deviceTypeChromeos;
            this._deviceTypeIos = value.deviceTypeIos;
            this._deviceTypeLinux = value.deviceTypeLinux;
            this._deviceTypeOsx = value.deviceTypeOsx;
            this._deviceTypeWeb = value.deviceTypeWeb;
            this._deviceTypeWindows = value.deviceTypeWindows;
            this._deviceTypeZeroclient = value.deviceTypeZeroclient;
        }
    }
    // device_type_android - computed: false, optional: true, required: false
    _deviceTypeAndroid;
    get deviceTypeAndroid() {
        return this.getStringAttribute('device_type_android');
    }
    set deviceTypeAndroid(value) {
        this._deviceTypeAndroid = value;
    }
    resetDeviceTypeAndroid() {
        this._deviceTypeAndroid = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceTypeAndroidInput() {
        return this._deviceTypeAndroid;
    }
    // device_type_chromeos - computed: false, optional: true, required: false
    _deviceTypeChromeos;
    get deviceTypeChromeos() {
        return this.getStringAttribute('device_type_chromeos');
    }
    set deviceTypeChromeos(value) {
        this._deviceTypeChromeos = value;
    }
    resetDeviceTypeChromeos() {
        this._deviceTypeChromeos = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceTypeChromeosInput() {
        return this._deviceTypeChromeos;
    }
    // device_type_ios - computed: false, optional: true, required: false
    _deviceTypeIos;
    get deviceTypeIos() {
        return this.getStringAttribute('device_type_ios');
    }
    set deviceTypeIos(value) {
        this._deviceTypeIos = value;
    }
    resetDeviceTypeIos() {
        this._deviceTypeIos = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceTypeIosInput() {
        return this._deviceTypeIos;
    }
    // device_type_linux - computed: false, optional: true, required: false
    _deviceTypeLinux;
    get deviceTypeLinux() {
        return this.getStringAttribute('device_type_linux');
    }
    set deviceTypeLinux(value) {
        this._deviceTypeLinux = value;
    }
    resetDeviceTypeLinux() {
        this._deviceTypeLinux = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceTypeLinuxInput() {
        return this._deviceTypeLinux;
    }
    // device_type_osx - computed: false, optional: true, required: false
    _deviceTypeOsx;
    get deviceTypeOsx() {
        return this.getStringAttribute('device_type_osx');
    }
    set deviceTypeOsx(value) {
        this._deviceTypeOsx = value;
    }
    resetDeviceTypeOsx() {
        this._deviceTypeOsx = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceTypeOsxInput() {
        return this._deviceTypeOsx;
    }
    // device_type_web - computed: false, optional: true, required: false
    _deviceTypeWeb;
    get deviceTypeWeb() {
        return this.getStringAttribute('device_type_web');
    }
    set deviceTypeWeb(value) {
        this._deviceTypeWeb = value;
    }
    resetDeviceTypeWeb() {
        this._deviceTypeWeb = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceTypeWebInput() {
        return this._deviceTypeWeb;
    }
    // device_type_windows - computed: false, optional: true, required: false
    _deviceTypeWindows;
    get deviceTypeWindows() {
        return this.getStringAttribute('device_type_windows');
    }
    set deviceTypeWindows(value) {
        this._deviceTypeWindows = value;
    }
    resetDeviceTypeWindows() {
        this._deviceTypeWindows = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceTypeWindowsInput() {
        return this._deviceTypeWindows;
    }
    // device_type_zeroclient - computed: false, optional: true, required: false
    _deviceTypeZeroclient;
    get deviceTypeZeroclient() {
        return this.getStringAttribute('device_type_zeroclient');
    }
    set deviceTypeZeroclient(value) {
        this._deviceTypeZeroclient = value;
    }
    resetDeviceTypeZeroclient() {
        this._deviceTypeZeroclient = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deviceTypeZeroclientInput() {
        return this._deviceTypeZeroclient;
    }
}
export function workspacesDirectoryWorkspaceCreationPropertiesToTerraform(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 {
        custom_security_group_id: cdktf.stringToTerraform(struct.customSecurityGroupId),
        default_ou: cdktf.stringToTerraform(struct.defaultOu),
        enable_internet_access: cdktf.booleanToTerraform(struct.enableInternetAccess),
        enable_maintenance_mode: cdktf.booleanToTerraform(struct.enableMaintenanceMode),
        user_enabled_as_local_administrator: cdktf.booleanToTerraform(struct.userEnabledAsLocalAdministrator),
    };
}
export class WorkspacesDirectoryWorkspaceCreationPropertiesOutputReference 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._customSecurityGroupId !== undefined) {
            hasAnyValues = true;
            internalValueResult.customSecurityGroupId = this._customSecurityGroupId;
        }
        if (this._defaultOu !== undefined) {
            hasAnyValues = true;
            internalValueResult.defaultOu = this._defaultOu;
        }
        if (this._enableInternetAccess !== undefined) {
            hasAnyValues = true;
            internalValueResult.enableInternetAccess = this._enableInternetAccess;
        }
        if (this._enableMaintenanceMode !== undefined) {
            hasAnyValues = true;
            internalValueResult.enableMaintenanceMode = this._enableMaintenanceMode;
        }
        if (this._userEnabledAsLocalAdministrator !== undefined) {
            hasAnyValues = true;
            internalValueResult.userEnabledAsLocalAdministrator = this._userEnabledAsLocalAdministrator;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._customSecurityGroupId = undefined;
            this._defaultOu = undefined;
            this._enableInternetAccess = undefined;
            this._enableMaintenanceMode = undefined;
            this._userEnabledAsLocalAdministrator = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._customSecurityGroupId = value.customSecurityGroupId;
            this._defaultOu = value.defaultOu;
            this._enableInternetAccess = value.enableInternetAccess;
            this._enableMaintenanceMode = value.enableMaintenanceMode;
            this._userEnabledAsLocalAdministrator = value.userEnabledAsLocalAdministrator;
        }
    }
    // custom_security_group_id - computed: false, optional: true, required: false
    _customSecurityGroupId;
    get customSecurityGroupId() {
        return this.getStringAttribute('custom_security_group_id');
    }
    set customSecurityGroupId(value) {
        this._customSecurityGroupId = value;
    }
    resetCustomSecurityGroupId() {
        this._customSecurityGroupId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get customSecurityGroupIdInput() {
        return this._customSecurityGroupId;
    }
    // default_ou - computed: false, optional: true, required: false
    _defaultOu;
    get defaultOu() {
        return this.getStringAttribute('default_ou');
    }
    set defaultOu(value) {
        this._defaultOu = value;
    }
    resetDefaultOu() {
        this._defaultOu = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get defaultOuInput() {
        return this._defaultOu;
    }
    // enable_internet_access - computed: false, optional: true, required: false
    _enableInternetAccess;
    get enableInternetAccess() {
        return this.getBooleanAttribute('enable_internet_access');
    }
    set enableInternetAccess(value) {
        this._enableInternetAccess = value;
    }
    resetEnableInternetAccess() {
        this._enableInternetAccess = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get enableInternetAccessInput() {
        return this._enableInternetAccess;
    }
    // enable_maintenance_mode - computed: false, optional: true, required: false
    _enableMaintenanceMode;
    get enableMaintenanceMode() {
        return this.getBooleanAttribute('enable_maintenance_mode');
    }
    set enableMaintenanceMode(value) {
        this._enableMaintenanceMode = value;
    }
    resetEnableMaintenanceMode() {
        this._enableMaintenanceMode = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get enableMaintenanceModeInput() {
        return this._enableMaintenanceMode;
    }
    // user_enabled_as_local_administrator - computed: false, optional: true, required: false
    _userEnabledAsLocalAdministrator;
    get userEnabledAsLocalAdministrator() {
        return this.getBooleanAttribute('user_enabled_as_local_administrator');
    }
    set userEnabledAsLocalAdministrator(value) {
        this._userEnabledAsLocalAdministrator = value;
    }
    resetUserEnabledAsLocalAdministrator() {
        this._userEnabledAsLocalAdministrator = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get userEnabledAsLocalAdministratorInput() {
        return this._userEnabledAsLocalAdministrator;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/workspaces_directory aws_workspaces_directory}
*/
export class WorkspacesDirectory extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_workspaces_directory";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/workspaces_directory aws_workspaces_directory} 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 WorkspacesDirectoryConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_workspaces_directory',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._directoryId = config.directoryId;
        this._ipGroupIds = config.ipGroupIds;
        this._subnetIds = config.subnetIds;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._selfServicePermissions.internalValue = config.selfServicePermissions;
        this._workspaceAccessProperties.internalValue = config.workspaceAccessProperties;
        this._workspaceCreationProperties.internalValue = config.workspaceCreationProperties;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // alias - computed: true, optional: false, required: false
    get alias() {
        return this.getStringAttribute('alias');
    }
    // customer_user_name - computed: true, optional: false, required: false
    get customerUserName() {
        return this.getStringAttribute('customer_user_name');
    }
    // directory_id - computed: false, optional: false, required: true
    _directoryId;
    get directoryId() {
        return this.getStringAttribute('directory_id');
    }
    set directoryId(value) {
        this._directoryId = value;
    }
    // Temporarily expose input value. Use with caution.
    get directoryIdInput() {
        return this._directoryId;
    }
    // directory_name - computed: true, optional: false, required: false
    get directoryName() {
        return this.getStringAttribute('directory_name');
    }
    // directory_type - computed: true, optional: false, required: false
    get directoryType() {
        return this.getStringAttribute('directory_type');
    }
    // dns_ip_addresses - computed: true, optional: false, required: false
    get dnsIpAddresses() {
        return cdktf.Fn.tolist(this.getListAttribute('dns_ip_addresses'));
    }
    // iam_role_id - computed: true, optional: false, required: false
    get iamRoleId() {
        return this.getStringAttribute('iam_role_id');
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // ip_group_ids - computed: true, optional: true, required: false
    _ipGroupIds;
    get ipGroupIds() {
        return cdktf.Fn.tolist(this.getListAttribute('ip_group_ids'));
    }
    set ipGroupIds(value) {
        this._ipGroupIds = value;
    }
    resetIpGroupIds() {
        this._ipGroupIds = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipGroupIdsInput() {
        return this._ipGroupIds;
    }
    // registration_code - computed: true, optional: false, required: false
    get registrationCode() {
        return this.getStringAttribute('registration_code');
    }
    // subnet_ids - computed: true, optional: true, required: false
    _subnetIds;
    get subnetIds() {
        return cdktf.Fn.tolist(this.getListAttribute('subnet_ids'));
    }
    set subnetIds(value) {
        this._subnetIds = value;
    }
    resetSubnetIds() {
        this._subnetIds = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get subnetIdsInput() {
        return this._subnetIds;
    }
    // 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;
    }
    // workspace_security_group_id - computed: true, optional: false, required: false
    get workspaceSecurityGroupId() {
        return this.getStringAttribute('workspace_security_group_id');
    }
    // self_service_permissions - computed: false, optional: true, required: false
    _selfServicePermissions = new WorkspacesDirectorySelfServicePermissionsOutputReference(this, "self_service_permissions", true);
    get selfServicePermissions() {
        return this._selfServicePermissions;
    }
    putSelfServicePermissions(value) {
        this._selfServicePermissions.internalValue = value;
    }
    resetSelfServicePermissions() {
        this._selfServicePermissions.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get selfServicePermissionsInput() {
        return this._selfServicePermissions.internalValue;
    }
    // workspace_access_properties - computed: false, optional: true, required: false
    _workspaceAccessProperties = new WorkspacesDirectoryWorkspaceAccessPropertiesOutputReference(this, "workspace_access_properties", true);
    get workspaceAccessProperties() {
        return this._workspaceAccessProperties;
    }
    putWorkspaceAccessProperties(value) {
        this._workspaceAccessProperties.internalValue = value;
    }
    resetWorkspaceAccessProperties() {
        this._workspaceAccessProperties.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get workspaceAccessPropertiesInput() {
        return this._workspaceAccessProperties.internalValue;
    }
    // workspace_creation_properties - computed: false, optional: true, required: false
    _workspaceCreationProperties = new WorkspacesDirectoryWorkspaceCreationPropertiesOutputReference(this, "workspace_creation_properties", true);
    get workspaceCreationProperties() {
        return this._workspaceCreationProperties;
    }
    putWorkspaceCreationProperties(value) {
        this._workspaceCreationProperties.internalValue = value;
    }
    resetWorkspaceCreationProperties() {
        this._workspaceCreationProperties.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get workspaceCreationPropertiesInput() {
        return this._workspaceCreationProperties.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            directory_id: cdktf.stringToTerraform(this._directoryId),
            ip_group_ids: cdktf.listMapper(cdktf.stringToTerraform)(this._ipGroupIds),
            subnet_ids: cdktf.listMapper(cdktf.stringToTerraform)(this._subnetIds),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            self_service_permissions: workspacesDirectorySelfServicePermissionsToTerraform(this._selfServicePermissions.internalValue),
            workspace_access_properties: workspacesDirectoryWorkspaceAccessPropertiesToTerraform(this._workspaceAccessProperties.internalValue),
            workspace_creation_properties: workspacesDirectoryWorkspaceCreationPropertiesToTerraform(this._workspaceCreationProperties.internalValue),
        };
    }
}
//# sourceMappingURL=workspaces-directory.js.map