// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function ecsTaskDefinitionEphemeralStorageToTerraform(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 {
        size_in_gib: cdktf.numberToTerraform(struct.sizeInGib),
    };
}
export class EcsTaskDefinitionEphemeralStorageOutputReference 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._sizeInGib !== undefined) {
            hasAnyValues = true;
            internalValueResult.sizeInGib = this._sizeInGib;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._sizeInGib = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._sizeInGib = value.sizeInGib;
        }
    }
    // size_in_gib - computed: false, optional: false, required: true
    _sizeInGib;
    get sizeInGib() {
        return this.getNumberAttribute('size_in_gib');
    }
    set sizeInGib(value) {
        this._sizeInGib = value;
    }
    // Temporarily expose input value. Use with caution.
    get sizeInGibInput() {
        return this._sizeInGib;
    }
}
export function ecsTaskDefinitionInferenceAcceleratorToTerraform(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_name: cdktf.stringToTerraform(struct.deviceName),
        device_type: cdktf.stringToTerraform(struct.deviceType),
    };
}
export function ecsTaskDefinitionPlacementConstraintsToTerraform(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 {
        expression: cdktf.stringToTerraform(struct.expression),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export function ecsTaskDefinitionProxyConfigurationToTerraform(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 {
        container_name: cdktf.stringToTerraform(struct.containerName),
        properties: cdktf.hashMapper(cdktf.stringToTerraform)(struct.properties),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export class EcsTaskDefinitionProxyConfigurationOutputReference 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._containerName !== undefined) {
            hasAnyValues = true;
            internalValueResult.containerName = this._containerName;
        }
        if (this._properties !== undefined) {
            hasAnyValues = true;
            internalValueResult.properties = this._properties;
        }
        if (this._type !== undefined) {
            hasAnyValues = true;
            internalValueResult.type = this._type;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._containerName = undefined;
            this._properties = undefined;
            this._type = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._containerName = value.containerName;
            this._properties = value.properties;
            this._type = value.type;
        }
    }
    // container_name - computed: false, optional: false, required: true
    _containerName;
    get containerName() {
        return this.getStringAttribute('container_name');
    }
    set containerName(value) {
        this._containerName = value;
    }
    // Temporarily expose input value. Use with caution.
    get containerNameInput() {
        return this._containerName;
    }
    // properties - computed: false, optional: true, required: false
    _properties;
    get properties() {
        return this.getStringMapAttribute('properties');
    }
    set properties(value) {
        this._properties = value;
    }
    resetProperties() {
        this._properties = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get propertiesInput() {
        return this._properties;
    }
    // type - computed: false, optional: true, required: false
    _type;
    get type() {
        return this.getStringAttribute('type');
    }
    set type(value) {
        this._type = value;
    }
    resetType() {
        this._type = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get typeInput() {
        return this._type;
    }
}
export function ecsTaskDefinitionRuntimePlatformToTerraform(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 {
        cpu_architecture: cdktf.stringToTerraform(struct.cpuArchitecture),
        operating_system_family: cdktf.stringToTerraform(struct.operatingSystemFamily),
    };
}
export class EcsTaskDefinitionRuntimePlatformOutputReference 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._cpuArchitecture !== undefined) {
            hasAnyValues = true;
            internalValueResult.cpuArchitecture = this._cpuArchitecture;
        }
        if (this._operatingSystemFamily !== undefined) {
            hasAnyValues = true;
            internalValueResult.operatingSystemFamily = this._operatingSystemFamily;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._cpuArchitecture = undefined;
            this._operatingSystemFamily = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._cpuArchitecture = value.cpuArchitecture;
            this._operatingSystemFamily = value.operatingSystemFamily;
        }
    }
    // cpu_architecture - computed: false, optional: true, required: false
    _cpuArchitecture;
    get cpuArchitecture() {
        return this.getStringAttribute('cpu_architecture');
    }
    set cpuArchitecture(value) {
        this._cpuArchitecture = value;
    }
    resetCpuArchitecture() {
        this._cpuArchitecture = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cpuArchitectureInput() {
        return this._cpuArchitecture;
    }
    // operating_system_family - computed: false, optional: true, required: false
    _operatingSystemFamily;
    get operatingSystemFamily() {
        return this.getStringAttribute('operating_system_family');
    }
    set operatingSystemFamily(value) {
        this._operatingSystemFamily = value;
    }
    resetOperatingSystemFamily() {
        this._operatingSystemFamily = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get operatingSystemFamilyInput() {
        return this._operatingSystemFamily;
    }
}
export function ecsTaskDefinitionVolumeDockerVolumeConfigurationToTerraform(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 {
        autoprovision: cdktf.booleanToTerraform(struct.autoprovision),
        driver: cdktf.stringToTerraform(struct.driver),
        driver_opts: cdktf.hashMapper(cdktf.stringToTerraform)(struct.driverOpts),
        labels: cdktf.hashMapper(cdktf.stringToTerraform)(struct.labels),
        scope: cdktf.stringToTerraform(struct.scope),
    };
}
export class EcsTaskDefinitionVolumeDockerVolumeConfigurationOutputReference 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._autoprovision !== undefined) {
            hasAnyValues = true;
            internalValueResult.autoprovision = this._autoprovision;
        }
        if (this._driver !== undefined) {
            hasAnyValues = true;
            internalValueResult.driver = this._driver;
        }
        if (this._driverOpts !== undefined) {
            hasAnyValues = true;
            internalValueResult.driverOpts = this._driverOpts;
        }
        if (this._labels !== undefined) {
            hasAnyValues = true;
            internalValueResult.labels = this._labels;
        }
        if (this._scope !== undefined) {
            hasAnyValues = true;
            internalValueResult.scope = this._scope;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._autoprovision = undefined;
            this._driver = undefined;
            this._driverOpts = undefined;
            this._labels = undefined;
            this._scope = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._autoprovision = value.autoprovision;
            this._driver = value.driver;
            this._driverOpts = value.driverOpts;
            this._labels = value.labels;
            this._scope = value.scope;
        }
    }
    // autoprovision - computed: false, optional: true, required: false
    _autoprovision;
    get autoprovision() {
        return this.getBooleanAttribute('autoprovision');
    }
    set autoprovision(value) {
        this._autoprovision = value;
    }
    resetAutoprovision() {
        this._autoprovision = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get autoprovisionInput() {
        return this._autoprovision;
    }
    // driver - computed: false, optional: true, required: false
    _driver;
    get driver() {
        return this.getStringAttribute('driver');
    }
    set driver(value) {
        this._driver = value;
    }
    resetDriver() {
        this._driver = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get driverInput() {
        return this._driver;
    }
    // driver_opts - computed: false, optional: true, required: false
    _driverOpts;
    get driverOpts() {
        return this.getStringMapAttribute('driver_opts');
    }
    set driverOpts(value) {
        this._driverOpts = value;
    }
    resetDriverOpts() {
        this._driverOpts = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get driverOptsInput() {
        return this._driverOpts;
    }
    // labels - computed: false, optional: true, required: false
    _labels;
    get labels() {
        return this.getStringMapAttribute('labels');
    }
    set labels(value) {
        this._labels = value;
    }
    resetLabels() {
        this._labels = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get labelsInput() {
        return this._labels;
    }
    // scope - computed: true, optional: true, required: false
    _scope;
    get scope() {
        return this.getStringAttribute('scope');
    }
    set scope(value) {
        this._scope = value;
    }
    resetScope() {
        this._scope = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get scopeInput() {
        return this._scope;
    }
}
export function ecsTaskDefinitionVolumeEfsVolumeConfigurationAuthorizationConfigToTerraform(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 {
        access_point_id: cdktf.stringToTerraform(struct.accessPointId),
        iam: cdktf.stringToTerraform(struct.iam),
    };
}
export class EcsTaskDefinitionVolumeEfsVolumeConfigurationAuthorizationConfigOutputReference 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._accessPointId !== undefined) {
            hasAnyValues = true;
            internalValueResult.accessPointId = this._accessPointId;
        }
        if (this._iam !== undefined) {
            hasAnyValues = true;
            internalValueResult.iam = this._iam;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._accessPointId = undefined;
            this._iam = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._accessPointId = value.accessPointId;
            this._iam = value.iam;
        }
    }
    // access_point_id - computed: false, optional: true, required: false
    _accessPointId;
    get accessPointId() {
        return this.getStringAttribute('access_point_id');
    }
    set accessPointId(value) {
        this._accessPointId = value;
    }
    resetAccessPointId() {
        this._accessPointId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get accessPointIdInput() {
        return this._accessPointId;
    }
    // iam - computed: false, optional: true, required: false
    _iam;
    get iam() {
        return this.getStringAttribute('iam');
    }
    set iam(value) {
        this._iam = value;
    }
    resetIam() {
        this._iam = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get iamInput() {
        return this._iam;
    }
}
export function ecsTaskDefinitionVolumeEfsVolumeConfigurationToTerraform(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 {
        file_system_id: cdktf.stringToTerraform(struct.fileSystemId),
        root_directory: cdktf.stringToTerraform(struct.rootDirectory),
        transit_encryption: cdktf.stringToTerraform(struct.transitEncryption),
        transit_encryption_port: cdktf.numberToTerraform(struct.transitEncryptionPort),
        authorization_config: ecsTaskDefinitionVolumeEfsVolumeConfigurationAuthorizationConfigToTerraform(struct.authorizationConfig),
    };
}
export class EcsTaskDefinitionVolumeEfsVolumeConfigurationOutputReference 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._fileSystemId !== undefined) {
            hasAnyValues = true;
            internalValueResult.fileSystemId = this._fileSystemId;
        }
        if (this._rootDirectory !== undefined) {
            hasAnyValues = true;
            internalValueResult.rootDirectory = this._rootDirectory;
        }
        if (this._transitEncryption !== undefined) {
            hasAnyValues = true;
            internalValueResult.transitEncryption = this._transitEncryption;
        }
        if (this._transitEncryptionPort !== undefined) {
            hasAnyValues = true;
            internalValueResult.transitEncryptionPort = this._transitEncryptionPort;
        }
        if (this._authorizationConfig?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.authorizationConfig = this._authorizationConfig?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._fileSystemId = undefined;
            this._rootDirectory = undefined;
            this._transitEncryption = undefined;
            this._transitEncryptionPort = undefined;
            this._authorizationConfig.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._fileSystemId = value.fileSystemId;
            this._rootDirectory = value.rootDirectory;
            this._transitEncryption = value.transitEncryption;
            this._transitEncryptionPort = value.transitEncryptionPort;
            this._authorizationConfig.internalValue = value.authorizationConfig;
        }
    }
    // file_system_id - computed: false, optional: false, required: true
    _fileSystemId;
    get fileSystemId() {
        return this.getStringAttribute('file_system_id');
    }
    set fileSystemId(value) {
        this._fileSystemId = value;
    }
    // Temporarily expose input value. Use with caution.
    get fileSystemIdInput() {
        return this._fileSystemId;
    }
    // root_directory - computed: false, optional: true, required: false
    _rootDirectory;
    get rootDirectory() {
        return this.getStringAttribute('root_directory');
    }
    set rootDirectory(value) {
        this._rootDirectory = value;
    }
    resetRootDirectory() {
        this._rootDirectory = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get rootDirectoryInput() {
        return this._rootDirectory;
    }
    // transit_encryption - computed: false, optional: true, required: false
    _transitEncryption;
    get transitEncryption() {
        return this.getStringAttribute('transit_encryption');
    }
    set transitEncryption(value) {
        this._transitEncryption = value;
    }
    resetTransitEncryption() {
        this._transitEncryption = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get transitEncryptionInput() {
        return this._transitEncryption;
    }
    // transit_encryption_port - computed: false, optional: true, required: false
    _transitEncryptionPort;
    get transitEncryptionPort() {
        return this.getNumberAttribute('transit_encryption_port');
    }
    set transitEncryptionPort(value) {
        this._transitEncryptionPort = value;
    }
    resetTransitEncryptionPort() {
        this._transitEncryptionPort = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get transitEncryptionPortInput() {
        return this._transitEncryptionPort;
    }
    // authorization_config - computed: false, optional: true, required: false
    _authorizationConfig = new EcsTaskDefinitionVolumeEfsVolumeConfigurationAuthorizationConfigOutputReference(this, "authorization_config", true);
    get authorizationConfig() {
        return this._authorizationConfig;
    }
    putAuthorizationConfig(value) {
        this._authorizationConfig.internalValue = value;
    }
    resetAuthorizationConfig() {
        this._authorizationConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get authorizationConfigInput() {
        return this._authorizationConfig.internalValue;
    }
}
export function ecsTaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationAuthorizationConfigToTerraform(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 {
        credentials_parameter: cdktf.stringToTerraform(struct.credentialsParameter),
        domain: cdktf.stringToTerraform(struct.domain),
    };
}
export class EcsTaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationAuthorizationConfigOutputReference 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._credentialsParameter !== undefined) {
            hasAnyValues = true;
            internalValueResult.credentialsParameter = this._credentialsParameter;
        }
        if (this._domain !== undefined) {
            hasAnyValues = true;
            internalValueResult.domain = this._domain;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._credentialsParameter = undefined;
            this._domain = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._credentialsParameter = value.credentialsParameter;
            this._domain = value.domain;
        }
    }
    // credentials_parameter - computed: false, optional: false, required: true
    _credentialsParameter;
    get credentialsParameter() {
        return this.getStringAttribute('credentials_parameter');
    }
    set credentialsParameter(value) {
        this._credentialsParameter = value;
    }
    // Temporarily expose input value. Use with caution.
    get credentialsParameterInput() {
        return this._credentialsParameter;
    }
    // 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 ecsTaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationToTerraform(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 {
        file_system_id: cdktf.stringToTerraform(struct.fileSystemId),
        root_directory: cdktf.stringToTerraform(struct.rootDirectory),
        authorization_config: ecsTaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationAuthorizationConfigToTerraform(struct.authorizationConfig),
    };
}
export class EcsTaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationOutputReference 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._fileSystemId !== undefined) {
            hasAnyValues = true;
            internalValueResult.fileSystemId = this._fileSystemId;
        }
        if (this._rootDirectory !== undefined) {
            hasAnyValues = true;
            internalValueResult.rootDirectory = this._rootDirectory;
        }
        if (this._authorizationConfig?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.authorizationConfig = this._authorizationConfig?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._fileSystemId = undefined;
            this._rootDirectory = undefined;
            this._authorizationConfig.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._fileSystemId = value.fileSystemId;
            this._rootDirectory = value.rootDirectory;
            this._authorizationConfig.internalValue = value.authorizationConfig;
        }
    }
    // file_system_id - computed: false, optional: false, required: true
    _fileSystemId;
    get fileSystemId() {
        return this.getStringAttribute('file_system_id');
    }
    set fileSystemId(value) {
        this._fileSystemId = value;
    }
    // Temporarily expose input value. Use with caution.
    get fileSystemIdInput() {
        return this._fileSystemId;
    }
    // root_directory - computed: false, optional: false, required: true
    _rootDirectory;
    get rootDirectory() {
        return this.getStringAttribute('root_directory');
    }
    set rootDirectory(value) {
        this._rootDirectory = value;
    }
    // Temporarily expose input value. Use with caution.
    get rootDirectoryInput() {
        return this._rootDirectory;
    }
    // authorization_config - computed: false, optional: false, required: true
    _authorizationConfig = new EcsTaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationAuthorizationConfigOutputReference(this, "authorization_config", true);
    get authorizationConfig() {
        return this._authorizationConfig;
    }
    putAuthorizationConfig(value) {
        this._authorizationConfig.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get authorizationConfigInput() {
        return this._authorizationConfig.internalValue;
    }
}
export function ecsTaskDefinitionVolumeToTerraform(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_path: cdktf.stringToTerraform(struct.hostPath),
        name: cdktf.stringToTerraform(struct.name),
        docker_volume_configuration: ecsTaskDefinitionVolumeDockerVolumeConfigurationToTerraform(struct.dockerVolumeConfiguration),
        efs_volume_configuration: ecsTaskDefinitionVolumeEfsVolumeConfigurationToTerraform(struct.efsVolumeConfiguration),
        fsx_windows_file_server_volume_configuration: ecsTaskDefinitionVolumeFsxWindowsFileServerVolumeConfigurationToTerraform(struct.fsxWindowsFileServerVolumeConfiguration),
    };
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/ecs_task_definition aws_ecs_task_definition}
*/
export class EcsTaskDefinition extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_ecs_task_definition";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/ecs_task_definition aws_ecs_task_definition} 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 EcsTaskDefinitionConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_ecs_task_definition',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._containerDefinitions = config.containerDefinitions;
        this._cpu = config.cpu;
        this._executionRoleArn = config.executionRoleArn;
        this._family = config.family;
        this._ipcMode = config.ipcMode;
        this._memory = config.memory;
        this._networkMode = config.networkMode;
        this._pidMode = config.pidMode;
        this._requiresCompatibilities = config.requiresCompatibilities;
        this._skipDestroy = config.skipDestroy;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._taskRoleArn = config.taskRoleArn;
        this._ephemeralStorage.internalValue = config.ephemeralStorage;
        this._inferenceAccelerator = config.inferenceAccelerator;
        this._placementConstraints = config.placementConstraints;
        this._proxyConfiguration.internalValue = config.proxyConfiguration;
        this._runtimePlatform.internalValue = config.runtimePlatform;
        this._volume = config.volume;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // container_definitions - computed: false, optional: false, required: true
    _containerDefinitions;
    get containerDefinitions() {
        return this.getStringAttribute('container_definitions');
    }
    set containerDefinitions(value) {
        this._containerDefinitions = value;
    }
    // Temporarily expose input value. Use with caution.
    get containerDefinitionsInput() {
        return this._containerDefinitions;
    }
    // cpu - computed: false, optional: true, required: false
    _cpu;
    get cpu() {
        return this.getStringAttribute('cpu');
    }
    set cpu(value) {
        this._cpu = value;
    }
    resetCpu() {
        this._cpu = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get cpuInput() {
        return this._cpu;
    }
    // execution_role_arn - computed: false, optional: true, required: false
    _executionRoleArn;
    get executionRoleArn() {
        return this.getStringAttribute('execution_role_arn');
    }
    set executionRoleArn(value) {
        this._executionRoleArn = value;
    }
    resetExecutionRoleArn() {
        this._executionRoleArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get executionRoleArnInput() {
        return this._executionRoleArn;
    }
    // family - computed: false, optional: false, required: true
    _family;
    get family() {
        return this.getStringAttribute('family');
    }
    set family(value) {
        this._family = value;
    }
    // Temporarily expose input value. Use with caution.
    get familyInput() {
        return this._family;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // ipc_mode - computed: false, optional: true, required: false
    _ipcMode;
    get ipcMode() {
        return this.getStringAttribute('ipc_mode');
    }
    set ipcMode(value) {
        this._ipcMode = value;
    }
    resetIpcMode() {
        this._ipcMode = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ipcModeInput() {
        return this._ipcMode;
    }
    // memory - computed: false, optional: true, required: false
    _memory;
    get memory() {
        return this.getStringAttribute('memory');
    }
    set memory(value) {
        this._memory = value;
    }
    resetMemory() {
        this._memory = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get memoryInput() {
        return this._memory;
    }
    // network_mode - computed: true, optional: true, required: false
    _networkMode;
    get networkMode() {
        return this.getStringAttribute('network_mode');
    }
    set networkMode(value) {
        this._networkMode = value;
    }
    resetNetworkMode() {
        this._networkMode = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get networkModeInput() {
        return this._networkMode;
    }
    // pid_mode - computed: false, optional: true, required: false
    _pidMode;
    get pidMode() {
        return this.getStringAttribute('pid_mode');
    }
    set pidMode(value) {
        this._pidMode = value;
    }
    resetPidMode() {
        this._pidMode = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get pidModeInput() {
        return this._pidMode;
    }
    // requires_compatibilities - computed: false, optional: true, required: false
    _requiresCompatibilities;
    get requiresCompatibilities() {
        return cdktf.Fn.tolist(this.getListAttribute('requires_compatibilities'));
    }
    set requiresCompatibilities(value) {
        this._requiresCompatibilities = value;
    }
    resetRequiresCompatibilities() {
        this._requiresCompatibilities = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get requiresCompatibilitiesInput() {
        return this._requiresCompatibilities;
    }
    // revision - computed: true, optional: false, required: false
    get revision() {
        return this.getNumberAttribute('revision');
    }
    // skip_destroy - computed: false, optional: true, required: false
    _skipDestroy;
    get skipDestroy() {
        return this.getBooleanAttribute('skip_destroy');
    }
    set skipDestroy(value) {
        this._skipDestroy = value;
    }
    resetSkipDestroy() {
        this._skipDestroy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get skipDestroyInput() {
        return this._skipDestroy;
    }
    // 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;
    }
    // task_role_arn - computed: false, optional: true, required: false
    _taskRoleArn;
    get taskRoleArn() {
        return this.getStringAttribute('task_role_arn');
    }
    set taskRoleArn(value) {
        this._taskRoleArn = value;
    }
    resetTaskRoleArn() {
        this._taskRoleArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get taskRoleArnInput() {
        return this._taskRoleArn;
    }
    // ephemeral_storage - computed: false, optional: true, required: false
    _ephemeralStorage = new EcsTaskDefinitionEphemeralStorageOutputReference(this, "ephemeral_storage", true);
    get ephemeralStorage() {
        return this._ephemeralStorage;
    }
    putEphemeralStorage(value) {
        this._ephemeralStorage.internalValue = value;
    }
    resetEphemeralStorage() {
        this._ephemeralStorage.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get ephemeralStorageInput() {
        return this._ephemeralStorage.internalValue;
    }
    // inference_accelerator - computed: false, optional: true, required: false
    _inferenceAccelerator;
    get inferenceAccelerator() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('inference_accelerator')));
    }
    set inferenceAccelerator(value) {
        this._inferenceAccelerator = value;
    }
    resetInferenceAccelerator() {
        this._inferenceAccelerator = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get inferenceAcceleratorInput() {
        return this._inferenceAccelerator;
    }
    // placement_constraints - computed: false, optional: true, required: false
    _placementConstraints;
    get placementConstraints() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('placement_constraints')));
    }
    set placementConstraints(value) {
        this._placementConstraints = value;
    }
    resetPlacementConstraints() {
        this._placementConstraints = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get placementConstraintsInput() {
        return this._placementConstraints;
    }
    // proxy_configuration - computed: false, optional: true, required: false
    _proxyConfiguration = new EcsTaskDefinitionProxyConfigurationOutputReference(this, "proxy_configuration", true);
    get proxyConfiguration() {
        return this._proxyConfiguration;
    }
    putProxyConfiguration(value) {
        this._proxyConfiguration.internalValue = value;
    }
    resetProxyConfiguration() {
        this._proxyConfiguration.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get proxyConfigurationInput() {
        return this._proxyConfiguration.internalValue;
    }
    // runtime_platform - computed: false, optional: true, required: false
    _runtimePlatform = new EcsTaskDefinitionRuntimePlatformOutputReference(this, "runtime_platform", true);
    get runtimePlatform() {
        return this._runtimePlatform;
    }
    putRuntimePlatform(value) {
        this._runtimePlatform.internalValue = value;
    }
    resetRuntimePlatform() {
        this._runtimePlatform.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get runtimePlatformInput() {
        return this._runtimePlatform.internalValue;
    }
    // volume - computed: false, optional: true, required: false
    _volume;
    get volume() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('volume')));
    }
    set volume(value) {
        this._volume = value;
    }
    resetVolume() {
        this._volume = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get volumeInput() {
        return this._volume;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            container_definitions: cdktf.stringToTerraform(this._containerDefinitions),
            cpu: cdktf.stringToTerraform(this._cpu),
            execution_role_arn: cdktf.stringToTerraform(this._executionRoleArn),
            family: cdktf.stringToTerraform(this._family),
            ipc_mode: cdktf.stringToTerraform(this._ipcMode),
            memory: cdktf.stringToTerraform(this._memory),
            network_mode: cdktf.stringToTerraform(this._networkMode),
            pid_mode: cdktf.stringToTerraform(this._pidMode),
            requires_compatibilities: cdktf.listMapper(cdktf.stringToTerraform)(this._requiresCompatibilities),
            skip_destroy: cdktf.booleanToTerraform(this._skipDestroy),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            task_role_arn: cdktf.stringToTerraform(this._taskRoleArn),
            ephemeral_storage: ecsTaskDefinitionEphemeralStorageToTerraform(this._ephemeralStorage.internalValue),
            inference_accelerator: cdktf.listMapper(ecsTaskDefinitionInferenceAcceleratorToTerraform)(this._inferenceAccelerator),
            placement_constraints: cdktf.listMapper(ecsTaskDefinitionPlacementConstraintsToTerraform)(this._placementConstraints),
            proxy_configuration: ecsTaskDefinitionProxyConfigurationToTerraform(this._proxyConfiguration.internalValue),
            runtime_platform: ecsTaskDefinitionRuntimePlatformToTerraform(this._runtimePlatform.internalValue),
            volume: cdktf.listMapper(ecsTaskDefinitionVolumeToTerraform)(this._volume),
        };
    }
}
//# sourceMappingURL=ecs-task-definition.js.map