{-# 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.PurchaseReservedInstancesOffering
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Purchases a Reserved Instance for use with your account. With Reserved
-- Instances, you pay a lower hourly rate compared to On-Demand instance
-- pricing.
--
-- Use DescribeReservedInstancesOfferings to get a list of Reserved
-- Instance offerings that match your specifications. After you\'ve
-- purchased a Reserved Instance, you can check for your new Reserved
-- Instance with DescribeReservedInstances.
--
-- To queue a purchase for a future date and time, specify a purchase time.
-- If you do not specify a purchase time, the default is the current time.
--
-- For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html Reserved Instances>
-- and
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
-- in the /Amazon EC2 User Guide/.
--
-- We are retiring EC2-Classic. We recommend that you migrate from
-- EC2-Classic to a VPC. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
-- in the /Amazon Elastic Compute Cloud User Guide/.
module Amazonka.EC2.PurchaseReservedInstancesOffering
  ( -- * Creating a Request
    PurchaseReservedInstancesOffering (..),
    newPurchaseReservedInstancesOffering,

    -- * Request Lenses
    purchaseReservedInstancesOffering_dryRun,
    purchaseReservedInstancesOffering_limitPrice,
    purchaseReservedInstancesOffering_purchaseTime,
    purchaseReservedInstancesOffering_instanceCount,
    purchaseReservedInstancesOffering_reservedInstancesOfferingId,

    -- * Destructuring the Response
    PurchaseReservedInstancesOfferingResponse (..),
    newPurchaseReservedInstancesOfferingResponse,

    -- * Response Lenses
    purchaseReservedInstancesOfferingResponse_reservedInstancesId,
    purchaseReservedInstancesOfferingResponse_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

-- | Contains the parameters for PurchaseReservedInstancesOffering.
--
-- /See:/ 'newPurchaseReservedInstancesOffering' smart constructor.
data PurchaseReservedInstancesOffering = PurchaseReservedInstancesOffering'
  { -- | 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@.
    PurchaseReservedInstancesOffering -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | Specified for Reserved Instance Marketplace offerings to limit the total
    -- order and ensure that the Reserved Instances are not purchased at
    -- unexpected prices.
    PurchaseReservedInstancesOffering
-> Maybe ReservedInstanceLimitPrice
limitPrice :: Prelude.Maybe ReservedInstanceLimitPrice,
    -- | The time at which to purchase the Reserved Instance, in UTC format (for
    -- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
    PurchaseReservedInstancesOffering -> Maybe ISO8601
purchaseTime :: Prelude.Maybe Data.ISO8601,
    -- | The number of Reserved Instances to purchase.
    PurchaseReservedInstancesOffering -> Int
instanceCount :: Prelude.Int,
    -- | The ID of the Reserved Instance offering to purchase.
    PurchaseReservedInstancesOffering -> Text
reservedInstancesOfferingId :: Prelude.Text
  }
  deriving (PurchaseReservedInstancesOffering
-> PurchaseReservedInstancesOffering -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PurchaseReservedInstancesOffering
-> PurchaseReservedInstancesOffering -> Bool
$c/= :: PurchaseReservedInstancesOffering
-> PurchaseReservedInstancesOffering -> Bool
== :: PurchaseReservedInstancesOffering
-> PurchaseReservedInstancesOffering -> Bool
$c== :: PurchaseReservedInstancesOffering
-> PurchaseReservedInstancesOffering -> Bool
Prelude.Eq, ReadPrec [PurchaseReservedInstancesOffering]
ReadPrec PurchaseReservedInstancesOffering
Int -> ReadS PurchaseReservedInstancesOffering
ReadS [PurchaseReservedInstancesOffering]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PurchaseReservedInstancesOffering]
$creadListPrec :: ReadPrec [PurchaseReservedInstancesOffering]
readPrec :: ReadPrec PurchaseReservedInstancesOffering
$creadPrec :: ReadPrec PurchaseReservedInstancesOffering
readList :: ReadS [PurchaseReservedInstancesOffering]
$creadList :: ReadS [PurchaseReservedInstancesOffering]
readsPrec :: Int -> ReadS PurchaseReservedInstancesOffering
$creadsPrec :: Int -> ReadS PurchaseReservedInstancesOffering
Prelude.Read, Int -> PurchaseReservedInstancesOffering -> ShowS
[PurchaseReservedInstancesOffering] -> ShowS
PurchaseReservedInstancesOffering -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PurchaseReservedInstancesOffering] -> ShowS
$cshowList :: [PurchaseReservedInstancesOffering] -> ShowS
show :: PurchaseReservedInstancesOffering -> String
$cshow :: PurchaseReservedInstancesOffering -> String
showsPrec :: Int -> PurchaseReservedInstancesOffering -> ShowS
$cshowsPrec :: Int -> PurchaseReservedInstancesOffering -> ShowS
Prelude.Show, forall x.
Rep PurchaseReservedInstancesOffering x
-> PurchaseReservedInstancesOffering
forall x.
PurchaseReservedInstancesOffering
-> Rep PurchaseReservedInstancesOffering x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep PurchaseReservedInstancesOffering x
-> PurchaseReservedInstancesOffering
$cfrom :: forall x.
PurchaseReservedInstancesOffering
-> Rep PurchaseReservedInstancesOffering x
Prelude.Generic)

-- |
-- Create a value of 'PurchaseReservedInstancesOffering' 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', 'purchaseReservedInstancesOffering_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@.
--
-- 'limitPrice', 'purchaseReservedInstancesOffering_limitPrice' - Specified for Reserved Instance Marketplace offerings to limit the total
-- order and ensure that the Reserved Instances are not purchased at
-- unexpected prices.
--
-- 'purchaseTime', 'purchaseReservedInstancesOffering_purchaseTime' - The time at which to purchase the Reserved Instance, in UTC format (for
-- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
--
-- 'instanceCount', 'purchaseReservedInstancesOffering_instanceCount' - The number of Reserved Instances to purchase.
--
-- 'reservedInstancesOfferingId', 'purchaseReservedInstancesOffering_reservedInstancesOfferingId' - The ID of the Reserved Instance offering to purchase.
newPurchaseReservedInstancesOffering ::
  -- | 'instanceCount'
  Prelude.Int ->
  -- | 'reservedInstancesOfferingId'
  Prelude.Text ->
  PurchaseReservedInstancesOffering
newPurchaseReservedInstancesOffering :: Int -> Text -> PurchaseReservedInstancesOffering
newPurchaseReservedInstancesOffering
  Int
pInstanceCount_
  Text
pReservedInstancesOfferingId_ =
    PurchaseReservedInstancesOffering'
      { $sel:dryRun:PurchaseReservedInstancesOffering' :: Maybe Bool
dryRun =
          forall a. Maybe a
Prelude.Nothing,
        $sel:limitPrice:PurchaseReservedInstancesOffering' :: Maybe ReservedInstanceLimitPrice
limitPrice = forall a. Maybe a
Prelude.Nothing,
        $sel:purchaseTime:PurchaseReservedInstancesOffering' :: Maybe ISO8601
purchaseTime = forall a. Maybe a
Prelude.Nothing,
        $sel:instanceCount:PurchaseReservedInstancesOffering' :: Int
instanceCount = Int
pInstanceCount_,
        $sel:reservedInstancesOfferingId:PurchaseReservedInstancesOffering' :: Text
reservedInstancesOfferingId =
          Text
pReservedInstancesOfferingId_
      }

-- | 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@.
purchaseReservedInstancesOffering_dryRun :: Lens.Lens' PurchaseReservedInstancesOffering (Prelude.Maybe Prelude.Bool)
purchaseReservedInstancesOffering_dryRun :: Lens' PurchaseReservedInstancesOffering (Maybe Bool)
purchaseReservedInstancesOffering_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PurchaseReservedInstancesOffering' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: PurchaseReservedInstancesOffering
s@PurchaseReservedInstancesOffering' {} Maybe Bool
a -> PurchaseReservedInstancesOffering
s {$sel:dryRun:PurchaseReservedInstancesOffering' :: Maybe Bool
dryRun = Maybe Bool
a} :: PurchaseReservedInstancesOffering)

-- | Specified for Reserved Instance Marketplace offerings to limit the total
-- order and ensure that the Reserved Instances are not purchased at
-- unexpected prices.
purchaseReservedInstancesOffering_limitPrice :: Lens.Lens' PurchaseReservedInstancesOffering (Prelude.Maybe ReservedInstanceLimitPrice)
purchaseReservedInstancesOffering_limitPrice :: Lens'
  PurchaseReservedInstancesOffering
  (Maybe ReservedInstanceLimitPrice)
purchaseReservedInstancesOffering_limitPrice = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PurchaseReservedInstancesOffering' {Maybe ReservedInstanceLimitPrice
limitPrice :: Maybe ReservedInstanceLimitPrice
$sel:limitPrice:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering
-> Maybe ReservedInstanceLimitPrice
limitPrice} -> Maybe ReservedInstanceLimitPrice
limitPrice) (\s :: PurchaseReservedInstancesOffering
s@PurchaseReservedInstancesOffering' {} Maybe ReservedInstanceLimitPrice
a -> PurchaseReservedInstancesOffering
s {$sel:limitPrice:PurchaseReservedInstancesOffering' :: Maybe ReservedInstanceLimitPrice
limitPrice = Maybe ReservedInstanceLimitPrice
a} :: PurchaseReservedInstancesOffering)

-- | The time at which to purchase the Reserved Instance, in UTC format (for
-- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
purchaseReservedInstancesOffering_purchaseTime :: Lens.Lens' PurchaseReservedInstancesOffering (Prelude.Maybe Prelude.UTCTime)
purchaseReservedInstancesOffering_purchaseTime :: Lens' PurchaseReservedInstancesOffering (Maybe UTCTime)
purchaseReservedInstancesOffering_purchaseTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PurchaseReservedInstancesOffering' {Maybe ISO8601
purchaseTime :: Maybe ISO8601
$sel:purchaseTime:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Maybe ISO8601
purchaseTime} -> Maybe ISO8601
purchaseTime) (\s :: PurchaseReservedInstancesOffering
s@PurchaseReservedInstancesOffering' {} Maybe ISO8601
a -> PurchaseReservedInstancesOffering
s {$sel:purchaseTime:PurchaseReservedInstancesOffering' :: Maybe ISO8601
purchaseTime = Maybe ISO8601
a} :: PurchaseReservedInstancesOffering) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The number of Reserved Instances to purchase.
purchaseReservedInstancesOffering_instanceCount :: Lens.Lens' PurchaseReservedInstancesOffering Prelude.Int
purchaseReservedInstancesOffering_instanceCount :: Lens' PurchaseReservedInstancesOffering Int
purchaseReservedInstancesOffering_instanceCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PurchaseReservedInstancesOffering' {Int
instanceCount :: Int
$sel:instanceCount:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Int
instanceCount} -> Int
instanceCount) (\s :: PurchaseReservedInstancesOffering
s@PurchaseReservedInstancesOffering' {} Int
a -> PurchaseReservedInstancesOffering
s {$sel:instanceCount:PurchaseReservedInstancesOffering' :: Int
instanceCount = Int
a} :: PurchaseReservedInstancesOffering)

-- | The ID of the Reserved Instance offering to purchase.
purchaseReservedInstancesOffering_reservedInstancesOfferingId :: Lens.Lens' PurchaseReservedInstancesOffering Prelude.Text
purchaseReservedInstancesOffering_reservedInstancesOfferingId :: Lens' PurchaseReservedInstancesOffering Text
purchaseReservedInstancesOffering_reservedInstancesOfferingId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PurchaseReservedInstancesOffering' {Text
reservedInstancesOfferingId :: Text
$sel:reservedInstancesOfferingId:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Text
reservedInstancesOfferingId} -> Text
reservedInstancesOfferingId) (\s :: PurchaseReservedInstancesOffering
s@PurchaseReservedInstancesOffering' {} Text
a -> PurchaseReservedInstancesOffering
s {$sel:reservedInstancesOfferingId:PurchaseReservedInstancesOffering' :: Text
reservedInstancesOfferingId = Text
a} :: PurchaseReservedInstancesOffering)

instance
  Core.AWSRequest
    PurchaseReservedInstancesOffering
  where
  type
    AWSResponse PurchaseReservedInstancesOffering =
      PurchaseReservedInstancesOfferingResponse
  request :: (Service -> Service)
-> PurchaseReservedInstancesOffering
-> Request PurchaseReservedInstancesOffering
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 PurchaseReservedInstancesOffering
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse PurchaseReservedInstancesOffering)))
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 Text -> Int -> PurchaseReservedInstancesOfferingResponse
PurchaseReservedInstancesOfferingResponse'
            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
"reservedInstancesId")
            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
    PurchaseReservedInstancesOffering
  where
  hashWithSalt :: Int -> PurchaseReservedInstancesOffering -> Int
hashWithSalt
    Int
_salt
    PurchaseReservedInstancesOffering' {Int
Maybe Bool
Maybe ISO8601
Maybe ReservedInstanceLimitPrice
Text
reservedInstancesOfferingId :: Text
instanceCount :: Int
purchaseTime :: Maybe ISO8601
limitPrice :: Maybe ReservedInstanceLimitPrice
dryRun :: Maybe Bool
$sel:reservedInstancesOfferingId:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Text
$sel:instanceCount:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Int
$sel:purchaseTime:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Maybe ISO8601
$sel:limitPrice:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering
-> Maybe ReservedInstanceLimitPrice
$sel:dryRun:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> 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 ReservedInstanceLimitPrice
limitPrice
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
purchaseTime
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Int
instanceCount
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
reservedInstancesOfferingId

instance
  Prelude.NFData
    PurchaseReservedInstancesOffering
  where
  rnf :: PurchaseReservedInstancesOffering -> ()
rnf PurchaseReservedInstancesOffering' {Int
Maybe Bool
Maybe ISO8601
Maybe ReservedInstanceLimitPrice
Text
reservedInstancesOfferingId :: Text
instanceCount :: Int
purchaseTime :: Maybe ISO8601
limitPrice :: Maybe ReservedInstanceLimitPrice
dryRun :: Maybe Bool
$sel:reservedInstancesOfferingId:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Text
$sel:instanceCount:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Int
$sel:purchaseTime:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Maybe ISO8601
$sel:limitPrice:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering
-> Maybe ReservedInstanceLimitPrice
$sel:dryRun:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> 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 ReservedInstanceLimitPrice
limitPrice
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ISO8601
purchaseTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
instanceCount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
reservedInstancesOfferingId

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

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

instance
  Data.ToQuery
    PurchaseReservedInstancesOffering
  where
  toQuery :: PurchaseReservedInstancesOffering -> QueryString
toQuery PurchaseReservedInstancesOffering' {Int
Maybe Bool
Maybe ISO8601
Maybe ReservedInstanceLimitPrice
Text
reservedInstancesOfferingId :: Text
instanceCount :: Int
purchaseTime :: Maybe ISO8601
limitPrice :: Maybe ReservedInstanceLimitPrice
dryRun :: Maybe Bool
$sel:reservedInstancesOfferingId:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Text
$sel:instanceCount:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Int
$sel:purchaseTime:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Maybe ISO8601
$sel:limitPrice:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering
-> Maybe ReservedInstanceLimitPrice
$sel:dryRun:PurchaseReservedInstancesOffering' :: PurchaseReservedInstancesOffering -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"PurchaseReservedInstancesOffering" ::
                      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
"LimitPrice" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe ReservedInstanceLimitPrice
limitPrice,
        ByteString
"PurchaseTime" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe ISO8601
purchaseTime,
        ByteString
"InstanceCount" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Int
instanceCount,
        ByteString
"ReservedInstancesOfferingId"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
reservedInstancesOfferingId
      ]

-- | Contains the output of PurchaseReservedInstancesOffering.
--
-- /See:/ 'newPurchaseReservedInstancesOfferingResponse' smart constructor.
data PurchaseReservedInstancesOfferingResponse = PurchaseReservedInstancesOfferingResponse'
  { -- | The IDs of the purchased Reserved Instances. If your purchase crosses
    -- into a discounted pricing tier, the final Reserved Instances IDs might
    -- change. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers Crossing pricing tiers>
    -- in the /Amazon Elastic Compute Cloud User Guide/.
    PurchaseReservedInstancesOfferingResponse -> Maybe Text
reservedInstancesId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    PurchaseReservedInstancesOfferingResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (PurchaseReservedInstancesOfferingResponse
-> PurchaseReservedInstancesOfferingResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PurchaseReservedInstancesOfferingResponse
-> PurchaseReservedInstancesOfferingResponse -> Bool
$c/= :: PurchaseReservedInstancesOfferingResponse
-> PurchaseReservedInstancesOfferingResponse -> Bool
== :: PurchaseReservedInstancesOfferingResponse
-> PurchaseReservedInstancesOfferingResponse -> Bool
$c== :: PurchaseReservedInstancesOfferingResponse
-> PurchaseReservedInstancesOfferingResponse -> Bool
Prelude.Eq, ReadPrec [PurchaseReservedInstancesOfferingResponse]
ReadPrec PurchaseReservedInstancesOfferingResponse
Int -> ReadS PurchaseReservedInstancesOfferingResponse
ReadS [PurchaseReservedInstancesOfferingResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PurchaseReservedInstancesOfferingResponse]
$creadListPrec :: ReadPrec [PurchaseReservedInstancesOfferingResponse]
readPrec :: ReadPrec PurchaseReservedInstancesOfferingResponse
$creadPrec :: ReadPrec PurchaseReservedInstancesOfferingResponse
readList :: ReadS [PurchaseReservedInstancesOfferingResponse]
$creadList :: ReadS [PurchaseReservedInstancesOfferingResponse]
readsPrec :: Int -> ReadS PurchaseReservedInstancesOfferingResponse
$creadsPrec :: Int -> ReadS PurchaseReservedInstancesOfferingResponse
Prelude.Read, Int -> PurchaseReservedInstancesOfferingResponse -> ShowS
[PurchaseReservedInstancesOfferingResponse] -> ShowS
PurchaseReservedInstancesOfferingResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PurchaseReservedInstancesOfferingResponse] -> ShowS
$cshowList :: [PurchaseReservedInstancesOfferingResponse] -> ShowS
show :: PurchaseReservedInstancesOfferingResponse -> String
$cshow :: PurchaseReservedInstancesOfferingResponse -> String
showsPrec :: Int -> PurchaseReservedInstancesOfferingResponse -> ShowS
$cshowsPrec :: Int -> PurchaseReservedInstancesOfferingResponse -> ShowS
Prelude.Show, forall x.
Rep PurchaseReservedInstancesOfferingResponse x
-> PurchaseReservedInstancesOfferingResponse
forall x.
PurchaseReservedInstancesOfferingResponse
-> Rep PurchaseReservedInstancesOfferingResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep PurchaseReservedInstancesOfferingResponse x
-> PurchaseReservedInstancesOfferingResponse
$cfrom :: forall x.
PurchaseReservedInstancesOfferingResponse
-> Rep PurchaseReservedInstancesOfferingResponse x
Prelude.Generic)

-- |
-- Create a value of 'PurchaseReservedInstancesOfferingResponse' 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:
--
-- 'reservedInstancesId', 'purchaseReservedInstancesOfferingResponse_reservedInstancesId' - The IDs of the purchased Reserved Instances. If your purchase crosses
-- into a discounted pricing tier, the final Reserved Instances IDs might
-- change. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers Crossing pricing tiers>
-- in the /Amazon Elastic Compute Cloud User Guide/.
--
-- 'httpStatus', 'purchaseReservedInstancesOfferingResponse_httpStatus' - The response's http status code.
newPurchaseReservedInstancesOfferingResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  PurchaseReservedInstancesOfferingResponse
newPurchaseReservedInstancesOfferingResponse :: Int -> PurchaseReservedInstancesOfferingResponse
newPurchaseReservedInstancesOfferingResponse
  Int
pHttpStatus_ =
    PurchaseReservedInstancesOfferingResponse'
      { $sel:reservedInstancesId:PurchaseReservedInstancesOfferingResponse' :: Maybe Text
reservedInstancesId =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:PurchaseReservedInstancesOfferingResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | The IDs of the purchased Reserved Instances. If your purchase crosses
-- into a discounted pricing tier, the final Reserved Instances IDs might
-- change. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers Crossing pricing tiers>
-- in the /Amazon Elastic Compute Cloud User Guide/.
purchaseReservedInstancesOfferingResponse_reservedInstancesId :: Lens.Lens' PurchaseReservedInstancesOfferingResponse (Prelude.Maybe Prelude.Text)
purchaseReservedInstancesOfferingResponse_reservedInstancesId :: Lens' PurchaseReservedInstancesOfferingResponse (Maybe Text)
purchaseReservedInstancesOfferingResponse_reservedInstancesId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PurchaseReservedInstancesOfferingResponse' {Maybe Text
reservedInstancesId :: Maybe Text
$sel:reservedInstancesId:PurchaseReservedInstancesOfferingResponse' :: PurchaseReservedInstancesOfferingResponse -> Maybe Text
reservedInstancesId} -> Maybe Text
reservedInstancesId) (\s :: PurchaseReservedInstancesOfferingResponse
s@PurchaseReservedInstancesOfferingResponse' {} Maybe Text
a -> PurchaseReservedInstancesOfferingResponse
s {$sel:reservedInstancesId:PurchaseReservedInstancesOfferingResponse' :: Maybe Text
reservedInstancesId = Maybe Text
a} :: PurchaseReservedInstancesOfferingResponse)

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

instance
  Prelude.NFData
    PurchaseReservedInstancesOfferingResponse
  where
  rnf :: PurchaseReservedInstancesOfferingResponse -> ()
rnf PurchaseReservedInstancesOfferingResponse' {Int
Maybe Text
httpStatus :: Int
reservedInstancesId :: Maybe Text
$sel:httpStatus:PurchaseReservedInstancesOfferingResponse' :: PurchaseReservedInstancesOfferingResponse -> Int
$sel:reservedInstancesId:PurchaseReservedInstancesOfferingResponse' :: PurchaseReservedInstancesOfferingResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
reservedInstancesId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus