{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# 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.GetInstanceTypesFromInstanceRequirements
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns a list of instance types with the specified instance attributes.
-- You can use the response to preview the instance types without launching
-- instances. Note that the response does not consider capacity.
--
-- When you specify multiple parameters, you get instance types that
-- satisfy all of the specified parameters. If you specify multiple values
-- for a parameter, you get instance types that satisfy any of the
-- specified values.
--
-- For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html#spotfleet-get-instance-types-from-instance-requirements Preview instance types with specified attributes>,
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for EC2 Fleet>,
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for Spot Fleet>,
-- and
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html Spot placement score>
-- in the /Amazon EC2 User Guide/, and
-- <https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html Creating an Auto Scaling group using attribute-based instance type selection>
-- in the /Amazon EC2 Auto Scaling User Guide/.
--
-- This operation returns paginated results.
module Amazonka.EC2.GetInstanceTypesFromInstanceRequirements
  ( -- * Creating a Request
    GetInstanceTypesFromInstanceRequirements (..),
    newGetInstanceTypesFromInstanceRequirements,

    -- * Request Lenses
    getInstanceTypesFromInstanceRequirements_dryRun,
    getInstanceTypesFromInstanceRequirements_maxResults,
    getInstanceTypesFromInstanceRequirements_nextToken,
    getInstanceTypesFromInstanceRequirements_architectureTypes,
    getInstanceTypesFromInstanceRequirements_virtualizationTypes,
    getInstanceTypesFromInstanceRequirements_instanceRequirements,

    -- * Destructuring the Response
    GetInstanceTypesFromInstanceRequirementsResponse (..),
    newGetInstanceTypesFromInstanceRequirementsResponse,

    -- * Response Lenses
    getInstanceTypesFromInstanceRequirementsResponse_instanceTypes,
    getInstanceTypesFromInstanceRequirementsResponse_nextToken,
    getInstanceTypesFromInstanceRequirementsResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newGetInstanceTypesFromInstanceRequirements' smart constructor.
data GetInstanceTypesFromInstanceRequirements = GetInstanceTypesFromInstanceRequirements'
  { -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    GetInstanceTypesFromInstanceRequirements -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The maximum number of results to return in a single call. Specify a
    -- value between 1 and
 1000. The default value is 1000. To retrieve the
    -- remaining results, make another call with
 the returned @NextToken@
    -- value.
    GetInstanceTypesFromInstanceRequirements -> Maybe Int
maxResults :: Prelude.Maybe Prelude.Int,
    -- | The token for the next set of results.
    GetInstanceTypesFromInstanceRequirements -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The processor architecture type.
    GetInstanceTypesFromInstanceRequirements -> [ArchitectureType]
architectureTypes :: [ArchitectureType],
    -- | The virtualization type.
    GetInstanceTypesFromInstanceRequirements -> [VirtualizationType]
virtualizationTypes :: [VirtualizationType],
    -- | The attributes required for the instance types.
    GetInstanceTypesFromInstanceRequirements
-> InstanceRequirementsRequest
instanceRequirements :: InstanceRequirementsRequest
  }
  deriving (GetInstanceTypesFromInstanceRequirements
-> GetInstanceTypesFromInstanceRequirements -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetInstanceTypesFromInstanceRequirements
-> GetInstanceTypesFromInstanceRequirements -> Bool
$c/= :: GetInstanceTypesFromInstanceRequirements
-> GetInstanceTypesFromInstanceRequirements -> Bool
== :: GetInstanceTypesFromInstanceRequirements
-> GetInstanceTypesFromInstanceRequirements -> Bool
$c== :: GetInstanceTypesFromInstanceRequirements
-> GetInstanceTypesFromInstanceRequirements -> Bool
Prelude.Eq, ReadPrec [GetInstanceTypesFromInstanceRequirements]
ReadPrec GetInstanceTypesFromInstanceRequirements
Int -> ReadS GetInstanceTypesFromInstanceRequirements
ReadS [GetInstanceTypesFromInstanceRequirements]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetInstanceTypesFromInstanceRequirements]
$creadListPrec :: ReadPrec [GetInstanceTypesFromInstanceRequirements]
readPrec :: ReadPrec GetInstanceTypesFromInstanceRequirements
$creadPrec :: ReadPrec GetInstanceTypesFromInstanceRequirements
readList :: ReadS [GetInstanceTypesFromInstanceRequirements]
$creadList :: ReadS [GetInstanceTypesFromInstanceRequirements]
readsPrec :: Int -> ReadS GetInstanceTypesFromInstanceRequirements
$creadsPrec :: Int -> ReadS GetInstanceTypesFromInstanceRequirements
Prelude.Read, Int -> GetInstanceTypesFromInstanceRequirements -> ShowS
[GetInstanceTypesFromInstanceRequirements] -> ShowS
GetInstanceTypesFromInstanceRequirements -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetInstanceTypesFromInstanceRequirements] -> ShowS
$cshowList :: [GetInstanceTypesFromInstanceRequirements] -> ShowS
show :: GetInstanceTypesFromInstanceRequirements -> String
$cshow :: GetInstanceTypesFromInstanceRequirements -> String
showsPrec :: Int -> GetInstanceTypesFromInstanceRequirements -> ShowS
$cshowsPrec :: Int -> GetInstanceTypesFromInstanceRequirements -> ShowS
Prelude.Show, forall x.
Rep GetInstanceTypesFromInstanceRequirements x
-> GetInstanceTypesFromInstanceRequirements
forall x.
GetInstanceTypesFromInstanceRequirements
-> Rep GetInstanceTypesFromInstanceRequirements x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetInstanceTypesFromInstanceRequirements x
-> GetInstanceTypesFromInstanceRequirements
$cfrom :: forall x.
GetInstanceTypesFromInstanceRequirements
-> Rep GetInstanceTypesFromInstanceRequirements x
Prelude.Generic)

-- |
-- Create a value of 'GetInstanceTypesFromInstanceRequirements' 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:
--
-- 'dryRun', 'getInstanceTypesFromInstanceRequirements_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
--
-- 'maxResults', 'getInstanceTypesFromInstanceRequirements_maxResults' - The maximum number of results to return in a single call. Specify a
-- value between 1 and
 1000. The default value is 1000. To retrieve the
-- remaining results, make another call with
 the returned @NextToken@
-- value.
--
-- 'nextToken', 'getInstanceTypesFromInstanceRequirements_nextToken' - The token for the next set of results.
--
-- 'architectureTypes', 'getInstanceTypesFromInstanceRequirements_architectureTypes' - The processor architecture type.
--
-- 'virtualizationTypes', 'getInstanceTypesFromInstanceRequirements_virtualizationTypes' - The virtualization type.
--
-- 'instanceRequirements', 'getInstanceTypesFromInstanceRequirements_instanceRequirements' - The attributes required for the instance types.
newGetInstanceTypesFromInstanceRequirements ::
  -- | 'instanceRequirements'
  InstanceRequirementsRequest ->
  GetInstanceTypesFromInstanceRequirements
newGetInstanceTypesFromInstanceRequirements :: InstanceRequirementsRequest
-> GetInstanceTypesFromInstanceRequirements
newGetInstanceTypesFromInstanceRequirements
  InstanceRequirementsRequest
pInstanceRequirements_ =
    GetInstanceTypesFromInstanceRequirements'
      { $sel:dryRun:GetInstanceTypesFromInstanceRequirements' :: Maybe Bool
dryRun =
          forall a. Maybe a
Prelude.Nothing,
        $sel:maxResults:GetInstanceTypesFromInstanceRequirements' :: Maybe Int
maxResults = forall a. Maybe a
Prelude.Nothing,
        $sel:nextToken:GetInstanceTypesFromInstanceRequirements' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
        $sel:architectureTypes:GetInstanceTypesFromInstanceRequirements' :: [ArchitectureType]
architectureTypes =
          forall a. Monoid a => a
Prelude.mempty,
        $sel:virtualizationTypes:GetInstanceTypesFromInstanceRequirements' :: [VirtualizationType]
virtualizationTypes =
          forall a. Monoid a => a
Prelude.mempty,
        $sel:instanceRequirements:GetInstanceTypesFromInstanceRequirements' :: InstanceRequirementsRequest
instanceRequirements =
          InstanceRequirementsRequest
pInstanceRequirements_
      }

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
getInstanceTypesFromInstanceRequirements_dryRun :: Lens.Lens' GetInstanceTypesFromInstanceRequirements (Prelude.Maybe Prelude.Bool)
getInstanceTypesFromInstanceRequirements_dryRun :: Lens' GetInstanceTypesFromInstanceRequirements (Maybe Bool)
getInstanceTypesFromInstanceRequirements_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceTypesFromInstanceRequirements' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: GetInstanceTypesFromInstanceRequirements
s@GetInstanceTypesFromInstanceRequirements' {} Maybe Bool
a -> GetInstanceTypesFromInstanceRequirements
s {$sel:dryRun:GetInstanceTypesFromInstanceRequirements' :: Maybe Bool
dryRun = Maybe Bool
a} :: GetInstanceTypesFromInstanceRequirements)

-- | The maximum number of results to return in a single call. Specify a
-- value between 1 and
 1000. The default value is 1000. To retrieve the
-- remaining results, make another call with
 the returned @NextToken@
-- value.
getInstanceTypesFromInstanceRequirements_maxResults :: Lens.Lens' GetInstanceTypesFromInstanceRequirements (Prelude.Maybe Prelude.Int)
getInstanceTypesFromInstanceRequirements_maxResults :: Lens' GetInstanceTypesFromInstanceRequirements (Maybe Int)
getInstanceTypesFromInstanceRequirements_maxResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceTypesFromInstanceRequirements' {Maybe Int
maxResults :: Maybe Int
$sel:maxResults:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Int
maxResults} -> Maybe Int
maxResults) (\s :: GetInstanceTypesFromInstanceRequirements
s@GetInstanceTypesFromInstanceRequirements' {} Maybe Int
a -> GetInstanceTypesFromInstanceRequirements
s {$sel:maxResults:GetInstanceTypesFromInstanceRequirements' :: Maybe Int
maxResults = Maybe Int
a} :: GetInstanceTypesFromInstanceRequirements)

-- | The token for the next set of results.
getInstanceTypesFromInstanceRequirements_nextToken :: Lens.Lens' GetInstanceTypesFromInstanceRequirements (Prelude.Maybe Prelude.Text)
getInstanceTypesFromInstanceRequirements_nextToken :: Lens' GetInstanceTypesFromInstanceRequirements (Maybe Text)
getInstanceTypesFromInstanceRequirements_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceTypesFromInstanceRequirements' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetInstanceTypesFromInstanceRequirements
s@GetInstanceTypesFromInstanceRequirements' {} Maybe Text
a -> GetInstanceTypesFromInstanceRequirements
s {$sel:nextToken:GetInstanceTypesFromInstanceRequirements' :: Maybe Text
nextToken = Maybe Text
a} :: GetInstanceTypesFromInstanceRequirements)

-- | The processor architecture type.
getInstanceTypesFromInstanceRequirements_architectureTypes :: Lens.Lens' GetInstanceTypesFromInstanceRequirements [ArchitectureType]
getInstanceTypesFromInstanceRequirements_architectureTypes :: Lens' GetInstanceTypesFromInstanceRequirements [ArchitectureType]
getInstanceTypesFromInstanceRequirements_architectureTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceTypesFromInstanceRequirements' {[ArchitectureType]
architectureTypes :: [ArchitectureType]
$sel:architectureTypes:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> [ArchitectureType]
architectureTypes} -> [ArchitectureType]
architectureTypes) (\s :: GetInstanceTypesFromInstanceRequirements
s@GetInstanceTypesFromInstanceRequirements' {} [ArchitectureType]
a -> GetInstanceTypesFromInstanceRequirements
s {$sel:architectureTypes:GetInstanceTypesFromInstanceRequirements' :: [ArchitectureType]
architectureTypes = [ArchitectureType]
a} :: GetInstanceTypesFromInstanceRequirements) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The virtualization type.
getInstanceTypesFromInstanceRequirements_virtualizationTypes :: Lens.Lens' GetInstanceTypesFromInstanceRequirements [VirtualizationType]
getInstanceTypesFromInstanceRequirements_virtualizationTypes :: Lens' GetInstanceTypesFromInstanceRequirements [VirtualizationType]
getInstanceTypesFromInstanceRequirements_virtualizationTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceTypesFromInstanceRequirements' {[VirtualizationType]
virtualizationTypes :: [VirtualizationType]
$sel:virtualizationTypes:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> [VirtualizationType]
virtualizationTypes} -> [VirtualizationType]
virtualizationTypes) (\s :: GetInstanceTypesFromInstanceRequirements
s@GetInstanceTypesFromInstanceRequirements' {} [VirtualizationType]
a -> GetInstanceTypesFromInstanceRequirements
s {$sel:virtualizationTypes:GetInstanceTypesFromInstanceRequirements' :: [VirtualizationType]
virtualizationTypes = [VirtualizationType]
a} :: GetInstanceTypesFromInstanceRequirements) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The attributes required for the instance types.
getInstanceTypesFromInstanceRequirements_instanceRequirements :: Lens.Lens' GetInstanceTypesFromInstanceRequirements InstanceRequirementsRequest
getInstanceTypesFromInstanceRequirements_instanceRequirements :: Lens'
  GetInstanceTypesFromInstanceRequirements
  InstanceRequirementsRequest
getInstanceTypesFromInstanceRequirements_instanceRequirements = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceTypesFromInstanceRequirements' {InstanceRequirementsRequest
instanceRequirements :: InstanceRequirementsRequest
$sel:instanceRequirements:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements
-> InstanceRequirementsRequest
instanceRequirements} -> InstanceRequirementsRequest
instanceRequirements) (\s :: GetInstanceTypesFromInstanceRequirements
s@GetInstanceTypesFromInstanceRequirements' {} InstanceRequirementsRequest
a -> GetInstanceTypesFromInstanceRequirements
s {$sel:instanceRequirements:GetInstanceTypesFromInstanceRequirements' :: InstanceRequirementsRequest
instanceRequirements = InstanceRequirementsRequest
a} :: GetInstanceTypesFromInstanceRequirements)

instance
  Core.AWSPager
    GetInstanceTypesFromInstanceRequirements
  where
  page :: GetInstanceTypesFromInstanceRequirements
-> AWSResponse GetInstanceTypesFromInstanceRequirements
-> Maybe GetInstanceTypesFromInstanceRequirements
page GetInstanceTypesFromInstanceRequirements
rq AWSResponse GetInstanceTypesFromInstanceRequirements
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse GetInstanceTypesFromInstanceRequirements
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' GetInstanceTypesFromInstanceRequirementsResponse (Maybe Text)
getInstanceTypesFromInstanceRequirementsResponse_nextToken
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse GetInstanceTypesFromInstanceRequirements
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens'
  GetInstanceTypesFromInstanceRequirementsResponse
  (Maybe [InstanceTypeInfoFromInstanceRequirements])
getInstanceTypesFromInstanceRequirementsResponse_instanceTypes
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
        forall a. a -> Maybe a
Prelude.Just
          forall a b. (a -> b) -> a -> b
Prelude.$ GetInstanceTypesFromInstanceRequirements
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' GetInstanceTypesFromInstanceRequirements (Maybe Text)
getInstanceTypesFromInstanceRequirements_nextToken
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse GetInstanceTypesFromInstanceRequirements
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' GetInstanceTypesFromInstanceRequirementsResponse (Maybe Text)
getInstanceTypesFromInstanceRequirementsResponse_nextToken
          forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance
  Core.AWSRequest
    GetInstanceTypesFromInstanceRequirements
  where
  type
    AWSResponse
      GetInstanceTypesFromInstanceRequirements =
      GetInstanceTypesFromInstanceRequirementsResponse
  request :: (Service -> Service)
-> GetInstanceTypesFromInstanceRequirements
-> Request GetInstanceTypesFromInstanceRequirements
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetInstanceTypesFromInstanceRequirements
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse GetInstanceTypesFromInstanceRequirements)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe [InstanceTypeInfoFromInstanceRequirements]
-> Maybe Text
-> Int
-> GetInstanceTypesFromInstanceRequirementsResponse
GetInstanceTypesFromInstanceRequirementsResponse'
            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
"instanceTypeSet"
                            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
"nextToken")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    GetInstanceTypesFromInstanceRequirements
  where
  hashWithSalt :: Int -> GetInstanceTypesFromInstanceRequirements -> Int
hashWithSalt
    Int
_salt
    GetInstanceTypesFromInstanceRequirements' {[ArchitectureType]
[VirtualizationType]
Maybe Bool
Maybe Int
Maybe Text
InstanceRequirementsRequest
instanceRequirements :: InstanceRequirementsRequest
virtualizationTypes :: [VirtualizationType]
architectureTypes :: [ArchitectureType]
nextToken :: Maybe Text
maxResults :: Maybe Int
dryRun :: Maybe Bool
$sel:instanceRequirements:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements
-> InstanceRequirementsRequest
$sel:virtualizationTypes:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> [VirtualizationType]
$sel:architectureTypes:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> [ArchitectureType]
$sel:nextToken:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Text
$sel:maxResults:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Int
$sel:dryRun:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Bool
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dryRun
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
maxResults
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [ArchitectureType]
architectureTypes
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [VirtualizationType]
virtualizationTypes
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` InstanceRequirementsRequest
instanceRequirements

instance
  Prelude.NFData
    GetInstanceTypesFromInstanceRequirements
  where
  rnf :: GetInstanceTypesFromInstanceRequirements -> ()
rnf GetInstanceTypesFromInstanceRequirements' {[ArchitectureType]
[VirtualizationType]
Maybe Bool
Maybe Int
Maybe Text
InstanceRequirementsRequest
instanceRequirements :: InstanceRequirementsRequest
virtualizationTypes :: [VirtualizationType]
architectureTypes :: [ArchitectureType]
nextToken :: Maybe Text
maxResults :: Maybe Int
dryRun :: Maybe Bool
$sel:instanceRequirements:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements
-> InstanceRequirementsRequest
$sel:virtualizationTypes:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> [VirtualizationType]
$sel:architectureTypes:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> [ArchitectureType]
$sel:nextToken:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Text
$sel:maxResults:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Int
$sel:dryRun:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
dryRun
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
maxResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [ArchitectureType]
architectureTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [VirtualizationType]
virtualizationTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf InstanceRequirementsRequest
instanceRequirements

instance
  Data.ToHeaders
    GetInstanceTypesFromInstanceRequirements
  where
  toHeaders :: GetInstanceTypesFromInstanceRequirements -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance
  Data.ToPath
    GetInstanceTypesFromInstanceRequirements
  where
  toPath :: GetInstanceTypesFromInstanceRequirements -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance
  Data.ToQuery
    GetInstanceTypesFromInstanceRequirements
  where
  toQuery :: GetInstanceTypesFromInstanceRequirements -> QueryString
toQuery GetInstanceTypesFromInstanceRequirements' {[ArchitectureType]
[VirtualizationType]
Maybe Bool
Maybe Int
Maybe Text
InstanceRequirementsRequest
instanceRequirements :: InstanceRequirementsRequest
virtualizationTypes :: [VirtualizationType]
architectureTypes :: [ArchitectureType]
nextToken :: Maybe Text
maxResults :: Maybe Int
dryRun :: Maybe Bool
$sel:instanceRequirements:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements
-> InstanceRequirementsRequest
$sel:virtualizationTypes:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> [VirtualizationType]
$sel:architectureTypes:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> [ArchitectureType]
$sel:nextToken:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Text
$sel:maxResults:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Int
$sel:dryRun:GetInstanceTypesFromInstanceRequirements' :: GetInstanceTypesFromInstanceRequirements -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"GetInstanceTypesFromInstanceRequirements" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2016-11-15" :: Prelude.ByteString),
        ByteString
"DryRun" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
dryRun,
        ByteString
"MaxResults" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Int
maxResults,
        ByteString
"NextToken" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
nextToken,
        forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList
          ByteString
"ArchitectureType"
          [ArchitectureType]
architectureTypes,
        forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList
          ByteString
"VirtualizationType"
          [VirtualizationType]
virtualizationTypes,
        ByteString
"InstanceRequirements" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: InstanceRequirementsRequest
instanceRequirements
      ]

-- | /See:/ 'newGetInstanceTypesFromInstanceRequirementsResponse' smart constructor.
data GetInstanceTypesFromInstanceRequirementsResponse = GetInstanceTypesFromInstanceRequirementsResponse'
  { -- | The instance types with the specified instance attributes.
    GetInstanceTypesFromInstanceRequirementsResponse
-> Maybe [InstanceTypeInfoFromInstanceRequirements]
instanceTypes :: Prelude.Maybe [InstanceTypeInfoFromInstanceRequirements],
    -- | The token for the next set of results.
    GetInstanceTypesFromInstanceRequirementsResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetInstanceTypesFromInstanceRequirementsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetInstanceTypesFromInstanceRequirementsResponse
-> GetInstanceTypesFromInstanceRequirementsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetInstanceTypesFromInstanceRequirementsResponse
-> GetInstanceTypesFromInstanceRequirementsResponse -> Bool
$c/= :: GetInstanceTypesFromInstanceRequirementsResponse
-> GetInstanceTypesFromInstanceRequirementsResponse -> Bool
== :: GetInstanceTypesFromInstanceRequirementsResponse
-> GetInstanceTypesFromInstanceRequirementsResponse -> Bool
$c== :: GetInstanceTypesFromInstanceRequirementsResponse
-> GetInstanceTypesFromInstanceRequirementsResponse -> Bool
Prelude.Eq, ReadPrec [GetInstanceTypesFromInstanceRequirementsResponse]
ReadPrec GetInstanceTypesFromInstanceRequirementsResponse
Int -> ReadS GetInstanceTypesFromInstanceRequirementsResponse
ReadS [GetInstanceTypesFromInstanceRequirementsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetInstanceTypesFromInstanceRequirementsResponse]
$creadListPrec :: ReadPrec [GetInstanceTypesFromInstanceRequirementsResponse]
readPrec :: ReadPrec GetInstanceTypesFromInstanceRequirementsResponse
$creadPrec :: ReadPrec GetInstanceTypesFromInstanceRequirementsResponse
readList :: ReadS [GetInstanceTypesFromInstanceRequirementsResponse]
$creadList :: ReadS [GetInstanceTypesFromInstanceRequirementsResponse]
readsPrec :: Int -> ReadS GetInstanceTypesFromInstanceRequirementsResponse
$creadsPrec :: Int -> ReadS GetInstanceTypesFromInstanceRequirementsResponse
Prelude.Read, Int -> GetInstanceTypesFromInstanceRequirementsResponse -> ShowS
[GetInstanceTypesFromInstanceRequirementsResponse] -> ShowS
GetInstanceTypesFromInstanceRequirementsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetInstanceTypesFromInstanceRequirementsResponse] -> ShowS
$cshowList :: [GetInstanceTypesFromInstanceRequirementsResponse] -> ShowS
show :: GetInstanceTypesFromInstanceRequirementsResponse -> String
$cshow :: GetInstanceTypesFromInstanceRequirementsResponse -> String
showsPrec :: Int -> GetInstanceTypesFromInstanceRequirementsResponse -> ShowS
$cshowsPrec :: Int -> GetInstanceTypesFromInstanceRequirementsResponse -> ShowS
Prelude.Show, forall x.
Rep GetInstanceTypesFromInstanceRequirementsResponse x
-> GetInstanceTypesFromInstanceRequirementsResponse
forall x.
GetInstanceTypesFromInstanceRequirementsResponse
-> Rep GetInstanceTypesFromInstanceRequirementsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetInstanceTypesFromInstanceRequirementsResponse x
-> GetInstanceTypesFromInstanceRequirementsResponse
$cfrom :: forall x.
GetInstanceTypesFromInstanceRequirementsResponse
-> Rep GetInstanceTypesFromInstanceRequirementsResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetInstanceTypesFromInstanceRequirementsResponse' 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:
--
-- 'instanceTypes', 'getInstanceTypesFromInstanceRequirementsResponse_instanceTypes' - The instance types with the specified instance attributes.
--
-- 'nextToken', 'getInstanceTypesFromInstanceRequirementsResponse_nextToken' - The token for the next set of results.
--
-- 'httpStatus', 'getInstanceTypesFromInstanceRequirementsResponse_httpStatus' - The response's http status code.
newGetInstanceTypesFromInstanceRequirementsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetInstanceTypesFromInstanceRequirementsResponse
newGetInstanceTypesFromInstanceRequirementsResponse :: Int -> GetInstanceTypesFromInstanceRequirementsResponse
newGetInstanceTypesFromInstanceRequirementsResponse
  Int
pHttpStatus_ =
    GetInstanceTypesFromInstanceRequirementsResponse'
      { $sel:instanceTypes:GetInstanceTypesFromInstanceRequirementsResponse' :: Maybe [InstanceTypeInfoFromInstanceRequirements]
instanceTypes =
          forall a. Maybe a
Prelude.Nothing,
        $sel:nextToken:GetInstanceTypesFromInstanceRequirementsResponse' :: Maybe Text
nextToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetInstanceTypesFromInstanceRequirementsResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | The instance types with the specified instance attributes.
getInstanceTypesFromInstanceRequirementsResponse_instanceTypes :: Lens.Lens' GetInstanceTypesFromInstanceRequirementsResponse (Prelude.Maybe [InstanceTypeInfoFromInstanceRequirements])
getInstanceTypesFromInstanceRequirementsResponse_instanceTypes :: Lens'
  GetInstanceTypesFromInstanceRequirementsResponse
  (Maybe [InstanceTypeInfoFromInstanceRequirements])
getInstanceTypesFromInstanceRequirementsResponse_instanceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceTypesFromInstanceRequirementsResponse' {Maybe [InstanceTypeInfoFromInstanceRequirements]
instanceTypes :: Maybe [InstanceTypeInfoFromInstanceRequirements]
$sel:instanceTypes:GetInstanceTypesFromInstanceRequirementsResponse' :: GetInstanceTypesFromInstanceRequirementsResponse
-> Maybe [InstanceTypeInfoFromInstanceRequirements]
instanceTypes} -> Maybe [InstanceTypeInfoFromInstanceRequirements]
instanceTypes) (\s :: GetInstanceTypesFromInstanceRequirementsResponse
s@GetInstanceTypesFromInstanceRequirementsResponse' {} Maybe [InstanceTypeInfoFromInstanceRequirements]
a -> GetInstanceTypesFromInstanceRequirementsResponse
s {$sel:instanceTypes:GetInstanceTypesFromInstanceRequirementsResponse' :: Maybe [InstanceTypeInfoFromInstanceRequirements]
instanceTypes = Maybe [InstanceTypeInfoFromInstanceRequirements]
a} :: GetInstanceTypesFromInstanceRequirementsResponse) 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 token for the next set of results.
getInstanceTypesFromInstanceRequirementsResponse_nextToken :: Lens.Lens' GetInstanceTypesFromInstanceRequirementsResponse (Prelude.Maybe Prelude.Text)
getInstanceTypesFromInstanceRequirementsResponse_nextToken :: Lens' GetInstanceTypesFromInstanceRequirementsResponse (Maybe Text)
getInstanceTypesFromInstanceRequirementsResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceTypesFromInstanceRequirementsResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetInstanceTypesFromInstanceRequirementsResponse' :: GetInstanceTypesFromInstanceRequirementsResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetInstanceTypesFromInstanceRequirementsResponse
s@GetInstanceTypesFromInstanceRequirementsResponse' {} Maybe Text
a -> GetInstanceTypesFromInstanceRequirementsResponse
s {$sel:nextToken:GetInstanceTypesFromInstanceRequirementsResponse' :: Maybe Text
nextToken = Maybe Text
a} :: GetInstanceTypesFromInstanceRequirementsResponse)

-- | The response's http status code.
getInstanceTypesFromInstanceRequirementsResponse_httpStatus :: Lens.Lens' GetInstanceTypesFromInstanceRequirementsResponse Prelude.Int
getInstanceTypesFromInstanceRequirementsResponse_httpStatus :: Lens' GetInstanceTypesFromInstanceRequirementsResponse Int
getInstanceTypesFromInstanceRequirementsResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetInstanceTypesFromInstanceRequirementsResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetInstanceTypesFromInstanceRequirementsResponse' :: GetInstanceTypesFromInstanceRequirementsResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetInstanceTypesFromInstanceRequirementsResponse
s@GetInstanceTypesFromInstanceRequirementsResponse' {} Int
a -> GetInstanceTypesFromInstanceRequirementsResponse
s {$sel:httpStatus:GetInstanceTypesFromInstanceRequirementsResponse' :: Int
httpStatus = Int
a} :: GetInstanceTypesFromInstanceRequirementsResponse)

instance
  Prelude.NFData
    GetInstanceTypesFromInstanceRequirementsResponse
  where
  rnf :: GetInstanceTypesFromInstanceRequirementsResponse -> ()
rnf
    GetInstanceTypesFromInstanceRequirementsResponse' {Int
Maybe [InstanceTypeInfoFromInstanceRequirements]
Maybe Text
httpStatus :: Int
nextToken :: Maybe Text
instanceTypes :: Maybe [InstanceTypeInfoFromInstanceRequirements]
$sel:httpStatus:GetInstanceTypesFromInstanceRequirementsResponse' :: GetInstanceTypesFromInstanceRequirementsResponse -> Int
$sel:nextToken:GetInstanceTypesFromInstanceRequirementsResponse' :: GetInstanceTypesFromInstanceRequirementsResponse -> Maybe Text
$sel:instanceTypes:GetInstanceTypesFromInstanceRequirementsResponse' :: GetInstanceTypesFromInstanceRequirementsResponse
-> Maybe [InstanceTypeInfoFromInstanceRequirements]
..} =
      forall a. NFData a => a -> ()
Prelude.rnf Maybe [InstanceTypeInfoFromInstanceRequirements]
instanceTypes
        seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
        seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus