{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.EC2.Types.InstanceTypeInfo
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.EC2.Types.InstanceTypeInfo where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Internal
import Amazonka.EC2.Types.BootModeType
import Amazonka.EC2.Types.EbsInfo
import Amazonka.EC2.Types.FpgaInfo
import Amazonka.EC2.Types.GpuInfo
import Amazonka.EC2.Types.InferenceAcceleratorInfo
import Amazonka.EC2.Types.InstanceStorageInfo
import Amazonka.EC2.Types.InstanceType
import Amazonka.EC2.Types.InstanceTypeHypervisor
import Amazonka.EC2.Types.MemoryInfo
import Amazonka.EC2.Types.NetworkInfo
import Amazonka.EC2.Types.PlacementGroupInfo
import Amazonka.EC2.Types.ProcessorInfo
import Amazonka.EC2.Types.RootDeviceType
import Amazonka.EC2.Types.UsageClassType
import Amazonka.EC2.Types.VCpuInfo
import Amazonka.EC2.Types.VirtualizationType
import qualified Amazonka.Prelude as Prelude

-- | Describes the instance type.
--
-- /See:/ 'newInstanceTypeInfo' smart constructor.
data InstanceTypeInfo = InstanceTypeInfo'
  { -- | Indicates whether auto recovery is supported.
    InstanceTypeInfo -> Maybe Bool
autoRecoverySupported :: Prelude.Maybe Prelude.Bool,
    -- | Indicates whether the instance is a bare metal instance type.
    InstanceTypeInfo -> Maybe Bool
bareMetal :: Prelude.Maybe Prelude.Bool,
    -- | Indicates whether the instance type is a burstable performance instance
    -- type.
    InstanceTypeInfo -> Maybe Bool
burstablePerformanceSupported :: Prelude.Maybe Prelude.Bool,
    -- | Indicates whether the instance type is current generation.
    InstanceTypeInfo -> Maybe Bool
currentGeneration :: Prelude.Maybe Prelude.Bool,
    -- | Indicates whether Dedicated Hosts are supported on the instance type.
    InstanceTypeInfo -> Maybe Bool
dedicatedHostsSupported :: Prelude.Maybe Prelude.Bool,
    -- | Describes the Amazon EBS settings for the instance type.
    InstanceTypeInfo -> Maybe EbsInfo
ebsInfo :: Prelude.Maybe EbsInfo,
    -- | Describes the FPGA accelerator settings for the instance type.
    InstanceTypeInfo -> Maybe FpgaInfo
fpgaInfo :: Prelude.Maybe FpgaInfo,
    -- | Indicates whether the instance type is eligible for the free tier.
    InstanceTypeInfo -> Maybe Bool
freeTierEligible :: Prelude.Maybe Prelude.Bool,
    -- | Describes the GPU accelerator settings for the instance type.
    InstanceTypeInfo -> Maybe GpuInfo
gpuInfo :: Prelude.Maybe GpuInfo,
    -- | Indicates whether On-Demand hibernation is supported.
    InstanceTypeInfo -> Maybe Bool
hibernationSupported :: Prelude.Maybe Prelude.Bool,
    -- | The hypervisor for the instance type.
    InstanceTypeInfo -> Maybe InstanceTypeHypervisor
hypervisor :: Prelude.Maybe InstanceTypeHypervisor,
    -- | Describes the Inference accelerator settings for the instance type.
    InstanceTypeInfo -> Maybe InferenceAcceleratorInfo
inferenceAcceleratorInfo :: Prelude.Maybe InferenceAcceleratorInfo,
    -- | Describes the instance storage for the instance type.
    InstanceTypeInfo -> Maybe InstanceStorageInfo
instanceStorageInfo :: Prelude.Maybe InstanceStorageInfo,
    -- | Indicates whether instance storage is supported.
    InstanceTypeInfo -> Maybe Bool
instanceStorageSupported :: Prelude.Maybe Prelude.Bool,
    -- | The instance type. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
    -- in the /Amazon EC2 User Guide/.
    InstanceTypeInfo -> Maybe InstanceType
instanceType :: Prelude.Maybe InstanceType,
    -- | Describes the memory for the instance type.
    InstanceTypeInfo -> Maybe MemoryInfo
memoryInfo :: Prelude.Maybe MemoryInfo,
    -- | Describes the network settings for the instance type.
    InstanceTypeInfo -> Maybe NetworkInfo
networkInfo :: Prelude.Maybe NetworkInfo,
    -- | Describes the placement group settings for the instance type.
    InstanceTypeInfo -> Maybe PlacementGroupInfo
placementGroupInfo :: Prelude.Maybe PlacementGroupInfo,
    -- | Describes the processor.
    InstanceTypeInfo -> Maybe ProcessorInfo
processorInfo :: Prelude.Maybe ProcessorInfo,
    -- | The supported boot modes. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
    -- in the /Amazon EC2 User Guide/.
    InstanceTypeInfo -> Maybe [BootModeType]
supportedBootModes :: Prelude.Maybe [BootModeType],
    -- | The supported root device types.
    InstanceTypeInfo -> Maybe [RootDeviceType]
supportedRootDeviceTypes :: Prelude.Maybe [RootDeviceType],
    -- | Indicates whether the instance type is offered for spot or On-Demand.
    InstanceTypeInfo -> Maybe [UsageClassType]
supportedUsageClasses :: Prelude.Maybe [UsageClassType],
    -- | The supported virtualization types.
    InstanceTypeInfo -> Maybe [VirtualizationType]
supportedVirtualizationTypes :: Prelude.Maybe [VirtualizationType],
    -- | Describes the vCPU configurations for the instance type.
    InstanceTypeInfo -> Maybe VCpuInfo
vCpuInfo :: Prelude.Maybe VCpuInfo
  }
  deriving (InstanceTypeInfo -> InstanceTypeInfo -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InstanceTypeInfo -> InstanceTypeInfo -> Bool
$c/= :: InstanceTypeInfo -> InstanceTypeInfo -> Bool
== :: InstanceTypeInfo -> InstanceTypeInfo -> Bool
$c== :: InstanceTypeInfo -> InstanceTypeInfo -> Bool
Prelude.Eq, ReadPrec [InstanceTypeInfo]
ReadPrec InstanceTypeInfo
Int -> ReadS InstanceTypeInfo
ReadS [InstanceTypeInfo]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [InstanceTypeInfo]
$creadListPrec :: ReadPrec [InstanceTypeInfo]
readPrec :: ReadPrec InstanceTypeInfo
$creadPrec :: ReadPrec InstanceTypeInfo
readList :: ReadS [InstanceTypeInfo]
$creadList :: ReadS [InstanceTypeInfo]
readsPrec :: Int -> ReadS InstanceTypeInfo
$creadsPrec :: Int -> ReadS InstanceTypeInfo
Prelude.Read, Int -> InstanceTypeInfo -> ShowS
[InstanceTypeInfo] -> ShowS
InstanceTypeInfo -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [InstanceTypeInfo] -> ShowS
$cshowList :: [InstanceTypeInfo] -> ShowS
show :: InstanceTypeInfo -> String
$cshow :: InstanceTypeInfo -> String
showsPrec :: Int -> InstanceTypeInfo -> ShowS
$cshowsPrec :: Int -> InstanceTypeInfo -> ShowS
Prelude.Show, forall x. Rep InstanceTypeInfo x -> InstanceTypeInfo
forall x. InstanceTypeInfo -> Rep InstanceTypeInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep InstanceTypeInfo x -> InstanceTypeInfo
$cfrom :: forall x. InstanceTypeInfo -> Rep InstanceTypeInfo x
Prelude.Generic)

-- |
-- Create a value of 'InstanceTypeInfo' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'autoRecoverySupported', 'instanceTypeInfo_autoRecoverySupported' - Indicates whether auto recovery is supported.
--
-- 'bareMetal', 'instanceTypeInfo_bareMetal' - Indicates whether the instance is a bare metal instance type.
--
-- 'burstablePerformanceSupported', 'instanceTypeInfo_burstablePerformanceSupported' - Indicates whether the instance type is a burstable performance instance
-- type.
--
-- 'currentGeneration', 'instanceTypeInfo_currentGeneration' - Indicates whether the instance type is current generation.
--
-- 'dedicatedHostsSupported', 'instanceTypeInfo_dedicatedHostsSupported' - Indicates whether Dedicated Hosts are supported on the instance type.
--
-- 'ebsInfo', 'instanceTypeInfo_ebsInfo' - Describes the Amazon EBS settings for the instance type.
--
-- 'fpgaInfo', 'instanceTypeInfo_fpgaInfo' - Describes the FPGA accelerator settings for the instance type.
--
-- 'freeTierEligible', 'instanceTypeInfo_freeTierEligible' - Indicates whether the instance type is eligible for the free tier.
--
-- 'gpuInfo', 'instanceTypeInfo_gpuInfo' - Describes the GPU accelerator settings for the instance type.
--
-- 'hibernationSupported', 'instanceTypeInfo_hibernationSupported' - Indicates whether On-Demand hibernation is supported.
--
-- 'hypervisor', 'instanceTypeInfo_hypervisor' - The hypervisor for the instance type.
--
-- 'inferenceAcceleratorInfo', 'instanceTypeInfo_inferenceAcceleratorInfo' - Describes the Inference accelerator settings for the instance type.
--
-- 'instanceStorageInfo', 'instanceTypeInfo_instanceStorageInfo' - Describes the instance storage for the instance type.
--
-- 'instanceStorageSupported', 'instanceTypeInfo_instanceStorageSupported' - Indicates whether instance storage is supported.
--
-- 'instanceType', 'instanceTypeInfo_instanceType' - The instance type. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
-- in the /Amazon EC2 User Guide/.
--
-- 'memoryInfo', 'instanceTypeInfo_memoryInfo' - Describes the memory for the instance type.
--
-- 'networkInfo', 'instanceTypeInfo_networkInfo' - Describes the network settings for the instance type.
--
-- 'placementGroupInfo', 'instanceTypeInfo_placementGroupInfo' - Describes the placement group settings for the instance type.
--
-- 'processorInfo', 'instanceTypeInfo_processorInfo' - Describes the processor.
--
-- 'supportedBootModes', 'instanceTypeInfo_supportedBootModes' - The supported boot modes. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
-- in the /Amazon EC2 User Guide/.
--
-- 'supportedRootDeviceTypes', 'instanceTypeInfo_supportedRootDeviceTypes' - The supported root device types.
--
-- 'supportedUsageClasses', 'instanceTypeInfo_supportedUsageClasses' - Indicates whether the instance type is offered for spot or On-Demand.
--
-- 'supportedVirtualizationTypes', 'instanceTypeInfo_supportedVirtualizationTypes' - The supported virtualization types.
--
-- 'vCpuInfo', 'instanceTypeInfo_vCpuInfo' - Describes the vCPU configurations for the instance type.
newInstanceTypeInfo ::
  InstanceTypeInfo
newInstanceTypeInfo :: InstanceTypeInfo
newInstanceTypeInfo =
  InstanceTypeInfo'
    { $sel:autoRecoverySupported:InstanceTypeInfo' :: Maybe Bool
autoRecoverySupported =
        forall a. Maybe a
Prelude.Nothing,
      $sel:bareMetal:InstanceTypeInfo' :: Maybe Bool
bareMetal = forall a. Maybe a
Prelude.Nothing,
      $sel:burstablePerformanceSupported:InstanceTypeInfo' :: Maybe Bool
burstablePerformanceSupported = forall a. Maybe a
Prelude.Nothing,
      $sel:currentGeneration:InstanceTypeInfo' :: Maybe Bool
currentGeneration = forall a. Maybe a
Prelude.Nothing,
      $sel:dedicatedHostsSupported:InstanceTypeInfo' :: Maybe Bool
dedicatedHostsSupported = forall a. Maybe a
Prelude.Nothing,
      $sel:ebsInfo:InstanceTypeInfo' :: Maybe EbsInfo
ebsInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:fpgaInfo:InstanceTypeInfo' :: Maybe FpgaInfo
fpgaInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:freeTierEligible:InstanceTypeInfo' :: Maybe Bool
freeTierEligible = forall a. Maybe a
Prelude.Nothing,
      $sel:gpuInfo:InstanceTypeInfo' :: Maybe GpuInfo
gpuInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:hibernationSupported:InstanceTypeInfo' :: Maybe Bool
hibernationSupported = forall a. Maybe a
Prelude.Nothing,
      $sel:hypervisor:InstanceTypeInfo' :: Maybe InstanceTypeHypervisor
hypervisor = forall a. Maybe a
Prelude.Nothing,
      $sel:inferenceAcceleratorInfo:InstanceTypeInfo' :: Maybe InferenceAcceleratorInfo
inferenceAcceleratorInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceStorageInfo:InstanceTypeInfo' :: Maybe InstanceStorageInfo
instanceStorageInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceStorageSupported:InstanceTypeInfo' :: Maybe Bool
instanceStorageSupported = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceType:InstanceTypeInfo' :: Maybe InstanceType
instanceType = forall a. Maybe a
Prelude.Nothing,
      $sel:memoryInfo:InstanceTypeInfo' :: Maybe MemoryInfo
memoryInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:networkInfo:InstanceTypeInfo' :: Maybe NetworkInfo
networkInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:placementGroupInfo:InstanceTypeInfo' :: Maybe PlacementGroupInfo
placementGroupInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:processorInfo:InstanceTypeInfo' :: Maybe ProcessorInfo
processorInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:supportedBootModes:InstanceTypeInfo' :: Maybe [BootModeType]
supportedBootModes = forall a. Maybe a
Prelude.Nothing,
      $sel:supportedRootDeviceTypes:InstanceTypeInfo' :: Maybe [RootDeviceType]
supportedRootDeviceTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:supportedUsageClasses:InstanceTypeInfo' :: Maybe [UsageClassType]
supportedUsageClasses = forall a. Maybe a
Prelude.Nothing,
      $sel:supportedVirtualizationTypes:InstanceTypeInfo' :: Maybe [VirtualizationType]
supportedVirtualizationTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:vCpuInfo:InstanceTypeInfo' :: Maybe VCpuInfo
vCpuInfo = forall a. Maybe a
Prelude.Nothing
    }

-- | Indicates whether auto recovery is supported.
instanceTypeInfo_autoRecoverySupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
instanceTypeInfo_autoRecoverySupported :: Lens' InstanceTypeInfo (Maybe Bool)
instanceTypeInfo_autoRecoverySupported = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe Bool
autoRecoverySupported :: Maybe Bool
$sel:autoRecoverySupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
autoRecoverySupported} -> Maybe Bool
autoRecoverySupported) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe Bool
a -> InstanceTypeInfo
s {$sel:autoRecoverySupported:InstanceTypeInfo' :: Maybe Bool
autoRecoverySupported = Maybe Bool
a} :: InstanceTypeInfo)

-- | Indicates whether the instance is a bare metal instance type.
instanceTypeInfo_bareMetal :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
instanceTypeInfo_bareMetal :: Lens' InstanceTypeInfo (Maybe Bool)
instanceTypeInfo_bareMetal = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe Bool
bareMetal :: Maybe Bool
$sel:bareMetal:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
bareMetal} -> Maybe Bool
bareMetal) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe Bool
a -> InstanceTypeInfo
s {$sel:bareMetal:InstanceTypeInfo' :: Maybe Bool
bareMetal = Maybe Bool
a} :: InstanceTypeInfo)

-- | Indicates whether the instance type is a burstable performance instance
-- type.
instanceTypeInfo_burstablePerformanceSupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
instanceTypeInfo_burstablePerformanceSupported :: Lens' InstanceTypeInfo (Maybe Bool)
instanceTypeInfo_burstablePerformanceSupported = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe Bool
burstablePerformanceSupported :: Maybe Bool
$sel:burstablePerformanceSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
burstablePerformanceSupported} -> Maybe Bool
burstablePerformanceSupported) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe Bool
a -> InstanceTypeInfo
s {$sel:burstablePerformanceSupported:InstanceTypeInfo' :: Maybe Bool
burstablePerformanceSupported = Maybe Bool
a} :: InstanceTypeInfo)

-- | Indicates whether the instance type is current generation.
instanceTypeInfo_currentGeneration :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
instanceTypeInfo_currentGeneration :: Lens' InstanceTypeInfo (Maybe Bool)
instanceTypeInfo_currentGeneration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe Bool
currentGeneration :: Maybe Bool
$sel:currentGeneration:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
currentGeneration} -> Maybe Bool
currentGeneration) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe Bool
a -> InstanceTypeInfo
s {$sel:currentGeneration:InstanceTypeInfo' :: Maybe Bool
currentGeneration = Maybe Bool
a} :: InstanceTypeInfo)

-- | Indicates whether Dedicated Hosts are supported on the instance type.
instanceTypeInfo_dedicatedHostsSupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
instanceTypeInfo_dedicatedHostsSupported :: Lens' InstanceTypeInfo (Maybe Bool)
instanceTypeInfo_dedicatedHostsSupported = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe Bool
dedicatedHostsSupported :: Maybe Bool
$sel:dedicatedHostsSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
dedicatedHostsSupported} -> Maybe Bool
dedicatedHostsSupported) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe Bool
a -> InstanceTypeInfo
s {$sel:dedicatedHostsSupported:InstanceTypeInfo' :: Maybe Bool
dedicatedHostsSupported = Maybe Bool
a} :: InstanceTypeInfo)

-- | Describes the Amazon EBS settings for the instance type.
instanceTypeInfo_ebsInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe EbsInfo)
instanceTypeInfo_ebsInfo :: Lens' InstanceTypeInfo (Maybe EbsInfo)
instanceTypeInfo_ebsInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe EbsInfo
ebsInfo :: Maybe EbsInfo
$sel:ebsInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe EbsInfo
ebsInfo} -> Maybe EbsInfo
ebsInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe EbsInfo
a -> InstanceTypeInfo
s {$sel:ebsInfo:InstanceTypeInfo' :: Maybe EbsInfo
ebsInfo = Maybe EbsInfo
a} :: InstanceTypeInfo)

-- | Describes the FPGA accelerator settings for the instance type.
instanceTypeInfo_fpgaInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe FpgaInfo)
instanceTypeInfo_fpgaInfo :: Lens' InstanceTypeInfo (Maybe FpgaInfo)
instanceTypeInfo_fpgaInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe FpgaInfo
fpgaInfo :: Maybe FpgaInfo
$sel:fpgaInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe FpgaInfo
fpgaInfo} -> Maybe FpgaInfo
fpgaInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe FpgaInfo
a -> InstanceTypeInfo
s {$sel:fpgaInfo:InstanceTypeInfo' :: Maybe FpgaInfo
fpgaInfo = Maybe FpgaInfo
a} :: InstanceTypeInfo)

-- | Indicates whether the instance type is eligible for the free tier.
instanceTypeInfo_freeTierEligible :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
instanceTypeInfo_freeTierEligible :: Lens' InstanceTypeInfo (Maybe Bool)
instanceTypeInfo_freeTierEligible = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe Bool
freeTierEligible :: Maybe Bool
$sel:freeTierEligible:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
freeTierEligible} -> Maybe Bool
freeTierEligible) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe Bool
a -> InstanceTypeInfo
s {$sel:freeTierEligible:InstanceTypeInfo' :: Maybe Bool
freeTierEligible = Maybe Bool
a} :: InstanceTypeInfo)

-- | Describes the GPU accelerator settings for the instance type.
instanceTypeInfo_gpuInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe GpuInfo)
instanceTypeInfo_gpuInfo :: Lens' InstanceTypeInfo (Maybe GpuInfo)
instanceTypeInfo_gpuInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe GpuInfo
gpuInfo :: Maybe GpuInfo
$sel:gpuInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe GpuInfo
gpuInfo} -> Maybe GpuInfo
gpuInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe GpuInfo
a -> InstanceTypeInfo
s {$sel:gpuInfo:InstanceTypeInfo' :: Maybe GpuInfo
gpuInfo = Maybe GpuInfo
a} :: InstanceTypeInfo)

-- | Indicates whether On-Demand hibernation is supported.
instanceTypeInfo_hibernationSupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
instanceTypeInfo_hibernationSupported :: Lens' InstanceTypeInfo (Maybe Bool)
instanceTypeInfo_hibernationSupported = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe Bool
hibernationSupported :: Maybe Bool
$sel:hibernationSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
hibernationSupported} -> Maybe Bool
hibernationSupported) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe Bool
a -> InstanceTypeInfo
s {$sel:hibernationSupported:InstanceTypeInfo' :: Maybe Bool
hibernationSupported = Maybe Bool
a} :: InstanceTypeInfo)

-- | The hypervisor for the instance type.
instanceTypeInfo_hypervisor :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe InstanceTypeHypervisor)
instanceTypeInfo_hypervisor :: Lens' InstanceTypeInfo (Maybe InstanceTypeHypervisor)
instanceTypeInfo_hypervisor = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe InstanceTypeHypervisor
hypervisor :: Maybe InstanceTypeHypervisor
$sel:hypervisor:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InstanceTypeHypervisor
hypervisor} -> Maybe InstanceTypeHypervisor
hypervisor) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe InstanceTypeHypervisor
a -> InstanceTypeInfo
s {$sel:hypervisor:InstanceTypeInfo' :: Maybe InstanceTypeHypervisor
hypervisor = Maybe InstanceTypeHypervisor
a} :: InstanceTypeInfo)

-- | Describes the Inference accelerator settings for the instance type.
instanceTypeInfo_inferenceAcceleratorInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe InferenceAcceleratorInfo)
instanceTypeInfo_inferenceAcceleratorInfo :: Lens' InstanceTypeInfo (Maybe InferenceAcceleratorInfo)
instanceTypeInfo_inferenceAcceleratorInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe InferenceAcceleratorInfo
inferenceAcceleratorInfo :: Maybe InferenceAcceleratorInfo
$sel:inferenceAcceleratorInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InferenceAcceleratorInfo
inferenceAcceleratorInfo} -> Maybe InferenceAcceleratorInfo
inferenceAcceleratorInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe InferenceAcceleratorInfo
a -> InstanceTypeInfo
s {$sel:inferenceAcceleratorInfo:InstanceTypeInfo' :: Maybe InferenceAcceleratorInfo
inferenceAcceleratorInfo = Maybe InferenceAcceleratorInfo
a} :: InstanceTypeInfo)

-- | Describes the instance storage for the instance type.
instanceTypeInfo_instanceStorageInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe InstanceStorageInfo)
instanceTypeInfo_instanceStorageInfo :: Lens' InstanceTypeInfo (Maybe InstanceStorageInfo)
instanceTypeInfo_instanceStorageInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe InstanceStorageInfo
instanceStorageInfo :: Maybe InstanceStorageInfo
$sel:instanceStorageInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InstanceStorageInfo
instanceStorageInfo} -> Maybe InstanceStorageInfo
instanceStorageInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe InstanceStorageInfo
a -> InstanceTypeInfo
s {$sel:instanceStorageInfo:InstanceTypeInfo' :: Maybe InstanceStorageInfo
instanceStorageInfo = Maybe InstanceStorageInfo
a} :: InstanceTypeInfo)

-- | Indicates whether instance storage is supported.
instanceTypeInfo_instanceStorageSupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
instanceTypeInfo_instanceStorageSupported :: Lens' InstanceTypeInfo (Maybe Bool)
instanceTypeInfo_instanceStorageSupported = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe Bool
instanceStorageSupported :: Maybe Bool
$sel:instanceStorageSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
instanceStorageSupported} -> Maybe Bool
instanceStorageSupported) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe Bool
a -> InstanceTypeInfo
s {$sel:instanceStorageSupported:InstanceTypeInfo' :: Maybe Bool
instanceStorageSupported = Maybe Bool
a} :: InstanceTypeInfo)

-- | The instance type. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
-- in the /Amazon EC2 User Guide/.
instanceTypeInfo_instanceType :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe InstanceType)
instanceTypeInfo_instanceType :: Lens' InstanceTypeInfo (Maybe InstanceType)
instanceTypeInfo_instanceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe InstanceType
instanceType :: Maybe InstanceType
$sel:instanceType:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InstanceType
instanceType} -> Maybe InstanceType
instanceType) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe InstanceType
a -> InstanceTypeInfo
s {$sel:instanceType:InstanceTypeInfo' :: Maybe InstanceType
instanceType = Maybe InstanceType
a} :: InstanceTypeInfo)

-- | Describes the memory for the instance type.
instanceTypeInfo_memoryInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe MemoryInfo)
instanceTypeInfo_memoryInfo :: Lens' InstanceTypeInfo (Maybe MemoryInfo)
instanceTypeInfo_memoryInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe MemoryInfo
memoryInfo :: Maybe MemoryInfo
$sel:memoryInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe MemoryInfo
memoryInfo} -> Maybe MemoryInfo
memoryInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe MemoryInfo
a -> InstanceTypeInfo
s {$sel:memoryInfo:InstanceTypeInfo' :: Maybe MemoryInfo
memoryInfo = Maybe MemoryInfo
a} :: InstanceTypeInfo)

-- | Describes the network settings for the instance type.
instanceTypeInfo_networkInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe NetworkInfo)
instanceTypeInfo_networkInfo :: Lens' InstanceTypeInfo (Maybe NetworkInfo)
instanceTypeInfo_networkInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe NetworkInfo
networkInfo :: Maybe NetworkInfo
$sel:networkInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe NetworkInfo
networkInfo} -> Maybe NetworkInfo
networkInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe NetworkInfo
a -> InstanceTypeInfo
s {$sel:networkInfo:InstanceTypeInfo' :: Maybe NetworkInfo
networkInfo = Maybe NetworkInfo
a} :: InstanceTypeInfo)

-- | Describes the placement group settings for the instance type.
instanceTypeInfo_placementGroupInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe PlacementGroupInfo)
instanceTypeInfo_placementGroupInfo :: Lens' InstanceTypeInfo (Maybe PlacementGroupInfo)
instanceTypeInfo_placementGroupInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe PlacementGroupInfo
placementGroupInfo :: Maybe PlacementGroupInfo
$sel:placementGroupInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe PlacementGroupInfo
placementGroupInfo} -> Maybe PlacementGroupInfo
placementGroupInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe PlacementGroupInfo
a -> InstanceTypeInfo
s {$sel:placementGroupInfo:InstanceTypeInfo' :: Maybe PlacementGroupInfo
placementGroupInfo = Maybe PlacementGroupInfo
a} :: InstanceTypeInfo)

-- | Describes the processor.
instanceTypeInfo_processorInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe ProcessorInfo)
instanceTypeInfo_processorInfo :: Lens' InstanceTypeInfo (Maybe ProcessorInfo)
instanceTypeInfo_processorInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe ProcessorInfo
processorInfo :: Maybe ProcessorInfo
$sel:processorInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe ProcessorInfo
processorInfo} -> Maybe ProcessorInfo
processorInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe ProcessorInfo
a -> InstanceTypeInfo
s {$sel:processorInfo:InstanceTypeInfo' :: Maybe ProcessorInfo
processorInfo = Maybe ProcessorInfo
a} :: InstanceTypeInfo)

-- | The supported boot modes. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
-- in the /Amazon EC2 User Guide/.
instanceTypeInfo_supportedBootModes :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe [BootModeType])
instanceTypeInfo_supportedBootModes :: Lens' InstanceTypeInfo (Maybe [BootModeType])
instanceTypeInfo_supportedBootModes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe [BootModeType]
supportedBootModes :: Maybe [BootModeType]
$sel:supportedBootModes:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [BootModeType]
supportedBootModes} -> Maybe [BootModeType]
supportedBootModes) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe [BootModeType]
a -> InstanceTypeInfo
s {$sel:supportedBootModes:InstanceTypeInfo' :: Maybe [BootModeType]
supportedBootModes = Maybe [BootModeType]
a} :: InstanceTypeInfo) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The supported root device types.
instanceTypeInfo_supportedRootDeviceTypes :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe [RootDeviceType])
instanceTypeInfo_supportedRootDeviceTypes :: Lens' InstanceTypeInfo (Maybe [RootDeviceType])
instanceTypeInfo_supportedRootDeviceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe [RootDeviceType]
supportedRootDeviceTypes :: Maybe [RootDeviceType]
$sel:supportedRootDeviceTypes:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [RootDeviceType]
supportedRootDeviceTypes} -> Maybe [RootDeviceType]
supportedRootDeviceTypes) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe [RootDeviceType]
a -> InstanceTypeInfo
s {$sel:supportedRootDeviceTypes:InstanceTypeInfo' :: Maybe [RootDeviceType]
supportedRootDeviceTypes = Maybe [RootDeviceType]
a} :: InstanceTypeInfo) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Indicates whether the instance type is offered for spot or On-Demand.
instanceTypeInfo_supportedUsageClasses :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe [UsageClassType])
instanceTypeInfo_supportedUsageClasses :: Lens' InstanceTypeInfo (Maybe [UsageClassType])
instanceTypeInfo_supportedUsageClasses = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe [UsageClassType]
supportedUsageClasses :: Maybe [UsageClassType]
$sel:supportedUsageClasses:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [UsageClassType]
supportedUsageClasses} -> Maybe [UsageClassType]
supportedUsageClasses) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe [UsageClassType]
a -> InstanceTypeInfo
s {$sel:supportedUsageClasses:InstanceTypeInfo' :: Maybe [UsageClassType]
supportedUsageClasses = Maybe [UsageClassType]
a} :: InstanceTypeInfo) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The supported virtualization types.
instanceTypeInfo_supportedVirtualizationTypes :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe [VirtualizationType])
instanceTypeInfo_supportedVirtualizationTypes :: Lens' InstanceTypeInfo (Maybe [VirtualizationType])
instanceTypeInfo_supportedVirtualizationTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe [VirtualizationType]
supportedVirtualizationTypes :: Maybe [VirtualizationType]
$sel:supportedVirtualizationTypes:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [VirtualizationType]
supportedVirtualizationTypes} -> Maybe [VirtualizationType]
supportedVirtualizationTypes) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe [VirtualizationType]
a -> InstanceTypeInfo
s {$sel:supportedVirtualizationTypes:InstanceTypeInfo' :: Maybe [VirtualizationType]
supportedVirtualizationTypes = Maybe [VirtualizationType]
a} :: InstanceTypeInfo) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Describes the vCPU configurations for the instance type.
instanceTypeInfo_vCpuInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe VCpuInfo)
instanceTypeInfo_vCpuInfo :: Lens' InstanceTypeInfo (Maybe VCpuInfo)
instanceTypeInfo_vCpuInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceTypeInfo' {Maybe VCpuInfo
vCpuInfo :: Maybe VCpuInfo
$sel:vCpuInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe VCpuInfo
vCpuInfo} -> Maybe VCpuInfo
vCpuInfo) (\s :: InstanceTypeInfo
s@InstanceTypeInfo' {} Maybe VCpuInfo
a -> InstanceTypeInfo
s {$sel:vCpuInfo:InstanceTypeInfo' :: Maybe VCpuInfo
vCpuInfo = Maybe VCpuInfo
a} :: InstanceTypeInfo)

instance Data.FromXML InstanceTypeInfo where
  parseXML :: [Node] -> Either String InstanceTypeInfo
parseXML [Node]
x =
    Maybe Bool
-> Maybe Bool
-> Maybe Bool
-> Maybe Bool
-> Maybe Bool
-> Maybe EbsInfo
-> Maybe FpgaInfo
-> Maybe Bool
-> Maybe GpuInfo
-> Maybe Bool
-> Maybe InstanceTypeHypervisor
-> Maybe InferenceAcceleratorInfo
-> Maybe InstanceStorageInfo
-> Maybe Bool
-> Maybe InstanceType
-> Maybe MemoryInfo
-> Maybe NetworkInfo
-> Maybe PlacementGroupInfo
-> Maybe ProcessorInfo
-> Maybe [BootModeType]
-> Maybe [RootDeviceType]
-> Maybe [UsageClassType]
-> Maybe [VirtualizationType]
-> Maybe VCpuInfo
-> InstanceTypeInfo
InstanceTypeInfo'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"autoRecoverySupported")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"bareMetal")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"burstablePerformanceSupported")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"currentGeneration")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"dedicatedHostsSupported")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"ebsInfo")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"fpgaInfo")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"freeTierEligible")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"gpuInfo")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"hibernationSupported")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"hypervisor")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"inferenceAcceleratorInfo")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"instanceStorageInfo")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"instanceStorageSupported")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"instanceType")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"memoryInfo")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"networkInfo")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"placementGroupInfo")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"processorInfo")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"supportedBootModes"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"supportedRootDeviceTypes"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"supportedUsageClasses"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"supportedVirtualizationTypes"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"vCpuInfo")

instance Prelude.Hashable InstanceTypeInfo where
  hashWithSalt :: Int -> InstanceTypeInfo -> Int
hashWithSalt Int
_salt InstanceTypeInfo' {Maybe Bool
Maybe [BootModeType]
Maybe [RootDeviceType]
Maybe [UsageClassType]
Maybe [VirtualizationType]
Maybe EbsInfo
Maybe FpgaInfo
Maybe GpuInfo
Maybe InferenceAcceleratorInfo
Maybe InstanceStorageInfo
Maybe InstanceType
Maybe InstanceTypeHypervisor
Maybe MemoryInfo
Maybe NetworkInfo
Maybe PlacementGroupInfo
Maybe ProcessorInfo
Maybe VCpuInfo
vCpuInfo :: Maybe VCpuInfo
supportedVirtualizationTypes :: Maybe [VirtualizationType]
supportedUsageClasses :: Maybe [UsageClassType]
supportedRootDeviceTypes :: Maybe [RootDeviceType]
supportedBootModes :: Maybe [BootModeType]
processorInfo :: Maybe ProcessorInfo
placementGroupInfo :: Maybe PlacementGroupInfo
networkInfo :: Maybe NetworkInfo
memoryInfo :: Maybe MemoryInfo
instanceType :: Maybe InstanceType
instanceStorageSupported :: Maybe Bool
instanceStorageInfo :: Maybe InstanceStorageInfo
inferenceAcceleratorInfo :: Maybe InferenceAcceleratorInfo
hypervisor :: Maybe InstanceTypeHypervisor
hibernationSupported :: Maybe Bool
gpuInfo :: Maybe GpuInfo
freeTierEligible :: Maybe Bool
fpgaInfo :: Maybe FpgaInfo
ebsInfo :: Maybe EbsInfo
dedicatedHostsSupported :: Maybe Bool
currentGeneration :: Maybe Bool
burstablePerformanceSupported :: Maybe Bool
bareMetal :: Maybe Bool
autoRecoverySupported :: Maybe Bool
$sel:vCpuInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe VCpuInfo
$sel:supportedVirtualizationTypes:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [VirtualizationType]
$sel:supportedUsageClasses:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [UsageClassType]
$sel:supportedRootDeviceTypes:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [RootDeviceType]
$sel:supportedBootModes:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [BootModeType]
$sel:processorInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe ProcessorInfo
$sel:placementGroupInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe PlacementGroupInfo
$sel:networkInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe NetworkInfo
$sel:memoryInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe MemoryInfo
$sel:instanceType:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InstanceType
$sel:instanceStorageSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:instanceStorageInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InstanceStorageInfo
$sel:inferenceAcceleratorInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InferenceAcceleratorInfo
$sel:hypervisor:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InstanceTypeHypervisor
$sel:hibernationSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:gpuInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe GpuInfo
$sel:freeTierEligible:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:fpgaInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe FpgaInfo
$sel:ebsInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe EbsInfo
$sel:dedicatedHostsSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:currentGeneration:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:burstablePerformanceSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:bareMetal:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:autoRecoverySupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
autoRecoverySupported
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
bareMetal
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
burstablePerformanceSupported
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
currentGeneration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dedicatedHostsSupported
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EbsInfo
ebsInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FpgaInfo
fpgaInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
freeTierEligible
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe GpuInfo
gpuInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
hibernationSupported
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InstanceTypeHypervisor
hypervisor
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InferenceAcceleratorInfo
inferenceAcceleratorInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InstanceStorageInfo
instanceStorageInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
instanceStorageSupported
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InstanceType
instanceType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MemoryInfo
memoryInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe NetworkInfo
networkInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PlacementGroupInfo
placementGroupInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ProcessorInfo
processorInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [BootModeType]
supportedBootModes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [RootDeviceType]
supportedRootDeviceTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [UsageClassType]
supportedUsageClasses
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [VirtualizationType]
supportedVirtualizationTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VCpuInfo
vCpuInfo

instance Prelude.NFData InstanceTypeInfo where
  rnf :: InstanceTypeInfo -> ()
rnf InstanceTypeInfo' {Maybe Bool
Maybe [BootModeType]
Maybe [RootDeviceType]
Maybe [UsageClassType]
Maybe [VirtualizationType]
Maybe EbsInfo
Maybe FpgaInfo
Maybe GpuInfo
Maybe InferenceAcceleratorInfo
Maybe InstanceStorageInfo
Maybe InstanceType
Maybe InstanceTypeHypervisor
Maybe MemoryInfo
Maybe NetworkInfo
Maybe PlacementGroupInfo
Maybe ProcessorInfo
Maybe VCpuInfo
vCpuInfo :: Maybe VCpuInfo
supportedVirtualizationTypes :: Maybe [VirtualizationType]
supportedUsageClasses :: Maybe [UsageClassType]
supportedRootDeviceTypes :: Maybe [RootDeviceType]
supportedBootModes :: Maybe [BootModeType]
processorInfo :: Maybe ProcessorInfo
placementGroupInfo :: Maybe PlacementGroupInfo
networkInfo :: Maybe NetworkInfo
memoryInfo :: Maybe MemoryInfo
instanceType :: Maybe InstanceType
instanceStorageSupported :: Maybe Bool
instanceStorageInfo :: Maybe InstanceStorageInfo
inferenceAcceleratorInfo :: Maybe InferenceAcceleratorInfo
hypervisor :: Maybe InstanceTypeHypervisor
hibernationSupported :: Maybe Bool
gpuInfo :: Maybe GpuInfo
freeTierEligible :: Maybe Bool
fpgaInfo :: Maybe FpgaInfo
ebsInfo :: Maybe EbsInfo
dedicatedHostsSupported :: Maybe Bool
currentGeneration :: Maybe Bool
burstablePerformanceSupported :: Maybe Bool
bareMetal :: Maybe Bool
autoRecoverySupported :: Maybe Bool
$sel:vCpuInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe VCpuInfo
$sel:supportedVirtualizationTypes:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [VirtualizationType]
$sel:supportedUsageClasses:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [UsageClassType]
$sel:supportedRootDeviceTypes:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [RootDeviceType]
$sel:supportedBootModes:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe [BootModeType]
$sel:processorInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe ProcessorInfo
$sel:placementGroupInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe PlacementGroupInfo
$sel:networkInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe NetworkInfo
$sel:memoryInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe MemoryInfo
$sel:instanceType:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InstanceType
$sel:instanceStorageSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:instanceStorageInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InstanceStorageInfo
$sel:inferenceAcceleratorInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InferenceAcceleratorInfo
$sel:hypervisor:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe InstanceTypeHypervisor
$sel:hibernationSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:gpuInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe GpuInfo
$sel:freeTierEligible:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:fpgaInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe FpgaInfo
$sel:ebsInfo:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe EbsInfo
$sel:dedicatedHostsSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:currentGeneration:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:burstablePerformanceSupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:bareMetal:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
$sel:autoRecoverySupported:InstanceTypeInfo' :: InstanceTypeInfo -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
autoRecoverySupported
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
bareMetal
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
burstablePerformanceSupported
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
currentGeneration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
dedicatedHostsSupported
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EbsInfo
ebsInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FpgaInfo
fpgaInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
freeTierEligible
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe GpuInfo
gpuInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
hibernationSupported
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InstanceTypeHypervisor
hypervisor
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InferenceAcceleratorInfo
inferenceAcceleratorInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InstanceStorageInfo
instanceStorageInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
instanceStorageSupported
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InstanceType
instanceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MemoryInfo
memoryInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe NetworkInfo
networkInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PlacementGroupInfo
placementGroupInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ProcessorInfo
processorInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [BootModeType]
supportedBootModes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe [RootDeviceType]
supportedRootDeviceTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe [UsageClassType]
supportedUsageClasses
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe [VirtualizationType]
supportedVirtualizationTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VCpuInfo
vCpuInfo