{-# 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.CostExplorer.GetReservationPurchaseRecommendation
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets recommendations for reservation purchases. These recommendations
-- might help you to reduce your costs. Reservations provide a discounted
-- hourly rate (up to 75%) compared to On-Demand pricing.
--
-- Amazon Web Services generates your recommendations by identifying your
-- On-Demand usage during a specific time period and collecting your usage
-- into categories that are eligible for a reservation. After Amazon Web
-- Services has these categories, it simulates every combination of
-- reservations in each category of usage to identify the best number of
-- each type of Reserved Instance (RI) to purchase to maximize your
-- estimated savings.
--
-- For example, Amazon Web Services automatically aggregates your Amazon
-- EC2 Linux, shared tenancy, and c4 family usage in the US West (Oregon)
-- Region and recommends that you buy size-flexible regional reservations
-- to apply to the c4 family usage. Amazon Web Services recommends the
-- smallest size instance in an instance family. This makes it easier to
-- purchase a size-flexible Reserved Instance (RI). Amazon Web Services
-- also shows the equal number of normalized units. This way, you can
-- purchase any instance size that you want. For this example, your RI
-- recommendation is for @c4.large@ because that is the smallest size
-- instance in the c4 instance family.
module Amazonka.CostExplorer.GetReservationPurchaseRecommendation
  ( -- * Creating a Request
    GetReservationPurchaseRecommendation (..),
    newGetReservationPurchaseRecommendation,

    -- * Request Lenses
    getReservationPurchaseRecommendation_accountId,
    getReservationPurchaseRecommendation_accountScope,
    getReservationPurchaseRecommendation_filter,
    getReservationPurchaseRecommendation_lookbackPeriodInDays,
    getReservationPurchaseRecommendation_nextPageToken,
    getReservationPurchaseRecommendation_pageSize,
    getReservationPurchaseRecommendation_paymentOption,
    getReservationPurchaseRecommendation_serviceSpecification,
    getReservationPurchaseRecommendation_termInYears,
    getReservationPurchaseRecommendation_service,

    -- * Destructuring the Response
    GetReservationPurchaseRecommendationResponse (..),
    newGetReservationPurchaseRecommendationResponse,

    -- * Response Lenses
    getReservationPurchaseRecommendationResponse_metadata,
    getReservationPurchaseRecommendationResponse_nextPageToken,
    getReservationPurchaseRecommendationResponse_recommendations,
    getReservationPurchaseRecommendationResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetReservationPurchaseRecommendation' smart constructor.
data GetReservationPurchaseRecommendation = GetReservationPurchaseRecommendation'
  { -- | The account ID that\'s associated with the recommendation.
    GetReservationPurchaseRecommendation -> Maybe Text
accountId :: Prelude.Maybe Prelude.Text,
    -- | The account scope that you want your recommendations for. Amazon Web
    -- Services calculates recommendations including the management account and
    -- member accounts if the value is set to @PAYER@. If the value is
    -- @LINKED@, recommendations are calculated for individual member accounts
    -- only.
    GetReservationPurchaseRecommendation -> Maybe AccountScope
accountScope :: Prelude.Maybe AccountScope,
    GetReservationPurchaseRecommendation -> Maybe Expression
filter' :: Prelude.Maybe Expression,
    -- | The number of previous days that you want Amazon Web Services to
    -- consider when it calculates your recommendations.
    GetReservationPurchaseRecommendation -> Maybe LookbackPeriodInDays
lookbackPeriodInDays :: Prelude.Maybe LookbackPeriodInDays,
    -- | The pagination token that indicates the next set of results that you
    -- want to retrieve.
    GetReservationPurchaseRecommendation -> Maybe Text
nextPageToken :: Prelude.Maybe Prelude.Text,
    -- | The number of recommendations that you want returned in a single
    -- response object.
    GetReservationPurchaseRecommendation -> Maybe Natural
pageSize :: Prelude.Maybe Prelude.Natural,
    -- | The reservation purchase option that you want recommendations for.
    GetReservationPurchaseRecommendation -> Maybe PaymentOption
paymentOption :: Prelude.Maybe PaymentOption,
    -- | The hardware specifications for the service instances that you want
    -- recommendations for, such as standard or convertible Amazon EC2
    -- instances.
    GetReservationPurchaseRecommendation -> Maybe ServiceSpecification
serviceSpecification :: Prelude.Maybe ServiceSpecification,
    -- | The reservation term that you want recommendations for.
    GetReservationPurchaseRecommendation -> Maybe TermInYears
termInYears :: Prelude.Maybe TermInYears,
    -- | The specific service that you want recommendations for.
    GetReservationPurchaseRecommendation -> Text
service :: Prelude.Text
  }
  deriving (GetReservationPurchaseRecommendation
-> GetReservationPurchaseRecommendation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetReservationPurchaseRecommendation
-> GetReservationPurchaseRecommendation -> Bool
$c/= :: GetReservationPurchaseRecommendation
-> GetReservationPurchaseRecommendation -> Bool
== :: GetReservationPurchaseRecommendation
-> GetReservationPurchaseRecommendation -> Bool
$c== :: GetReservationPurchaseRecommendation
-> GetReservationPurchaseRecommendation -> Bool
Prelude.Eq, ReadPrec [GetReservationPurchaseRecommendation]
ReadPrec GetReservationPurchaseRecommendation
Int -> ReadS GetReservationPurchaseRecommendation
ReadS [GetReservationPurchaseRecommendation]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetReservationPurchaseRecommendation]
$creadListPrec :: ReadPrec [GetReservationPurchaseRecommendation]
readPrec :: ReadPrec GetReservationPurchaseRecommendation
$creadPrec :: ReadPrec GetReservationPurchaseRecommendation
readList :: ReadS [GetReservationPurchaseRecommendation]
$creadList :: ReadS [GetReservationPurchaseRecommendation]
readsPrec :: Int -> ReadS GetReservationPurchaseRecommendation
$creadsPrec :: Int -> ReadS GetReservationPurchaseRecommendation
Prelude.Read, Int -> GetReservationPurchaseRecommendation -> ShowS
[GetReservationPurchaseRecommendation] -> ShowS
GetReservationPurchaseRecommendation -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetReservationPurchaseRecommendation] -> ShowS
$cshowList :: [GetReservationPurchaseRecommendation] -> ShowS
show :: GetReservationPurchaseRecommendation -> String
$cshow :: GetReservationPurchaseRecommendation -> String
showsPrec :: Int -> GetReservationPurchaseRecommendation -> ShowS
$cshowsPrec :: Int -> GetReservationPurchaseRecommendation -> ShowS
Prelude.Show, forall x.
Rep GetReservationPurchaseRecommendation x
-> GetReservationPurchaseRecommendation
forall x.
GetReservationPurchaseRecommendation
-> Rep GetReservationPurchaseRecommendation x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetReservationPurchaseRecommendation x
-> GetReservationPurchaseRecommendation
$cfrom :: forall x.
GetReservationPurchaseRecommendation
-> Rep GetReservationPurchaseRecommendation x
Prelude.Generic)

-- |
-- Create a value of 'GetReservationPurchaseRecommendation' 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:
--
-- 'accountId', 'getReservationPurchaseRecommendation_accountId' - The account ID that\'s associated with the recommendation.
--
-- 'accountScope', 'getReservationPurchaseRecommendation_accountScope' - The account scope that you want your recommendations for. Amazon Web
-- Services calculates recommendations including the management account and
-- member accounts if the value is set to @PAYER@. If the value is
-- @LINKED@, recommendations are calculated for individual member accounts
-- only.
--
-- 'filter'', 'getReservationPurchaseRecommendation_filter' - Undocumented member.
--
-- 'lookbackPeriodInDays', 'getReservationPurchaseRecommendation_lookbackPeriodInDays' - The number of previous days that you want Amazon Web Services to
-- consider when it calculates your recommendations.
--
-- 'nextPageToken', 'getReservationPurchaseRecommendation_nextPageToken' - The pagination token that indicates the next set of results that you
-- want to retrieve.
--
-- 'pageSize', 'getReservationPurchaseRecommendation_pageSize' - The number of recommendations that you want returned in a single
-- response object.
--
-- 'paymentOption', 'getReservationPurchaseRecommendation_paymentOption' - The reservation purchase option that you want recommendations for.
--
-- 'serviceSpecification', 'getReservationPurchaseRecommendation_serviceSpecification' - The hardware specifications for the service instances that you want
-- recommendations for, such as standard or convertible Amazon EC2
-- instances.
--
-- 'termInYears', 'getReservationPurchaseRecommendation_termInYears' - The reservation term that you want recommendations for.
--
-- 'service', 'getReservationPurchaseRecommendation_service' - The specific service that you want recommendations for.
newGetReservationPurchaseRecommendation ::
  -- | 'service'
  Prelude.Text ->
  GetReservationPurchaseRecommendation
newGetReservationPurchaseRecommendation :: Text -> GetReservationPurchaseRecommendation
newGetReservationPurchaseRecommendation Text
pService_ =
  GetReservationPurchaseRecommendation'
    { $sel:accountId:GetReservationPurchaseRecommendation' :: Maybe Text
accountId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:accountScope:GetReservationPurchaseRecommendation' :: Maybe AccountScope
accountScope = forall a. Maybe a
Prelude.Nothing,
      $sel:filter':GetReservationPurchaseRecommendation' :: Maybe Expression
filter' = forall a. Maybe a
Prelude.Nothing,
      $sel:lookbackPeriodInDays:GetReservationPurchaseRecommendation' :: Maybe LookbackPeriodInDays
lookbackPeriodInDays =
        forall a. Maybe a
Prelude.Nothing,
      $sel:nextPageToken:GetReservationPurchaseRecommendation' :: Maybe Text
nextPageToken = forall a. Maybe a
Prelude.Nothing,
      $sel:pageSize:GetReservationPurchaseRecommendation' :: Maybe Natural
pageSize = forall a. Maybe a
Prelude.Nothing,
      $sel:paymentOption:GetReservationPurchaseRecommendation' :: Maybe PaymentOption
paymentOption = forall a. Maybe a
Prelude.Nothing,
      $sel:serviceSpecification:GetReservationPurchaseRecommendation' :: Maybe ServiceSpecification
serviceSpecification =
        forall a. Maybe a
Prelude.Nothing,
      $sel:termInYears:GetReservationPurchaseRecommendation' :: Maybe TermInYears
termInYears = forall a. Maybe a
Prelude.Nothing,
      $sel:service:GetReservationPurchaseRecommendation' :: Text
service = Text
pService_
    }

-- | The account ID that\'s associated with the recommendation.
getReservationPurchaseRecommendation_accountId :: Lens.Lens' GetReservationPurchaseRecommendation (Prelude.Maybe Prelude.Text)
getReservationPurchaseRecommendation_accountId :: Lens' GetReservationPurchaseRecommendation (Maybe Text)
getReservationPurchaseRecommendation_accountId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Maybe Text
accountId :: Maybe Text
$sel:accountId:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Text
accountId} -> Maybe Text
accountId) (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Maybe Text
a -> GetReservationPurchaseRecommendation
s {$sel:accountId:GetReservationPurchaseRecommendation' :: Maybe Text
accountId = Maybe Text
a} :: GetReservationPurchaseRecommendation)

-- | The account scope that you want your recommendations for. Amazon Web
-- Services calculates recommendations including the management account and
-- member accounts if the value is set to @PAYER@. If the value is
-- @LINKED@, recommendations are calculated for individual member accounts
-- only.
getReservationPurchaseRecommendation_accountScope :: Lens.Lens' GetReservationPurchaseRecommendation (Prelude.Maybe AccountScope)
getReservationPurchaseRecommendation_accountScope :: Lens' GetReservationPurchaseRecommendation (Maybe AccountScope)
getReservationPurchaseRecommendation_accountScope = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Maybe AccountScope
accountScope :: Maybe AccountScope
$sel:accountScope:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe AccountScope
accountScope} -> Maybe AccountScope
accountScope) (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Maybe AccountScope
a -> GetReservationPurchaseRecommendation
s {$sel:accountScope:GetReservationPurchaseRecommendation' :: Maybe AccountScope
accountScope = Maybe AccountScope
a} :: GetReservationPurchaseRecommendation)

-- | Undocumented member.
getReservationPurchaseRecommendation_filter :: Lens.Lens' GetReservationPurchaseRecommendation (Prelude.Maybe Expression)
getReservationPurchaseRecommendation_filter :: Lens' GetReservationPurchaseRecommendation (Maybe Expression)
getReservationPurchaseRecommendation_filter = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Maybe Expression
filter' :: Maybe Expression
$sel:filter':GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Expression
filter'} -> Maybe Expression
filter') (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Maybe Expression
a -> GetReservationPurchaseRecommendation
s {$sel:filter':GetReservationPurchaseRecommendation' :: Maybe Expression
filter' = Maybe Expression
a} :: GetReservationPurchaseRecommendation)

-- | The number of previous days that you want Amazon Web Services to
-- consider when it calculates your recommendations.
getReservationPurchaseRecommendation_lookbackPeriodInDays :: Lens.Lens' GetReservationPurchaseRecommendation (Prelude.Maybe LookbackPeriodInDays)
getReservationPurchaseRecommendation_lookbackPeriodInDays :: Lens'
  GetReservationPurchaseRecommendation (Maybe LookbackPeriodInDays)
getReservationPurchaseRecommendation_lookbackPeriodInDays = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Maybe LookbackPeriodInDays
lookbackPeriodInDays :: Maybe LookbackPeriodInDays
$sel:lookbackPeriodInDays:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe LookbackPeriodInDays
lookbackPeriodInDays} -> Maybe LookbackPeriodInDays
lookbackPeriodInDays) (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Maybe LookbackPeriodInDays
a -> GetReservationPurchaseRecommendation
s {$sel:lookbackPeriodInDays:GetReservationPurchaseRecommendation' :: Maybe LookbackPeriodInDays
lookbackPeriodInDays = Maybe LookbackPeriodInDays
a} :: GetReservationPurchaseRecommendation)

-- | The pagination token that indicates the next set of results that you
-- want to retrieve.
getReservationPurchaseRecommendation_nextPageToken :: Lens.Lens' GetReservationPurchaseRecommendation (Prelude.Maybe Prelude.Text)
getReservationPurchaseRecommendation_nextPageToken :: Lens' GetReservationPurchaseRecommendation (Maybe Text)
getReservationPurchaseRecommendation_nextPageToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Maybe Text
nextPageToken :: Maybe Text
$sel:nextPageToken:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Text
nextPageToken} -> Maybe Text
nextPageToken) (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Maybe Text
a -> GetReservationPurchaseRecommendation
s {$sel:nextPageToken:GetReservationPurchaseRecommendation' :: Maybe Text
nextPageToken = Maybe Text
a} :: GetReservationPurchaseRecommendation)

-- | The number of recommendations that you want returned in a single
-- response object.
getReservationPurchaseRecommendation_pageSize :: Lens.Lens' GetReservationPurchaseRecommendation (Prelude.Maybe Prelude.Natural)
getReservationPurchaseRecommendation_pageSize :: Lens' GetReservationPurchaseRecommendation (Maybe Natural)
getReservationPurchaseRecommendation_pageSize = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Maybe Natural
pageSize :: Maybe Natural
$sel:pageSize:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Natural
pageSize} -> Maybe Natural
pageSize) (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Maybe Natural
a -> GetReservationPurchaseRecommendation
s {$sel:pageSize:GetReservationPurchaseRecommendation' :: Maybe Natural
pageSize = Maybe Natural
a} :: GetReservationPurchaseRecommendation)

-- | The reservation purchase option that you want recommendations for.
getReservationPurchaseRecommendation_paymentOption :: Lens.Lens' GetReservationPurchaseRecommendation (Prelude.Maybe PaymentOption)
getReservationPurchaseRecommendation_paymentOption :: Lens' GetReservationPurchaseRecommendation (Maybe PaymentOption)
getReservationPurchaseRecommendation_paymentOption = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Maybe PaymentOption
paymentOption :: Maybe PaymentOption
$sel:paymentOption:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe PaymentOption
paymentOption} -> Maybe PaymentOption
paymentOption) (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Maybe PaymentOption
a -> GetReservationPurchaseRecommendation
s {$sel:paymentOption:GetReservationPurchaseRecommendation' :: Maybe PaymentOption
paymentOption = Maybe PaymentOption
a} :: GetReservationPurchaseRecommendation)

-- | The hardware specifications for the service instances that you want
-- recommendations for, such as standard or convertible Amazon EC2
-- instances.
getReservationPurchaseRecommendation_serviceSpecification :: Lens.Lens' GetReservationPurchaseRecommendation (Prelude.Maybe ServiceSpecification)
getReservationPurchaseRecommendation_serviceSpecification :: Lens'
  GetReservationPurchaseRecommendation (Maybe ServiceSpecification)
getReservationPurchaseRecommendation_serviceSpecification = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Maybe ServiceSpecification
serviceSpecification :: Maybe ServiceSpecification
$sel:serviceSpecification:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe ServiceSpecification
serviceSpecification} -> Maybe ServiceSpecification
serviceSpecification) (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Maybe ServiceSpecification
a -> GetReservationPurchaseRecommendation
s {$sel:serviceSpecification:GetReservationPurchaseRecommendation' :: Maybe ServiceSpecification
serviceSpecification = Maybe ServiceSpecification
a} :: GetReservationPurchaseRecommendation)

-- | The reservation term that you want recommendations for.
getReservationPurchaseRecommendation_termInYears :: Lens.Lens' GetReservationPurchaseRecommendation (Prelude.Maybe TermInYears)
getReservationPurchaseRecommendation_termInYears :: Lens' GetReservationPurchaseRecommendation (Maybe TermInYears)
getReservationPurchaseRecommendation_termInYears = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Maybe TermInYears
termInYears :: Maybe TermInYears
$sel:termInYears:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe TermInYears
termInYears} -> Maybe TermInYears
termInYears) (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Maybe TermInYears
a -> GetReservationPurchaseRecommendation
s {$sel:termInYears:GetReservationPurchaseRecommendation' :: Maybe TermInYears
termInYears = Maybe TermInYears
a} :: GetReservationPurchaseRecommendation)

-- | The specific service that you want recommendations for.
getReservationPurchaseRecommendation_service :: Lens.Lens' GetReservationPurchaseRecommendation Prelude.Text
getReservationPurchaseRecommendation_service :: Lens' GetReservationPurchaseRecommendation Text
getReservationPurchaseRecommendation_service = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendation' {Text
service :: Text
$sel:service:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Text
service} -> Text
service) (\s :: GetReservationPurchaseRecommendation
s@GetReservationPurchaseRecommendation' {} Text
a -> GetReservationPurchaseRecommendation
s {$sel:service:GetReservationPurchaseRecommendation' :: Text
service = Text
a} :: GetReservationPurchaseRecommendation)

instance
  Core.AWSRequest
    GetReservationPurchaseRecommendation
  where
  type
    AWSResponse GetReservationPurchaseRecommendation =
      GetReservationPurchaseRecommendationResponse
  request :: (Service -> Service)
-> GetReservationPurchaseRecommendation
-> Request GetReservationPurchaseRecommendation
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetReservationPurchaseRecommendation
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse GetReservationPurchaseRecommendation)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe ReservationPurchaseRecommendationMetadata
-> Maybe Text
-> Maybe [ReservationPurchaseRecommendation]
-> Int
-> GetReservationPurchaseRecommendationResponse
GetReservationPurchaseRecommendationResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Metadata")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"NextPageToken")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Recommendations"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            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
    GetReservationPurchaseRecommendation
  where
  hashWithSalt :: Int -> GetReservationPurchaseRecommendation -> Int
hashWithSalt
    Int
_salt
    GetReservationPurchaseRecommendation' {Maybe Natural
Maybe Text
Maybe AccountScope
Maybe LookbackPeriodInDays
Maybe PaymentOption
Maybe ServiceSpecification
Maybe Expression
Maybe TermInYears
Text
service :: Text
termInYears :: Maybe TermInYears
serviceSpecification :: Maybe ServiceSpecification
paymentOption :: Maybe PaymentOption
pageSize :: Maybe Natural
nextPageToken :: Maybe Text
lookbackPeriodInDays :: Maybe LookbackPeriodInDays
filter' :: Maybe Expression
accountScope :: Maybe AccountScope
accountId :: Maybe Text
$sel:service:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Text
$sel:termInYears:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe TermInYears
$sel:serviceSpecification:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe ServiceSpecification
$sel:paymentOption:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe PaymentOption
$sel:pageSize:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Natural
$sel:nextPageToken:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Text
$sel:lookbackPeriodInDays:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe LookbackPeriodInDays
$sel:filter':GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Expression
$sel:accountScope:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe AccountScope
$sel:accountId:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
accountId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AccountScope
accountScope
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Expression
filter'
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LookbackPeriodInDays
lookbackPeriodInDays
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextPageToken
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
pageSize
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PaymentOption
paymentOption
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ServiceSpecification
serviceSpecification
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TermInYears
termInYears
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
service

instance
  Prelude.NFData
    GetReservationPurchaseRecommendation
  where
  rnf :: GetReservationPurchaseRecommendation -> ()
rnf GetReservationPurchaseRecommendation' {Maybe Natural
Maybe Text
Maybe AccountScope
Maybe LookbackPeriodInDays
Maybe PaymentOption
Maybe ServiceSpecification
Maybe Expression
Maybe TermInYears
Text
service :: Text
termInYears :: Maybe TermInYears
serviceSpecification :: Maybe ServiceSpecification
paymentOption :: Maybe PaymentOption
pageSize :: Maybe Natural
nextPageToken :: Maybe Text
lookbackPeriodInDays :: Maybe LookbackPeriodInDays
filter' :: Maybe Expression
accountScope :: Maybe AccountScope
accountId :: Maybe Text
$sel:service:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Text
$sel:termInYears:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe TermInYears
$sel:serviceSpecification:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe ServiceSpecification
$sel:paymentOption:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe PaymentOption
$sel:pageSize:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Natural
$sel:nextPageToken:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Text
$sel:lookbackPeriodInDays:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe LookbackPeriodInDays
$sel:filter':GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Expression
$sel:accountScope:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe AccountScope
$sel:accountId:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
accountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AccountScope
accountScope
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Expression
filter'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LookbackPeriodInDays
lookbackPeriodInDays
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextPageToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
pageSize
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PaymentOption
paymentOption
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ServiceSpecification
serviceSpecification
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TermInYears
termInYears
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
service

instance
  Data.ToHeaders
    GetReservationPurchaseRecommendation
  where
  toHeaders :: GetReservationPurchaseRecommendation -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"AWSInsightsIndexService.GetReservationPurchaseRecommendation" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance
  Data.ToJSON
    GetReservationPurchaseRecommendation
  where
  toJSON :: GetReservationPurchaseRecommendation -> Value
toJSON GetReservationPurchaseRecommendation' {Maybe Natural
Maybe Text
Maybe AccountScope
Maybe LookbackPeriodInDays
Maybe PaymentOption
Maybe ServiceSpecification
Maybe Expression
Maybe TermInYears
Text
service :: Text
termInYears :: Maybe TermInYears
serviceSpecification :: Maybe ServiceSpecification
paymentOption :: Maybe PaymentOption
pageSize :: Maybe Natural
nextPageToken :: Maybe Text
lookbackPeriodInDays :: Maybe LookbackPeriodInDays
filter' :: Maybe Expression
accountScope :: Maybe AccountScope
accountId :: Maybe Text
$sel:service:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Text
$sel:termInYears:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe TermInYears
$sel:serviceSpecification:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe ServiceSpecification
$sel:paymentOption:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe PaymentOption
$sel:pageSize:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Natural
$sel:nextPageToken:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Text
$sel:lookbackPeriodInDays:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe LookbackPeriodInDays
$sel:filter':GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Expression
$sel:accountScope:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe AccountScope
$sel:accountId:GetReservationPurchaseRecommendation' :: GetReservationPurchaseRecommendation -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AccountId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
accountId,
            (Key
"AccountScope" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AccountScope
accountScope,
            (Key
"Filter" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Expression
filter',
            (Key
"LookbackPeriodInDays" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe LookbackPeriodInDays
lookbackPeriodInDays,
            (Key
"NextPageToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
nextPageToken,
            (Key
"PageSize" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
pageSize,
            (Key
"PaymentOption" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe PaymentOption
paymentOption,
            (Key
"ServiceSpecification" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ServiceSpecification
serviceSpecification,
            (Key
"TermInYears" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe TermInYears
termInYears,
            forall a. a -> Maybe a
Prelude.Just (Key
"Service" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
service)
          ]
      )

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

instance
  Data.ToQuery
    GetReservationPurchaseRecommendation
  where
  toQuery :: GetReservationPurchaseRecommendation -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newGetReservationPurchaseRecommendationResponse' smart constructor.
data GetReservationPurchaseRecommendationResponse = GetReservationPurchaseRecommendationResponse'
  { -- | Information about this specific recommendation call, such as the time
    -- stamp for when Cost Explorer generated this recommendation.
    GetReservationPurchaseRecommendationResponse
-> Maybe ReservationPurchaseRecommendationMetadata
metadata :: Prelude.Maybe ReservationPurchaseRecommendationMetadata,
    -- | The pagination token for the next set of retrievable results.
    GetReservationPurchaseRecommendationResponse -> Maybe Text
nextPageToken :: Prelude.Maybe Prelude.Text,
    -- | Recommendations for reservations to purchase.
    GetReservationPurchaseRecommendationResponse
-> Maybe [ReservationPurchaseRecommendation]
recommendations :: Prelude.Maybe [ReservationPurchaseRecommendation],
    -- | The response's http status code.
    GetReservationPurchaseRecommendationResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetReservationPurchaseRecommendationResponse
-> GetReservationPurchaseRecommendationResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetReservationPurchaseRecommendationResponse
-> GetReservationPurchaseRecommendationResponse -> Bool
$c/= :: GetReservationPurchaseRecommendationResponse
-> GetReservationPurchaseRecommendationResponse -> Bool
== :: GetReservationPurchaseRecommendationResponse
-> GetReservationPurchaseRecommendationResponse -> Bool
$c== :: GetReservationPurchaseRecommendationResponse
-> GetReservationPurchaseRecommendationResponse -> Bool
Prelude.Eq, ReadPrec [GetReservationPurchaseRecommendationResponse]
ReadPrec GetReservationPurchaseRecommendationResponse
Int -> ReadS GetReservationPurchaseRecommendationResponse
ReadS [GetReservationPurchaseRecommendationResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetReservationPurchaseRecommendationResponse]
$creadListPrec :: ReadPrec [GetReservationPurchaseRecommendationResponse]
readPrec :: ReadPrec GetReservationPurchaseRecommendationResponse
$creadPrec :: ReadPrec GetReservationPurchaseRecommendationResponse
readList :: ReadS [GetReservationPurchaseRecommendationResponse]
$creadList :: ReadS [GetReservationPurchaseRecommendationResponse]
readsPrec :: Int -> ReadS GetReservationPurchaseRecommendationResponse
$creadsPrec :: Int -> ReadS GetReservationPurchaseRecommendationResponse
Prelude.Read, Int -> GetReservationPurchaseRecommendationResponse -> ShowS
[GetReservationPurchaseRecommendationResponse] -> ShowS
GetReservationPurchaseRecommendationResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetReservationPurchaseRecommendationResponse] -> ShowS
$cshowList :: [GetReservationPurchaseRecommendationResponse] -> ShowS
show :: GetReservationPurchaseRecommendationResponse -> String
$cshow :: GetReservationPurchaseRecommendationResponse -> String
showsPrec :: Int -> GetReservationPurchaseRecommendationResponse -> ShowS
$cshowsPrec :: Int -> GetReservationPurchaseRecommendationResponse -> ShowS
Prelude.Show, forall x.
Rep GetReservationPurchaseRecommendationResponse x
-> GetReservationPurchaseRecommendationResponse
forall x.
GetReservationPurchaseRecommendationResponse
-> Rep GetReservationPurchaseRecommendationResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetReservationPurchaseRecommendationResponse x
-> GetReservationPurchaseRecommendationResponse
$cfrom :: forall x.
GetReservationPurchaseRecommendationResponse
-> Rep GetReservationPurchaseRecommendationResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetReservationPurchaseRecommendationResponse' 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:
--
-- 'metadata', 'getReservationPurchaseRecommendationResponse_metadata' - Information about this specific recommendation call, such as the time
-- stamp for when Cost Explorer generated this recommendation.
--
-- 'nextPageToken', 'getReservationPurchaseRecommendationResponse_nextPageToken' - The pagination token for the next set of retrievable results.
--
-- 'recommendations', 'getReservationPurchaseRecommendationResponse_recommendations' - Recommendations for reservations to purchase.
--
-- 'httpStatus', 'getReservationPurchaseRecommendationResponse_httpStatus' - The response's http status code.
newGetReservationPurchaseRecommendationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetReservationPurchaseRecommendationResponse
newGetReservationPurchaseRecommendationResponse :: Int -> GetReservationPurchaseRecommendationResponse
newGetReservationPurchaseRecommendationResponse
  Int
pHttpStatus_ =
    GetReservationPurchaseRecommendationResponse'
      { $sel:metadata:GetReservationPurchaseRecommendationResponse' :: Maybe ReservationPurchaseRecommendationMetadata
metadata =
          forall a. Maybe a
Prelude.Nothing,
        $sel:nextPageToken:GetReservationPurchaseRecommendationResponse' :: Maybe Text
nextPageToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:recommendations:GetReservationPurchaseRecommendationResponse' :: Maybe [ReservationPurchaseRecommendation]
recommendations =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetReservationPurchaseRecommendationResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | Information about this specific recommendation call, such as the time
-- stamp for when Cost Explorer generated this recommendation.
getReservationPurchaseRecommendationResponse_metadata :: Lens.Lens' GetReservationPurchaseRecommendationResponse (Prelude.Maybe ReservationPurchaseRecommendationMetadata)
getReservationPurchaseRecommendationResponse_metadata :: Lens'
  GetReservationPurchaseRecommendationResponse
  (Maybe ReservationPurchaseRecommendationMetadata)
getReservationPurchaseRecommendationResponse_metadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendationResponse' {Maybe ReservationPurchaseRecommendationMetadata
metadata :: Maybe ReservationPurchaseRecommendationMetadata
$sel:metadata:GetReservationPurchaseRecommendationResponse' :: GetReservationPurchaseRecommendationResponse
-> Maybe ReservationPurchaseRecommendationMetadata
metadata} -> Maybe ReservationPurchaseRecommendationMetadata
metadata) (\s :: GetReservationPurchaseRecommendationResponse
s@GetReservationPurchaseRecommendationResponse' {} Maybe ReservationPurchaseRecommendationMetadata
a -> GetReservationPurchaseRecommendationResponse
s {$sel:metadata:GetReservationPurchaseRecommendationResponse' :: Maybe ReservationPurchaseRecommendationMetadata
metadata = Maybe ReservationPurchaseRecommendationMetadata
a} :: GetReservationPurchaseRecommendationResponse)

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

-- | Recommendations for reservations to purchase.
getReservationPurchaseRecommendationResponse_recommendations :: Lens.Lens' GetReservationPurchaseRecommendationResponse (Prelude.Maybe [ReservationPurchaseRecommendation])
getReservationPurchaseRecommendationResponse_recommendations :: Lens'
  GetReservationPurchaseRecommendationResponse
  (Maybe [ReservationPurchaseRecommendation])
getReservationPurchaseRecommendationResponse_recommendations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendationResponse' {Maybe [ReservationPurchaseRecommendation]
recommendations :: Maybe [ReservationPurchaseRecommendation]
$sel:recommendations:GetReservationPurchaseRecommendationResponse' :: GetReservationPurchaseRecommendationResponse
-> Maybe [ReservationPurchaseRecommendation]
recommendations} -> Maybe [ReservationPurchaseRecommendation]
recommendations) (\s :: GetReservationPurchaseRecommendationResponse
s@GetReservationPurchaseRecommendationResponse' {} Maybe [ReservationPurchaseRecommendation]
a -> GetReservationPurchaseRecommendationResponse
s {$sel:recommendations:GetReservationPurchaseRecommendationResponse' :: Maybe [ReservationPurchaseRecommendation]
recommendations = Maybe [ReservationPurchaseRecommendation]
a} :: GetReservationPurchaseRecommendationResponse) 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 response's http status code.
getReservationPurchaseRecommendationResponse_httpStatus :: Lens.Lens' GetReservationPurchaseRecommendationResponse Prelude.Int
getReservationPurchaseRecommendationResponse_httpStatus :: Lens' GetReservationPurchaseRecommendationResponse Int
getReservationPurchaseRecommendationResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetReservationPurchaseRecommendationResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetReservationPurchaseRecommendationResponse' :: GetReservationPurchaseRecommendationResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetReservationPurchaseRecommendationResponse
s@GetReservationPurchaseRecommendationResponse' {} Int
a -> GetReservationPurchaseRecommendationResponse
s {$sel:httpStatus:GetReservationPurchaseRecommendationResponse' :: Int
httpStatus = Int
a} :: GetReservationPurchaseRecommendationResponse)

instance
  Prelude.NFData
    GetReservationPurchaseRecommendationResponse
  where
  rnf :: GetReservationPurchaseRecommendationResponse -> ()
rnf GetReservationPurchaseRecommendationResponse' {Int
Maybe [ReservationPurchaseRecommendation]
Maybe Text
Maybe ReservationPurchaseRecommendationMetadata
httpStatus :: Int
recommendations :: Maybe [ReservationPurchaseRecommendation]
nextPageToken :: Maybe Text
metadata :: Maybe ReservationPurchaseRecommendationMetadata
$sel:httpStatus:GetReservationPurchaseRecommendationResponse' :: GetReservationPurchaseRecommendationResponse -> Int
$sel:recommendations:GetReservationPurchaseRecommendationResponse' :: GetReservationPurchaseRecommendationResponse
-> Maybe [ReservationPurchaseRecommendation]
$sel:nextPageToken:GetReservationPurchaseRecommendationResponse' :: GetReservationPurchaseRecommendationResponse -> Maybe Text
$sel:metadata:GetReservationPurchaseRecommendationResponse' :: GetReservationPurchaseRecommendationResponse
-> Maybe ReservationPurchaseRecommendationMetadata
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ReservationPurchaseRecommendationMetadata
metadata
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextPageToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [ReservationPurchaseRecommendation]
recommendations
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus