// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function storagegatewaySmbFileShareCacheAttributesToTerraform(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 {
        cache_stale_timeout_in_seconds: cdktf.numberToTerraform(struct.cacheStaleTimeoutInSeconds),
    };
}
export class StoragegatewaySmbFileShareCacheAttributesOutputReference 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._cacheStaleTimeoutInSeconds !== undefined) {
            hasAnyValues = true;
            internalValueResult.cacheStaleTimeoutInSeconds = this._cacheStaleTimeoutInSeconds;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._cacheStaleTimeoutInSeconds = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._cacheStaleTimeoutInSeconds = value.cacheStaleTimeoutInSeconds;
        }
    }
    // cache_stale_timeout_in_seconds - computed: false, optional: true, required: false
    _cacheStaleTimeoutInSeconds;
    get cacheStaleTimeoutInSeconds() {
        return this.getNumberAttribute('cache_stale_timeout_in_seconds');
    }
    set cacheStaleTimeoutInSeconds(value) {
        this._cacheStaleTimeoutInSeconds = value;
    }
    resetCacheStaleTimeoutInSeconds() {
        this._cacheStaleTimeoutInSeconds = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cacheStaleTimeoutInSecondsInput() {
        return this._cacheStaleTimeoutInSeconds;
    }
}
export function storagegatewaySmbFileShareTimeoutsToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        create: cdktf.stringToTerraform(struct.create),
        delete: cdktf.stringToTerraform(struct.delete),
        update: cdktf.stringToTerraform(struct.update),
    };
}
export class StoragegatewaySmbFileShareTimeoutsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._create !== undefined) {
            hasAnyValues = true;
            internalValueResult.create = this._create;
        }
        if (this._delete !== undefined) {
            hasAnyValues = true;
            internalValueResult.delete = this._delete;
        }
        if (this._update !== undefined) {
            hasAnyValues = true;
            internalValueResult.update = this._update;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._create = undefined;
            this._delete = undefined;
            this._update = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._create = value.create;
            this._delete = value.delete;
            this._update = value.update;
        }
    }
    // create - computed: false, optional: true, required: false
    _create;
    get create() {
        return this.getStringAttribute('create');
    }
    set create(value) {
        this._create = value;
    }
    resetCreate() {
        this._create = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get createInput() {
        return this._create;
    }
    // delete - computed: false, optional: true, required: false
    _delete;
    get delete() {
        return this.getStringAttribute('delete');
    }
    set delete(value) {
        this._delete = value;
    }
    resetDelete() {
        this._delete = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deleteInput() {
        return this._delete;
    }
    // update - computed: false, optional: true, required: false
    _update;
    get update() {
        return this.getStringAttribute('update');
    }
    set update(value) {
        this._update = value;
    }
    resetUpdate() {
        this._update = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get updateInput() {
        return this._update;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/storagegateway_smb_file_share aws_storagegateway_smb_file_share}
*/
export class StoragegatewaySmbFileShare extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_storagegateway_smb_file_share";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/storagegateway_smb_file_share aws_storagegateway_smb_file_share} 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 StoragegatewaySmbFileShareConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_storagegateway_smb_file_share',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._accessBasedEnumeration = config.accessBasedEnumeration;
        this._adminUserList = config.adminUserList;
        this._auditDestinationArn = config.auditDestinationArn;
        this._authentication = config.authentication;
        this._bucketRegion = config.bucketRegion;
        this._caseSensitivity = config.caseSensitivity;
        this._defaultStorageClass = config.defaultStorageClass;
        this._fileShareName = config.fileShareName;
        this._gatewayArn = config.gatewayArn;
        this._guessMimeTypeEnabled = config.guessMimeTypeEnabled;
        this._invalidUserList = config.invalidUserList;
        this._kmsEncrypted = config.kmsEncrypted;
        this._kmsKeyArn = config.kmsKeyArn;
        this._locationArn = config.locationArn;
        this._notificationPolicy = config.notificationPolicy;
        this._objectAcl = config.objectAcl;
        this._oplocksEnabled = config.oplocksEnabled;
        this._readOnly = config.readOnly;
        this._requesterPays = config.requesterPays;
        this._roleArn = config.roleArn;
        this._smbAclEnabled = config.smbAclEnabled;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._validUserList = config.validUserList;
        this._vpcEndpointDnsName = config.vpcEndpointDnsName;
        this._cacheAttributes.internalValue = config.cacheAttributes;
        this._timeouts.internalValue = config.timeouts;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // access_based_enumeration - computed: false, optional: true, required: false
    _accessBasedEnumeration;
    get accessBasedEnumeration() {
        return this.getBooleanAttribute('access_based_enumeration');
    }
    set accessBasedEnumeration(value) {
        this._accessBasedEnumeration = value;
    }
    resetAccessBasedEnumeration() {
        this._accessBasedEnumeration = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get accessBasedEnumerationInput() {
        return this._accessBasedEnumeration;
    }
    // admin_user_list - computed: false, optional: true, required: false
    _adminUserList;
    get adminUserList() {
        return cdktf.Fn.tolist(this.getListAttribute('admin_user_list'));
    }
    set adminUserList(value) {
        this._adminUserList = value;
    }
    resetAdminUserList() {
        this._adminUserList = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get adminUserListInput() {
        return this._adminUserList;
    }
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // audit_destination_arn - computed: false, optional: true, required: false
    _auditDestinationArn;
    get auditDestinationArn() {
        return this.getStringAttribute('audit_destination_arn');
    }
    set auditDestinationArn(value) {
        this._auditDestinationArn = value;
    }
    resetAuditDestinationArn() {
        this._auditDestinationArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get auditDestinationArnInput() {
        return this._auditDestinationArn;
    }
    // authentication - computed: false, optional: true, required: false
    _authentication;
    get authentication() {
        return this.getStringAttribute('authentication');
    }
    set authentication(value) {
        this._authentication = value;
    }
    resetAuthentication() {
        this._authentication = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get authenticationInput() {
        return this._authentication;
    }
    // bucket_region - computed: false, optional: true, required: false
    _bucketRegion;
    get bucketRegion() {
        return this.getStringAttribute('bucket_region');
    }
    set bucketRegion(value) {
        this._bucketRegion = value;
    }
    resetBucketRegion() {
        this._bucketRegion = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get bucketRegionInput() {
        return this._bucketRegion;
    }
    // case_sensitivity - computed: false, optional: true, required: false
    _caseSensitivity;
    get caseSensitivity() {
        return this.getStringAttribute('case_sensitivity');
    }
    set caseSensitivity(value) {
        this._caseSensitivity = value;
    }
    resetCaseSensitivity() {
        this._caseSensitivity = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get caseSensitivityInput() {
        return this._caseSensitivity;
    }
    // default_storage_class - computed: false, optional: true, required: false
    _defaultStorageClass;
    get defaultStorageClass() {
        return this.getStringAttribute('default_storage_class');
    }
    set defaultStorageClass(value) {
        this._defaultStorageClass = value;
    }
    resetDefaultStorageClass() {
        this._defaultStorageClass = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get defaultStorageClassInput() {
        return this._defaultStorageClass;
    }
    // file_share_name - computed: true, optional: true, required: false
    _fileShareName;
    get fileShareName() {
        return this.getStringAttribute('file_share_name');
    }
    set fileShareName(value) {
        this._fileShareName = value;
    }
    resetFileShareName() {
        this._fileShareName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get fileShareNameInput() {
        return this._fileShareName;
    }
    // fileshare_id - computed: true, optional: false, required: false
    get fileshareId() {
        return this.getStringAttribute('fileshare_id');
    }
    // gateway_arn - computed: false, optional: false, required: true
    _gatewayArn;
    get gatewayArn() {
        return this.getStringAttribute('gateway_arn');
    }
    set gatewayArn(value) {
        this._gatewayArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get gatewayArnInput() {
        return this._gatewayArn;
    }
    // guess_mime_type_enabled - computed: false, optional: true, required: false
    _guessMimeTypeEnabled;
    get guessMimeTypeEnabled() {
        return this.getBooleanAttribute('guess_mime_type_enabled');
    }
    set guessMimeTypeEnabled(value) {
        this._guessMimeTypeEnabled = value;
    }
    resetGuessMimeTypeEnabled() {
        this._guessMimeTypeEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get guessMimeTypeEnabledInput() {
        return this._guessMimeTypeEnabled;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // invalid_user_list - computed: false, optional: true, required: false
    _invalidUserList;
    get invalidUserList() {
        return cdktf.Fn.tolist(this.getListAttribute('invalid_user_list'));
    }
    set invalidUserList(value) {
        this._invalidUserList = value;
    }
    resetInvalidUserList() {
        this._invalidUserList = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get invalidUserListInput() {
        return this._invalidUserList;
    }
    // kms_encrypted - computed: false, optional: true, required: false
    _kmsEncrypted;
    get kmsEncrypted() {
        return this.getBooleanAttribute('kms_encrypted');
    }
    set kmsEncrypted(value) {
        this._kmsEncrypted = value;
    }
    resetKmsEncrypted() {
        this._kmsEncrypted = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get kmsEncryptedInput() {
        return this._kmsEncrypted;
    }
    // kms_key_arn - computed: false, optional: true, required: false
    _kmsKeyArn;
    get kmsKeyArn() {
        return this.getStringAttribute('kms_key_arn');
    }
    set kmsKeyArn(value) {
        this._kmsKeyArn = value;
    }
    resetKmsKeyArn() {
        this._kmsKeyArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get kmsKeyArnInput() {
        return this._kmsKeyArn;
    }
    // location_arn - computed: false, optional: false, required: true
    _locationArn;
    get locationArn() {
        return this.getStringAttribute('location_arn');
    }
    set locationArn(value) {
        this._locationArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get locationArnInput() {
        return this._locationArn;
    }
    // notification_policy - computed: false, optional: true, required: false
    _notificationPolicy;
    get notificationPolicy() {
        return this.getStringAttribute('notification_policy');
    }
    set notificationPolicy(value) {
        this._notificationPolicy = value;
    }
    resetNotificationPolicy() {
        this._notificationPolicy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get notificationPolicyInput() {
        return this._notificationPolicy;
    }
    // object_acl - computed: false, optional: true, required: false
    _objectAcl;
    get objectAcl() {
        return this.getStringAttribute('object_acl');
    }
    set objectAcl(value) {
        this._objectAcl = value;
    }
    resetObjectAcl() {
        this._objectAcl = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get objectAclInput() {
        return this._objectAcl;
    }
    // oplocks_enabled - computed: true, optional: true, required: false
    _oplocksEnabled;
    get oplocksEnabled() {
        return this.getBooleanAttribute('oplocks_enabled');
    }
    set oplocksEnabled(value) {
        this._oplocksEnabled = value;
    }
    resetOplocksEnabled() {
        this._oplocksEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get oplocksEnabledInput() {
        return this._oplocksEnabled;
    }
    // path - computed: true, optional: false, required: false
    get path() {
        return this.getStringAttribute('path');
    }
    // read_only - computed: false, optional: true, required: false
    _readOnly;
    get readOnly() {
        return this.getBooleanAttribute('read_only');
    }
    set readOnly(value) {
        this._readOnly = value;
    }
    resetReadOnly() {
        this._readOnly = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get readOnlyInput() {
        return this._readOnly;
    }
    // requester_pays - computed: false, optional: true, required: false
    _requesterPays;
    get requesterPays() {
        return this.getBooleanAttribute('requester_pays');
    }
    set requesterPays(value) {
        this._requesterPays = value;
    }
    resetRequesterPays() {
        this._requesterPays = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get requesterPaysInput() {
        return this._requesterPays;
    }
    // role_arn - computed: false, optional: false, required: true
    _roleArn;
    get roleArn() {
        return this.getStringAttribute('role_arn');
    }
    set roleArn(value) {
        this._roleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get roleArnInput() {
        return this._roleArn;
    }
    // smb_acl_enabled - computed: false, optional: true, required: false
    _smbAclEnabled;
    get smbAclEnabled() {
        return this.getBooleanAttribute('smb_acl_enabled');
    }
    set smbAclEnabled(value) {
        this._smbAclEnabled = value;
    }
    resetSmbAclEnabled() {
        this._smbAclEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get smbAclEnabledInput() {
        return this._smbAclEnabled;
    }
    // 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;
    }
    // valid_user_list - computed: false, optional: true, required: false
    _validUserList;
    get validUserList() {
        return cdktf.Fn.tolist(this.getListAttribute('valid_user_list'));
    }
    set validUserList(value) {
        this._validUserList = value;
    }
    resetValidUserList() {
        this._validUserList = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get validUserListInput() {
        return this._validUserList;
    }
    // vpc_endpoint_dns_name - computed: false, optional: true, required: false
    _vpcEndpointDnsName;
    get vpcEndpointDnsName() {
        return this.getStringAttribute('vpc_endpoint_dns_name');
    }
    set vpcEndpointDnsName(value) {
        this._vpcEndpointDnsName = value;
    }
    resetVpcEndpointDnsName() {
        this._vpcEndpointDnsName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get vpcEndpointDnsNameInput() {
        return this._vpcEndpointDnsName;
    }
    // cache_attributes - computed: false, optional: true, required: false
    _cacheAttributes = new StoragegatewaySmbFileShareCacheAttributesOutputReference(this, "cache_attributes", true);
    get cacheAttributes() {
        return this._cacheAttributes;
    }
    putCacheAttributes(value) {
        this._cacheAttributes.internalValue = value;
    }
    resetCacheAttributes() {
        this._cacheAttributes.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cacheAttributesInput() {
        return this._cacheAttributes.internalValue;
    }
    // timeouts - computed: false, optional: true, required: false
    _timeouts = new StoragegatewaySmbFileShareTimeoutsOutputReference(this, "timeouts", true);
    get timeouts() {
        return this._timeouts;
    }
    putTimeouts(value) {
        this._timeouts.internalValue = value;
    }
    resetTimeouts() {
        this._timeouts.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get timeoutsInput() {
        return this._timeouts.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            access_based_enumeration: cdktf.booleanToTerraform(this._accessBasedEnumeration),
            admin_user_list: cdktf.listMapper(cdktf.stringToTerraform)(this._adminUserList),
            audit_destination_arn: cdktf.stringToTerraform(this._auditDestinationArn),
            authentication: cdktf.stringToTerraform(this._authentication),
            bucket_region: cdktf.stringToTerraform(this._bucketRegion),
            case_sensitivity: cdktf.stringToTerraform(this._caseSensitivity),
            default_storage_class: cdktf.stringToTerraform(this._defaultStorageClass),
            file_share_name: cdktf.stringToTerraform(this._fileShareName),
            gateway_arn: cdktf.stringToTerraform(this._gatewayArn),
            guess_mime_type_enabled: cdktf.booleanToTerraform(this._guessMimeTypeEnabled),
            invalid_user_list: cdktf.listMapper(cdktf.stringToTerraform)(this._invalidUserList),
            kms_encrypted: cdktf.booleanToTerraform(this._kmsEncrypted),
            kms_key_arn: cdktf.stringToTerraform(this._kmsKeyArn),
            location_arn: cdktf.stringToTerraform(this._locationArn),
            notification_policy: cdktf.stringToTerraform(this._notificationPolicy),
            object_acl: cdktf.stringToTerraform(this._objectAcl),
            oplocks_enabled: cdktf.booleanToTerraform(this._oplocksEnabled),
            read_only: cdktf.booleanToTerraform(this._readOnly),
            requester_pays: cdktf.booleanToTerraform(this._requesterPays),
            role_arn: cdktf.stringToTerraform(this._roleArn),
            smb_acl_enabled: cdktf.booleanToTerraform(this._smbAclEnabled),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            valid_user_list: cdktf.listMapper(cdktf.stringToTerraform)(this._validUserList),
            vpc_endpoint_dns_name: cdktf.stringToTerraform(this._vpcEndpointDnsName),
            cache_attributes: storagegatewaySmbFileShareCacheAttributesToTerraform(this._cacheAttributes.internalValue),
            timeouts: storagegatewaySmbFileShareTimeoutsToTerraform(this._timeouts.internalValue),
        };
    }
}
//# sourceMappingURL=storagegateway-smb-file-share.js.map