// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function dataAwsEc2InstanceTypeFpgasToTerraform(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 {};
}
export function dataAwsEc2InstanceTypeGpusToTerraform(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 {};
}
export function dataAwsEc2InstanceTypeInferenceAcceleratorsToTerraform(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 {};
}
export function dataAwsEc2InstanceTypeInstanceDisksToTerraform(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 {};
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/d/ec2_instance_type aws_ec2_instance_type}
*/
export class DataAwsEc2InstanceType extends cdktf.TerraformDataSource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_ec2_instance_type";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/d/ec2_instance_type aws_ec2_instance_type} Data Source
    *
    * @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 DataAwsEc2InstanceTypeConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_ec2_instance_type',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._defaultCores = config.defaultCores;
        this._defaultThreadsPerCore = config.defaultThreadsPerCore;
        this._hypervisor = config.hypervisor;
        this._instanceType = config.instanceType;
        this._maximumIpv6AddressesPerInterface = config.maximumIpv6AddressesPerInterface;
        this._totalFpgaMemory = config.totalFpgaMemory;
        this._totalGpuMemory = config.totalGpuMemory;
        this._totalInstanceStorage = config.totalInstanceStorage;
        this._fpgas = config.fpgas;
        this._gpus = config.gpus;
        this._inferenceAccelerators = config.inferenceAccelerators;
        this._instanceDisks = config.instanceDisks;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // auto_recovery_supported - computed: true, optional: false, required: false
    get autoRecoverySupported() {
        return this.getBooleanAttribute('auto_recovery_supported');
    }
    // bare_metal - computed: true, optional: false, required: false
    get bareMetal() {
        return this.getBooleanAttribute('bare_metal');
    }
    // burstable_performance_supported - computed: true, optional: false, required: false
    get burstablePerformanceSupported() {
        return this.getBooleanAttribute('burstable_performance_supported');
    }
    // current_generation - computed: true, optional: false, required: false
    get currentGeneration() {
        return this.getBooleanAttribute('current_generation');
    }
    // dedicated_hosts_supported - computed: true, optional: false, required: false
    get dedicatedHostsSupported() {
        return this.getBooleanAttribute('dedicated_hosts_supported');
    }
    // default_cores - computed: true, optional: true, required: false
    _defaultCores;
    get defaultCores() {
        return this.getNumberAttribute('default_cores');
    }
    set defaultCores(value) {
        this._defaultCores = value;
    }
    resetDefaultCores() {
        this._defaultCores = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get defaultCoresInput() {
        return this._defaultCores;
    }
    // default_threads_per_core - computed: true, optional: true, required: false
    _defaultThreadsPerCore;
    get defaultThreadsPerCore() {
        return this.getNumberAttribute('default_threads_per_core');
    }
    set defaultThreadsPerCore(value) {
        this._defaultThreadsPerCore = value;
    }
    resetDefaultThreadsPerCore() {
        this._defaultThreadsPerCore = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get defaultThreadsPerCoreInput() {
        return this._defaultThreadsPerCore;
    }
    // default_vcpus - computed: true, optional: false, required: false
    get defaultVcpus() {
        return this.getNumberAttribute('default_vcpus');
    }
    // ebs_encryption_support - computed: true, optional: false, required: false
    get ebsEncryptionSupport() {
        return this.getStringAttribute('ebs_encryption_support');
    }
    // ebs_nvme_support - computed: true, optional: false, required: false
    get ebsNvmeSupport() {
        return this.getStringAttribute('ebs_nvme_support');
    }
    // ebs_optimized_support - computed: true, optional: false, required: false
    get ebsOptimizedSupport() {
        return this.getStringAttribute('ebs_optimized_support');
    }
    // ebs_performance_baseline_bandwidth - computed: true, optional: false, required: false
    get ebsPerformanceBaselineBandwidth() {
        return this.getNumberAttribute('ebs_performance_baseline_bandwidth');
    }
    // ebs_performance_baseline_iops - computed: true, optional: false, required: false
    get ebsPerformanceBaselineIops() {
        return this.getNumberAttribute('ebs_performance_baseline_iops');
    }
    // ebs_performance_baseline_throughput - computed: true, optional: false, required: false
    get ebsPerformanceBaselineThroughput() {
        return this.getNumberAttribute('ebs_performance_baseline_throughput');
    }
    // ebs_performance_maximum_bandwidth - computed: true, optional: false, required: false
    get ebsPerformanceMaximumBandwidth() {
        return this.getNumberAttribute('ebs_performance_maximum_bandwidth');
    }
    // ebs_performance_maximum_iops - computed: true, optional: false, required: false
    get ebsPerformanceMaximumIops() {
        return this.getNumberAttribute('ebs_performance_maximum_iops');
    }
    // ebs_performance_maximum_throughput - computed: true, optional: false, required: false
    get ebsPerformanceMaximumThroughput() {
        return this.getNumberAttribute('ebs_performance_maximum_throughput');
    }
    // efa_supported - computed: true, optional: false, required: false
    get efaSupported() {
        return this.getBooleanAttribute('efa_supported');
    }
    // ena_support - computed: true, optional: false, required: false
    get enaSupport() {
        return this.getStringAttribute('ena_support');
    }
    // encryption_in_transit_supported - computed: true, optional: false, required: false
    get encryptionInTransitSupported() {
        return this.getBooleanAttribute('encryption_in_transit_supported');
    }
    // free_tier_eligible - computed: true, optional: false, required: false
    get freeTierEligible() {
        return this.getBooleanAttribute('free_tier_eligible');
    }
    // hibernation_supported - computed: true, optional: false, required: false
    get hibernationSupported() {
        return this.getBooleanAttribute('hibernation_supported');
    }
    // hypervisor - computed: true, optional: true, required: false
    _hypervisor;
    get hypervisor() {
        return this.getStringAttribute('hypervisor');
    }
    set hypervisor(value) {
        this._hypervisor = value;
    }
    resetHypervisor() {
        this._hypervisor = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get hypervisorInput() {
        return this._hypervisor;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // instance_storage_supported - computed: true, optional: false, required: false
    get instanceStorageSupported() {
        return this.getBooleanAttribute('instance_storage_supported');
    }
    // instance_type - computed: false, optional: false, required: true
    _instanceType;
    get instanceType() {
        return this.getStringAttribute('instance_type');
    }
    set instanceType(value) {
        this._instanceType = value;
    }
    // Temporarily expose input value. Use with caution.
    get instanceTypeInput() {
        return this._instanceType;
    }
    // ipv6_supported - computed: true, optional: false, required: false
    get ipv6Supported() {
        return this.getBooleanAttribute('ipv6_supported');
    }
    // maximum_ipv4_addresses_per_interface - computed: true, optional: false, required: false
    get maximumIpv4AddressesPerInterface() {
        return this.getNumberAttribute('maximum_ipv4_addresses_per_interface');
    }
    // maximum_ipv6_addresses_per_interface - computed: true, optional: true, required: false
    _maximumIpv6AddressesPerInterface;
    get maximumIpv6AddressesPerInterface() {
        return this.getNumberAttribute('maximum_ipv6_addresses_per_interface');
    }
    set maximumIpv6AddressesPerInterface(value) {
        this._maximumIpv6AddressesPerInterface = value;
    }
    resetMaximumIpv6AddressesPerInterface() {
        this._maximumIpv6AddressesPerInterface = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get maximumIpv6AddressesPerInterfaceInput() {
        return this._maximumIpv6AddressesPerInterface;
    }
    // maximum_network_interfaces - computed: true, optional: false, required: false
    get maximumNetworkInterfaces() {
        return this.getNumberAttribute('maximum_network_interfaces');
    }
    // memory_size - computed: true, optional: false, required: false
    get memorySize() {
        return this.getNumberAttribute('memory_size');
    }
    // network_performance - computed: true, optional: false, required: false
    get networkPerformance() {
        return this.getStringAttribute('network_performance');
    }
    // supported_architectures - computed: true, optional: false, required: false
    get supportedArchitectures() {
        return this.getListAttribute('supported_architectures');
    }
    // supported_placement_strategies - computed: true, optional: false, required: false
    get supportedPlacementStrategies() {
        return this.getListAttribute('supported_placement_strategies');
    }
    // supported_root_device_types - computed: true, optional: false, required: false
    get supportedRootDeviceTypes() {
        return this.getListAttribute('supported_root_device_types');
    }
    // supported_usages_classes - computed: true, optional: false, required: false
    get supportedUsagesClasses() {
        return this.getListAttribute('supported_usages_classes');
    }
    // supported_virtualization_types - computed: true, optional: false, required: false
    get supportedVirtualizationTypes() {
        return this.getListAttribute('supported_virtualization_types');
    }
    // sustained_clock_speed - computed: true, optional: false, required: false
    get sustainedClockSpeed() {
        return this.getNumberAttribute('sustained_clock_speed');
    }
    // total_fpga_memory - computed: true, optional: true, required: false
    _totalFpgaMemory;
    get totalFpgaMemory() {
        return this.getNumberAttribute('total_fpga_memory');
    }
    set totalFpgaMemory(value) {
        this._totalFpgaMemory = value;
    }
    resetTotalFpgaMemory() {
        this._totalFpgaMemory = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get totalFpgaMemoryInput() {
        return this._totalFpgaMemory;
    }
    // total_gpu_memory - computed: true, optional: true, required: false
    _totalGpuMemory;
    get totalGpuMemory() {
        return this.getNumberAttribute('total_gpu_memory');
    }
    set totalGpuMemory(value) {
        this._totalGpuMemory = value;
    }
    resetTotalGpuMemory() {
        this._totalGpuMemory = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get totalGpuMemoryInput() {
        return this._totalGpuMemory;
    }
    // total_instance_storage - computed: true, optional: true, required: false
    _totalInstanceStorage;
    get totalInstanceStorage() {
        return this.getNumberAttribute('total_instance_storage');
    }
    set totalInstanceStorage(value) {
        this._totalInstanceStorage = value;
    }
    resetTotalInstanceStorage() {
        this._totalInstanceStorage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get totalInstanceStorageInput() {
        return this._totalInstanceStorage;
    }
    // valid_cores - computed: true, optional: false, required: false
    get validCores() {
        return this.getNumberListAttribute('valid_cores');
    }
    // valid_threads_per_core - computed: true, optional: false, required: false
    get validThreadsPerCore() {
        return this.getNumberListAttribute('valid_threads_per_core');
    }
    // fpgas - computed: false, optional: true, required: false
    _fpgas;
    get fpgas() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('fpgas')));
    }
    set fpgas(value) {
        this._fpgas = value;
    }
    resetFpgas() {
        this._fpgas = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get fpgasInput() {
        return this._fpgas;
    }
    // gpus - computed: false, optional: true, required: false
    _gpus;
    get gpus() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('gpus')));
    }
    set gpus(value) {
        this._gpus = value;
    }
    resetGpus() {
        this._gpus = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get gpusInput() {
        return this._gpus;
    }
    // inference_accelerators - computed: false, optional: true, required: false
    _inferenceAccelerators;
    get inferenceAccelerators() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('inference_accelerators')));
    }
    set inferenceAccelerators(value) {
        this._inferenceAccelerators = value;
    }
    resetInferenceAccelerators() {
        this._inferenceAccelerators = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get inferenceAcceleratorsInput() {
        return this._inferenceAccelerators;
    }
    // instance_disks - computed: false, optional: true, required: false
    _instanceDisks;
    get instanceDisks() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('instance_disks')));
    }
    set instanceDisks(value) {
        this._instanceDisks = value;
    }
    resetInstanceDisks() {
        this._instanceDisks = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get instanceDisksInput() {
        return this._instanceDisks;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            default_cores: cdktf.numberToTerraform(this._defaultCores),
            default_threads_per_core: cdktf.numberToTerraform(this._defaultThreadsPerCore),
            hypervisor: cdktf.stringToTerraform(this._hypervisor),
            instance_type: cdktf.stringToTerraform(this._instanceType),
            maximum_ipv6_addresses_per_interface: cdktf.numberToTerraform(this._maximumIpv6AddressesPerInterface),
            total_fpga_memory: cdktf.numberToTerraform(this._totalFpgaMemory),
            total_gpu_memory: cdktf.numberToTerraform(this._totalGpuMemory),
            total_instance_storage: cdktf.numberToTerraform(this._totalInstanceStorage),
            fpgas: cdktf.listMapper(dataAwsEc2InstanceTypeFpgasToTerraform)(this._fpgas),
            gpus: cdktf.listMapper(dataAwsEc2InstanceTypeGpusToTerraform)(this._gpus),
            inference_accelerators: cdktf.listMapper(dataAwsEc2InstanceTypeInferenceAcceleratorsToTerraform)(this._inferenceAccelerators),
            instance_disks: cdktf.listMapper(dataAwsEc2InstanceTypeInstanceDisksToTerraform)(this._instanceDisks),
        };
    }
}
//# sourceMappingURL=data-aws-ec2-instance-type.js.map