{-# 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.GetSavingsPlansPurchaseRecommendation
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves your request parameters, Savings Plan Recommendations Summary
-- and Details.
module Amazonka.CostExplorer.GetSavingsPlansPurchaseRecommendation
  ( -- * Creating a Request
    GetSavingsPlansPurchaseRecommendation (..),
    newGetSavingsPlansPurchaseRecommendation,

    -- * Request Lenses
    getSavingsPlansPurchaseRecommendation_nextPageToken,
    getSavingsPlansPurchaseRecommendation_accountScope,
    getSavingsPlansPurchaseRecommendation_filter,
    getSavingsPlansPurchaseRecommendation_pageSize,
    getSavingsPlansPurchaseRecommendation_savingsPlansType,
    getSavingsPlansPurchaseRecommendation_termInYears,
    getSavingsPlansPurchaseRecommendation_paymentOption,
    getSavingsPlansPurchaseRecommendation_lookbackPeriodInDays,

    -- * Destructuring the Response
    GetSavingsPlansPurchaseRecommendationResponse (..),
    newGetSavingsPlansPurchaseRecommendationResponse,

    -- * Response Lenses
    getSavingsPlansPurchaseRecommendationResponse_nextPageToken,
    getSavingsPlansPurchaseRecommendationResponse_savingsPlansPurchaseRecommendation,
    getSavingsPlansPurchaseRecommendationResponse_metadata,
    getSavingsPlansPurchaseRecommendationResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetSavingsPlansPurchaseRecommendation' smart constructor.
data GetSavingsPlansPurchaseRecommendation = GetSavingsPlansPurchaseRecommendation'
  { -- | The token to retrieve the next set of results. Amazon Web Services
    -- provides the token when the response from a previous call has more
    -- results than the maximum page size.
    GetSavingsPlansPurchaseRecommendation -> Maybe Text
nextPageToken :: 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.
    GetSavingsPlansPurchaseRecommendation -> Maybe AccountScope
accountScope :: Prelude.Maybe AccountScope,
    -- | You can filter your recommendations by Account ID with the
    -- @LINKED_ACCOUNT@ dimension. To filter your recommendations by Account
    -- ID, specify @Key@ as @LINKED_ACCOUNT@ and @Value@ as the comma-separated
    -- Acount ID(s) for which you want to see Savings Plans purchase
    -- recommendations.
    --
    -- For GetSavingsPlansPurchaseRecommendation, the @Filter@ does not include
    -- @CostCategories@ or @Tags@. It only includes @Dimensions@. With
    -- @Dimensions@, @Key@ must be @LINKED_ACCOUNT@ and @Value@ can be a single
    -- Account ID or multiple comma-separated Account IDs for which you want to
    -- see Savings Plans Purchase Recommendations. @AND@ and @OR@ operators are
    -- not supported.
    GetSavingsPlansPurchaseRecommendation -> Maybe Expression
filter' :: Prelude.Maybe Expression,
    -- | The number of recommendations that you want returned in a single
    -- response object.
    GetSavingsPlansPurchaseRecommendation -> Maybe Natural
pageSize :: Prelude.Maybe Prelude.Natural,
    -- | The Savings Plans recommendation type requested.
    GetSavingsPlansPurchaseRecommendation -> SupportedSavingsPlansType
savingsPlansType :: SupportedSavingsPlansType,
    -- | The savings plan recommendation term used to generate these
    -- recommendations.
    GetSavingsPlansPurchaseRecommendation -> TermInYears
termInYears :: TermInYears,
    -- | The payment option used to generate these recommendations.
    GetSavingsPlansPurchaseRecommendation -> PaymentOption
paymentOption :: PaymentOption,
    -- | The lookback period used to generate the recommendation.
    GetSavingsPlansPurchaseRecommendation -> LookbackPeriodInDays
lookbackPeriodInDays :: LookbackPeriodInDays
  }
  deriving (GetSavingsPlansPurchaseRecommendation
-> GetSavingsPlansPurchaseRecommendation -> Bool
(GetSavingsPlansPurchaseRecommendation
 -> GetSavingsPlansPurchaseRecommendation -> Bool)
-> (GetSavingsPlansPurchaseRecommendation
    -> GetSavingsPlansPurchaseRecommendation -> Bool)
-> Eq GetSavingsPlansPurchaseRecommendation
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetSavingsPlansPurchaseRecommendation
-> GetSavingsPlansPurchaseRecommendation -> Bool
$c/= :: GetSavingsPlansPurchaseRecommendation
-> GetSavingsPlansPurchaseRecommendation -> Bool
== :: GetSavingsPlansPurchaseRecommendation
-> GetSavingsPlansPurchaseRecommendation -> Bool
$c== :: GetSavingsPlansPurchaseRecommendation
-> GetSavingsPlansPurchaseRecommendation -> Bool
Prelude.Eq, ReadPrec [GetSavingsPlansPurchaseRecommendation]
ReadPrec GetSavingsPlansPurchaseRecommendation
Int -> ReadS GetSavingsPlansPurchaseRecommendation
ReadS [GetSavingsPlansPurchaseRecommendation]
(Int -> ReadS GetSavingsPlansPurchaseRecommendation)
-> ReadS [GetSavingsPlansPurchaseRecommendation]
-> ReadPrec GetSavingsPlansPurchaseRecommendation
-> ReadPrec [GetSavingsPlansPurchaseRecommendation]
-> Read GetSavingsPlansPurchaseRecommendation
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetSavingsPlansPurchaseRecommendation]
$creadListPrec :: ReadPrec [GetSavingsPlansPurchaseRecommendation]
readPrec :: ReadPrec GetSavingsPlansPurchaseRecommendation
$creadPrec :: ReadPrec GetSavingsPlansPurchaseRecommendation
readList :: ReadS [GetSavingsPlansPurchaseRecommendation]
$creadList :: ReadS [GetSavingsPlansPurchaseRecommendation]
readsPrec :: Int -> ReadS GetSavingsPlansPurchaseRecommendation
$creadsPrec :: Int -> ReadS GetSavingsPlansPurchaseRecommendation
Prelude.Read, Int -> GetSavingsPlansPurchaseRecommendation -> ShowS
[GetSavingsPlansPurchaseRecommendation] -> ShowS
GetSavingsPlansPurchaseRecommendation -> String
(Int -> GetSavingsPlansPurchaseRecommendation -> ShowS)
-> (GetSavingsPlansPurchaseRecommendation -> String)
-> ([GetSavingsPlansPurchaseRecommendation] -> ShowS)
-> Show GetSavingsPlansPurchaseRecommendation
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetSavingsPlansPurchaseRecommendation] -> ShowS
$cshowList :: [GetSavingsPlansPurchaseRecommendation] -> ShowS
show :: GetSavingsPlansPurchaseRecommendation -> String
$cshow :: GetSavingsPlansPurchaseRecommendation -> String
showsPrec :: Int -> GetSavingsPlansPurchaseRecommendation -> ShowS
$cshowsPrec :: Int -> GetSavingsPlansPurchaseRecommendation -> ShowS
Prelude.Show, (forall x.
 GetSavingsPlansPurchaseRecommendation
 -> Rep GetSavingsPlansPurchaseRecommendation x)
-> (forall x.
    Rep GetSavingsPlansPurchaseRecommendation x
    -> GetSavingsPlansPurchaseRecommendation)
-> Generic GetSavingsPlansPurchaseRecommendation
forall x.
Rep GetSavingsPlansPurchaseRecommendation x
-> GetSavingsPlansPurchaseRecommendation
forall x.
GetSavingsPlansPurchaseRecommendation
-> Rep GetSavingsPlansPurchaseRecommendation x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetSavingsPlansPurchaseRecommendation x
-> GetSavingsPlansPurchaseRecommendation
$cfrom :: forall x.
GetSavingsPlansPurchaseRecommendation
-> Rep GetSavingsPlansPurchaseRecommendation x
Prelude.Generic)

-- |
-- Create a value of 'GetSavingsPlansPurchaseRecommendation' 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:
--
-- 'nextPageToken', 'getSavingsPlansPurchaseRecommendation_nextPageToken' - The token to retrieve the next set of results. Amazon Web Services
-- provides the token when the response from a previous call has more
-- results than the maximum page size.
--
-- 'accountScope', 'getSavingsPlansPurchaseRecommendation_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'', 'getSavingsPlansPurchaseRecommendation_filter' - You can filter your recommendations by Account ID with the
-- @LINKED_ACCOUNT@ dimension. To filter your recommendations by Account
-- ID, specify @Key@ as @LINKED_ACCOUNT@ and @Value@ as the comma-separated
-- Acount ID(s) for which you want to see Savings Plans purchase
-- recommendations.
--
-- For GetSavingsPlansPurchaseRecommendation, the @Filter@ does not include
-- @CostCategories@ or @Tags@. It only includes @Dimensions@. With
-- @Dimensions@, @Key@ must be @LINKED_ACCOUNT@ and @Value@ can be a single
-- Account ID or multiple comma-separated Account IDs for which you want to
-- see Savings Plans Purchase Recommendations. @AND@ and @OR@ operators are
-- not supported.
--
-- 'pageSize', 'getSavingsPlansPurchaseRecommendation_pageSize' - The number of recommendations that you want returned in a single
-- response object.
--
-- 'savingsPlansType', 'getSavingsPlansPurchaseRecommendation_savingsPlansType' - The Savings Plans recommendation type requested.
--
-- 'termInYears', 'getSavingsPlansPurchaseRecommendation_termInYears' - The savings plan recommendation term used to generate these
-- recommendations.
--
-- 'paymentOption', 'getSavingsPlansPurchaseRecommendation_paymentOption' - The payment option used to generate these recommendations.
--
-- 'lookbackPeriodInDays', 'getSavingsPlansPurchaseRecommendation_lookbackPeriodInDays' - The lookback period used to generate the recommendation.
newGetSavingsPlansPurchaseRecommendation ::
  -- | 'savingsPlansType'
  SupportedSavingsPlansType ->
  -- | 'termInYears'
  TermInYears ->
  -- | 'paymentOption'
  PaymentOption ->
  -- | 'lookbackPeriodInDays'
  LookbackPeriodInDays ->
  GetSavingsPlansPurchaseRecommendation
newGetSavingsPlansPurchaseRecommendation :: SupportedSavingsPlansType
-> TermInYears
-> PaymentOption
-> LookbackPeriodInDays
-> GetSavingsPlansPurchaseRecommendation
newGetSavingsPlansPurchaseRecommendation
  SupportedSavingsPlansType
pSavingsPlansType_
  TermInYears
pTermInYears_
  PaymentOption
pPaymentOption_
  LookbackPeriodInDays
pLookbackPeriodInDays_ =
    GetSavingsPlansPurchaseRecommendation' :: Maybe Text
-> Maybe AccountScope
-> Maybe Expression
-> Maybe Natural
-> SupportedSavingsPlansType
-> TermInYears
-> PaymentOption
-> LookbackPeriodInDays
-> GetSavingsPlansPurchaseRecommendation
GetSavingsPlansPurchaseRecommendation'
      { $sel:nextPageToken:GetSavingsPlansPurchaseRecommendation' :: Maybe Text
nextPageToken =
          Maybe Text
forall a. Maybe a
Prelude.Nothing,
        $sel:accountScope:GetSavingsPlansPurchaseRecommendation' :: Maybe AccountScope
accountScope = Maybe AccountScope
forall a. Maybe a
Prelude.Nothing,
        $sel:filter':GetSavingsPlansPurchaseRecommendation' :: Maybe Expression
filter' = Maybe Expression
forall a. Maybe a
Prelude.Nothing,
        $sel:pageSize:GetSavingsPlansPurchaseRecommendation' :: Maybe Natural
pageSize = Maybe Natural
forall a. Maybe a
Prelude.Nothing,
        $sel:savingsPlansType:GetSavingsPlansPurchaseRecommendation' :: SupportedSavingsPlansType
savingsPlansType =
          SupportedSavingsPlansType
pSavingsPlansType_,
        $sel:termInYears:GetSavingsPlansPurchaseRecommendation' :: TermInYears
termInYears = TermInYears
pTermInYears_,
        $sel:paymentOption:GetSavingsPlansPurchaseRecommendation' :: PaymentOption
paymentOption = PaymentOption
pPaymentOption_,
        $sel:lookbackPeriodInDays:GetSavingsPlansPurchaseRecommendation' :: LookbackPeriodInDays
lookbackPeriodInDays =
          LookbackPeriodInDays
pLookbackPeriodInDays_
      }

-- | The token to retrieve the next set of results. Amazon Web Services
-- provides the token when the response from a previous call has more
-- results than the maximum page size.
getSavingsPlansPurchaseRecommendation_nextPageToken :: Lens.Lens' GetSavingsPlansPurchaseRecommendation (Prelude.Maybe Prelude.Text)
getSavingsPlansPurchaseRecommendation_nextPageToken :: (Maybe Text -> f (Maybe Text))
-> GetSavingsPlansPurchaseRecommendation
-> f GetSavingsPlansPurchaseRecommendation
getSavingsPlansPurchaseRecommendation_nextPageToken = (GetSavingsPlansPurchaseRecommendation -> Maybe Text)
-> (GetSavingsPlansPurchaseRecommendation
    -> Maybe Text -> GetSavingsPlansPurchaseRecommendation)
-> Lens
     GetSavingsPlansPurchaseRecommendation
     GetSavingsPlansPurchaseRecommendation
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendation' {Maybe Text
nextPageToken :: Maybe Text
$sel:nextPageToken:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> Maybe Text
nextPageToken} -> Maybe Text
nextPageToken) (\s :: GetSavingsPlansPurchaseRecommendation
s@GetSavingsPlansPurchaseRecommendation' {} Maybe Text
a -> GetSavingsPlansPurchaseRecommendation
s {$sel:nextPageToken:GetSavingsPlansPurchaseRecommendation' :: Maybe Text
nextPageToken = Maybe Text
a} :: GetSavingsPlansPurchaseRecommendation)

-- | 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.
getSavingsPlansPurchaseRecommendation_accountScope :: Lens.Lens' GetSavingsPlansPurchaseRecommendation (Prelude.Maybe AccountScope)
getSavingsPlansPurchaseRecommendation_accountScope :: (Maybe AccountScope -> f (Maybe AccountScope))
-> GetSavingsPlansPurchaseRecommendation
-> f GetSavingsPlansPurchaseRecommendation
getSavingsPlansPurchaseRecommendation_accountScope = (GetSavingsPlansPurchaseRecommendation -> Maybe AccountScope)
-> (GetSavingsPlansPurchaseRecommendation
    -> Maybe AccountScope -> GetSavingsPlansPurchaseRecommendation)
-> Lens
     GetSavingsPlansPurchaseRecommendation
     GetSavingsPlansPurchaseRecommendation
     (Maybe AccountScope)
     (Maybe AccountScope)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendation' {Maybe AccountScope
accountScope :: Maybe AccountScope
$sel:accountScope:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> Maybe AccountScope
accountScope} -> Maybe AccountScope
accountScope) (\s :: GetSavingsPlansPurchaseRecommendation
s@GetSavingsPlansPurchaseRecommendation' {} Maybe AccountScope
a -> GetSavingsPlansPurchaseRecommendation
s {$sel:accountScope:GetSavingsPlansPurchaseRecommendation' :: Maybe AccountScope
accountScope = Maybe AccountScope
a} :: GetSavingsPlansPurchaseRecommendation)

-- | You can filter your recommendations by Account ID with the
-- @LINKED_ACCOUNT@ dimension. To filter your recommendations by Account
-- ID, specify @Key@ as @LINKED_ACCOUNT@ and @Value@ as the comma-separated
-- Acount ID(s) for which you want to see Savings Plans purchase
-- recommendations.
--
-- For GetSavingsPlansPurchaseRecommendation, the @Filter@ does not include
-- @CostCategories@ or @Tags@. It only includes @Dimensions@. With
-- @Dimensions@, @Key@ must be @LINKED_ACCOUNT@ and @Value@ can be a single
-- Account ID or multiple comma-separated Account IDs for which you want to
-- see Savings Plans Purchase Recommendations. @AND@ and @OR@ operators are
-- not supported.
getSavingsPlansPurchaseRecommendation_filter :: Lens.Lens' GetSavingsPlansPurchaseRecommendation (Prelude.Maybe Expression)
getSavingsPlansPurchaseRecommendation_filter :: (Maybe Expression -> f (Maybe Expression))
-> GetSavingsPlansPurchaseRecommendation
-> f GetSavingsPlansPurchaseRecommendation
getSavingsPlansPurchaseRecommendation_filter = (GetSavingsPlansPurchaseRecommendation -> Maybe Expression)
-> (GetSavingsPlansPurchaseRecommendation
    -> Maybe Expression -> GetSavingsPlansPurchaseRecommendation)
-> Lens
     GetSavingsPlansPurchaseRecommendation
     GetSavingsPlansPurchaseRecommendation
     (Maybe Expression)
     (Maybe Expression)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendation' {Maybe Expression
filter' :: Maybe Expression
$sel:filter':GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> Maybe Expression
filter'} -> Maybe Expression
filter') (\s :: GetSavingsPlansPurchaseRecommendation
s@GetSavingsPlansPurchaseRecommendation' {} Maybe Expression
a -> GetSavingsPlansPurchaseRecommendation
s {$sel:filter':GetSavingsPlansPurchaseRecommendation' :: Maybe Expression
filter' = Maybe Expression
a} :: GetSavingsPlansPurchaseRecommendation)

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

-- | The Savings Plans recommendation type requested.
getSavingsPlansPurchaseRecommendation_savingsPlansType :: Lens.Lens' GetSavingsPlansPurchaseRecommendation SupportedSavingsPlansType
getSavingsPlansPurchaseRecommendation_savingsPlansType :: (SupportedSavingsPlansType -> f SupportedSavingsPlansType)
-> GetSavingsPlansPurchaseRecommendation
-> f GetSavingsPlansPurchaseRecommendation
getSavingsPlansPurchaseRecommendation_savingsPlansType = (GetSavingsPlansPurchaseRecommendation
 -> SupportedSavingsPlansType)
-> (GetSavingsPlansPurchaseRecommendation
    -> SupportedSavingsPlansType
    -> GetSavingsPlansPurchaseRecommendation)
-> Lens
     GetSavingsPlansPurchaseRecommendation
     GetSavingsPlansPurchaseRecommendation
     SupportedSavingsPlansType
     SupportedSavingsPlansType
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendation' {SupportedSavingsPlansType
savingsPlansType :: SupportedSavingsPlansType
$sel:savingsPlansType:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> SupportedSavingsPlansType
savingsPlansType} -> SupportedSavingsPlansType
savingsPlansType) (\s :: GetSavingsPlansPurchaseRecommendation
s@GetSavingsPlansPurchaseRecommendation' {} SupportedSavingsPlansType
a -> GetSavingsPlansPurchaseRecommendation
s {$sel:savingsPlansType:GetSavingsPlansPurchaseRecommendation' :: SupportedSavingsPlansType
savingsPlansType = SupportedSavingsPlansType
a} :: GetSavingsPlansPurchaseRecommendation)

-- | The savings plan recommendation term used to generate these
-- recommendations.
getSavingsPlansPurchaseRecommendation_termInYears :: Lens.Lens' GetSavingsPlansPurchaseRecommendation TermInYears
getSavingsPlansPurchaseRecommendation_termInYears :: (TermInYears -> f TermInYears)
-> GetSavingsPlansPurchaseRecommendation
-> f GetSavingsPlansPurchaseRecommendation
getSavingsPlansPurchaseRecommendation_termInYears = (GetSavingsPlansPurchaseRecommendation -> TermInYears)
-> (GetSavingsPlansPurchaseRecommendation
    -> TermInYears -> GetSavingsPlansPurchaseRecommendation)
-> Lens
     GetSavingsPlansPurchaseRecommendation
     GetSavingsPlansPurchaseRecommendation
     TermInYears
     TermInYears
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendation' {TermInYears
termInYears :: TermInYears
$sel:termInYears:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> TermInYears
termInYears} -> TermInYears
termInYears) (\s :: GetSavingsPlansPurchaseRecommendation
s@GetSavingsPlansPurchaseRecommendation' {} TermInYears
a -> GetSavingsPlansPurchaseRecommendation
s {$sel:termInYears:GetSavingsPlansPurchaseRecommendation' :: TermInYears
termInYears = TermInYears
a} :: GetSavingsPlansPurchaseRecommendation)

-- | The payment option used to generate these recommendations.
getSavingsPlansPurchaseRecommendation_paymentOption :: Lens.Lens' GetSavingsPlansPurchaseRecommendation PaymentOption
getSavingsPlansPurchaseRecommendation_paymentOption :: (PaymentOption -> f PaymentOption)
-> GetSavingsPlansPurchaseRecommendation
-> f GetSavingsPlansPurchaseRecommendation
getSavingsPlansPurchaseRecommendation_paymentOption = (GetSavingsPlansPurchaseRecommendation -> PaymentOption)
-> (GetSavingsPlansPurchaseRecommendation
    -> PaymentOption -> GetSavingsPlansPurchaseRecommendation)
-> Lens
     GetSavingsPlansPurchaseRecommendation
     GetSavingsPlansPurchaseRecommendation
     PaymentOption
     PaymentOption
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendation' {PaymentOption
paymentOption :: PaymentOption
$sel:paymentOption:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> PaymentOption
paymentOption} -> PaymentOption
paymentOption) (\s :: GetSavingsPlansPurchaseRecommendation
s@GetSavingsPlansPurchaseRecommendation' {} PaymentOption
a -> GetSavingsPlansPurchaseRecommendation
s {$sel:paymentOption:GetSavingsPlansPurchaseRecommendation' :: PaymentOption
paymentOption = PaymentOption
a} :: GetSavingsPlansPurchaseRecommendation)

-- | The lookback period used to generate the recommendation.
getSavingsPlansPurchaseRecommendation_lookbackPeriodInDays :: Lens.Lens' GetSavingsPlansPurchaseRecommendation LookbackPeriodInDays
getSavingsPlansPurchaseRecommendation_lookbackPeriodInDays :: (LookbackPeriodInDays -> f LookbackPeriodInDays)
-> GetSavingsPlansPurchaseRecommendation
-> f GetSavingsPlansPurchaseRecommendation
getSavingsPlansPurchaseRecommendation_lookbackPeriodInDays = (GetSavingsPlansPurchaseRecommendation -> LookbackPeriodInDays)
-> (GetSavingsPlansPurchaseRecommendation
    -> LookbackPeriodInDays -> GetSavingsPlansPurchaseRecommendation)
-> Lens
     GetSavingsPlansPurchaseRecommendation
     GetSavingsPlansPurchaseRecommendation
     LookbackPeriodInDays
     LookbackPeriodInDays
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendation' {LookbackPeriodInDays
lookbackPeriodInDays :: LookbackPeriodInDays
$sel:lookbackPeriodInDays:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> LookbackPeriodInDays
lookbackPeriodInDays} -> LookbackPeriodInDays
lookbackPeriodInDays) (\s :: GetSavingsPlansPurchaseRecommendation
s@GetSavingsPlansPurchaseRecommendation' {} LookbackPeriodInDays
a -> GetSavingsPlansPurchaseRecommendation
s {$sel:lookbackPeriodInDays:GetSavingsPlansPurchaseRecommendation' :: LookbackPeriodInDays
lookbackPeriodInDays = LookbackPeriodInDays
a} :: GetSavingsPlansPurchaseRecommendation)

instance
  Core.AWSRequest
    GetSavingsPlansPurchaseRecommendation
  where
  type
    AWSResponse
      GetSavingsPlansPurchaseRecommendation =
      GetSavingsPlansPurchaseRecommendationResponse
  request :: GetSavingsPlansPurchaseRecommendation
-> Request GetSavingsPlansPurchaseRecommendation
request = Service
-> GetSavingsPlansPurchaseRecommendation
-> Request GetSavingsPlansPurchaseRecommendation
forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON Service
defaultService
  response :: Logger
-> Service
-> Proxy GetSavingsPlansPurchaseRecommendation
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse GetSavingsPlansPurchaseRecommendation)))
response =
    (Int
 -> ResponseHeaders
 -> Object
 -> Either
      String (AWSResponse GetSavingsPlansPurchaseRecommendation))
-> Logger
-> Service
-> Proxy GetSavingsPlansPurchaseRecommendation
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse GetSavingsPlansPurchaseRecommendation)))
forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> Logger
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe Text
-> Maybe SavingsPlansPurchaseRecommendation
-> Maybe SavingsPlansPurchaseRecommendationMetadata
-> Int
-> GetSavingsPlansPurchaseRecommendationResponse
GetSavingsPlansPurchaseRecommendationResponse'
            (Maybe Text
 -> Maybe SavingsPlansPurchaseRecommendation
 -> Maybe SavingsPlansPurchaseRecommendationMetadata
 -> Int
 -> GetSavingsPlansPurchaseRecommendationResponse)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe SavingsPlansPurchaseRecommendation
      -> Maybe SavingsPlansPurchaseRecommendationMetadata
      -> Int
      -> GetSavingsPlansPurchaseRecommendationResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Either String (Maybe Text)
forall a. FromJSON a => Object -> Text -> Either String (Maybe a)
Core..?> Text
"NextPageToken")
              Either
  String
  (Maybe SavingsPlansPurchaseRecommendation
   -> Maybe SavingsPlansPurchaseRecommendationMetadata
   -> Int
   -> GetSavingsPlansPurchaseRecommendationResponse)
-> Either String (Maybe SavingsPlansPurchaseRecommendation)
-> Either
     String
     (Maybe SavingsPlansPurchaseRecommendationMetadata
      -> Int -> GetSavingsPlansPurchaseRecommendationResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object
-> Text -> Either String (Maybe SavingsPlansPurchaseRecommendation)
forall a. FromJSON a => Object -> Text -> Either String (Maybe a)
Core..?> Text
"SavingsPlansPurchaseRecommendation")
              Either
  String
  (Maybe SavingsPlansPurchaseRecommendationMetadata
   -> Int -> GetSavingsPlansPurchaseRecommendationResponse)
-> Either String (Maybe SavingsPlansPurchaseRecommendationMetadata)
-> Either
     String (Int -> GetSavingsPlansPurchaseRecommendationResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object
-> Text
-> Either String (Maybe SavingsPlansPurchaseRecommendationMetadata)
forall a. FromJSON a => Object -> Text -> Either String (Maybe a)
Core..?> Text
"Metadata")
              Either
  String (Int -> GetSavingsPlansPurchaseRecommendationResponse)
-> Either String Int
-> Either String GetSavingsPlansPurchaseRecommendationResponse
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Int -> Either String Int
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (Int -> Int
forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    GetSavingsPlansPurchaseRecommendation

instance
  Prelude.NFData
    GetSavingsPlansPurchaseRecommendation

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

instance
  Core.ToJSON
    GetSavingsPlansPurchaseRecommendation
  where
  toJSON :: GetSavingsPlansPurchaseRecommendation -> Value
toJSON GetSavingsPlansPurchaseRecommendation' {Maybe Natural
Maybe Text
Maybe AccountScope
Maybe Expression
LookbackPeriodInDays
PaymentOption
SupportedSavingsPlansType
TermInYears
lookbackPeriodInDays :: LookbackPeriodInDays
paymentOption :: PaymentOption
termInYears :: TermInYears
savingsPlansType :: SupportedSavingsPlansType
pageSize :: Maybe Natural
filter' :: Maybe Expression
accountScope :: Maybe AccountScope
nextPageToken :: Maybe Text
$sel:lookbackPeriodInDays:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> LookbackPeriodInDays
$sel:paymentOption:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> PaymentOption
$sel:termInYears:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> TermInYears
$sel:savingsPlansType:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> SupportedSavingsPlansType
$sel:pageSize:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> Maybe Natural
$sel:filter':GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> Maybe Expression
$sel:accountScope:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> Maybe AccountScope
$sel:nextPageToken:GetSavingsPlansPurchaseRecommendation' :: GetSavingsPlansPurchaseRecommendation -> Maybe Text
..} =
    [Pair] -> Value
Core.object
      ( [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Text
"NextPageToken" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
nextPageToken,
            (Text
"AccountScope" Text -> AccountScope -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (AccountScope -> Pair) -> Maybe AccountScope -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AccountScope
accountScope,
            (Text
"Filter" Text -> Expression -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Expression -> Pair) -> Maybe Expression -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Expression
filter',
            (Text
"PageSize" Text -> Natural -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Natural -> Pair) -> Maybe Natural -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
pageSize,
            Pair -> Maybe Pair
forall a. a -> Maybe a
Prelude.Just
              (Text
"SavingsPlansType" Text -> SupportedSavingsPlansType -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..= SupportedSavingsPlansType
savingsPlansType),
            Pair -> Maybe Pair
forall a. a -> Maybe a
Prelude.Just (Text
"TermInYears" Text -> TermInYears -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..= TermInYears
termInYears),
            Pair -> Maybe Pair
forall a. a -> Maybe a
Prelude.Just (Text
"PaymentOption" Text -> PaymentOption -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..= PaymentOption
paymentOption),
            Pair -> Maybe Pair
forall a. a -> Maybe a
Prelude.Just
              ( Text
"LookbackPeriodInDays"
                  Text -> LookbackPeriodInDays -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..= LookbackPeriodInDays
lookbackPeriodInDays
              )
          ]
      )

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

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

-- | /See:/ 'newGetSavingsPlansPurchaseRecommendationResponse' smart constructor.
data GetSavingsPlansPurchaseRecommendationResponse = GetSavingsPlansPurchaseRecommendationResponse'
  { -- | The token for the next set of retrievable results. Amazon Web Services
    -- provides the token when the response from a previous call has more
    -- results than the maximum page size.
    GetSavingsPlansPurchaseRecommendationResponse -> Maybe Text
nextPageToken :: Prelude.Maybe Prelude.Text,
    -- | Contains your request parameters, Savings Plan Recommendations Summary,
    -- and Details.
    GetSavingsPlansPurchaseRecommendationResponse
-> Maybe SavingsPlansPurchaseRecommendation
savingsPlansPurchaseRecommendation :: Prelude.Maybe SavingsPlansPurchaseRecommendation,
    -- | Information regarding this specific recommendation set.
    GetSavingsPlansPurchaseRecommendationResponse
-> Maybe SavingsPlansPurchaseRecommendationMetadata
metadata :: Prelude.Maybe SavingsPlansPurchaseRecommendationMetadata,
    -- | The response's http status code.
    GetSavingsPlansPurchaseRecommendationResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetSavingsPlansPurchaseRecommendationResponse
-> GetSavingsPlansPurchaseRecommendationResponse -> Bool
(GetSavingsPlansPurchaseRecommendationResponse
 -> GetSavingsPlansPurchaseRecommendationResponse -> Bool)
-> (GetSavingsPlansPurchaseRecommendationResponse
    -> GetSavingsPlansPurchaseRecommendationResponse -> Bool)
-> Eq GetSavingsPlansPurchaseRecommendationResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetSavingsPlansPurchaseRecommendationResponse
-> GetSavingsPlansPurchaseRecommendationResponse -> Bool
$c/= :: GetSavingsPlansPurchaseRecommendationResponse
-> GetSavingsPlansPurchaseRecommendationResponse -> Bool
== :: GetSavingsPlansPurchaseRecommendationResponse
-> GetSavingsPlansPurchaseRecommendationResponse -> Bool
$c== :: GetSavingsPlansPurchaseRecommendationResponse
-> GetSavingsPlansPurchaseRecommendationResponse -> Bool
Prelude.Eq, ReadPrec [GetSavingsPlansPurchaseRecommendationResponse]
ReadPrec GetSavingsPlansPurchaseRecommendationResponse
Int -> ReadS GetSavingsPlansPurchaseRecommendationResponse
ReadS [GetSavingsPlansPurchaseRecommendationResponse]
(Int -> ReadS GetSavingsPlansPurchaseRecommendationResponse)
-> ReadS [GetSavingsPlansPurchaseRecommendationResponse]
-> ReadPrec GetSavingsPlansPurchaseRecommendationResponse
-> ReadPrec [GetSavingsPlansPurchaseRecommendationResponse]
-> Read GetSavingsPlansPurchaseRecommendationResponse
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetSavingsPlansPurchaseRecommendationResponse]
$creadListPrec :: ReadPrec [GetSavingsPlansPurchaseRecommendationResponse]
readPrec :: ReadPrec GetSavingsPlansPurchaseRecommendationResponse
$creadPrec :: ReadPrec GetSavingsPlansPurchaseRecommendationResponse
readList :: ReadS [GetSavingsPlansPurchaseRecommendationResponse]
$creadList :: ReadS [GetSavingsPlansPurchaseRecommendationResponse]
readsPrec :: Int -> ReadS GetSavingsPlansPurchaseRecommendationResponse
$creadsPrec :: Int -> ReadS GetSavingsPlansPurchaseRecommendationResponse
Prelude.Read, Int -> GetSavingsPlansPurchaseRecommendationResponse -> ShowS
[GetSavingsPlansPurchaseRecommendationResponse] -> ShowS
GetSavingsPlansPurchaseRecommendationResponse -> String
(Int -> GetSavingsPlansPurchaseRecommendationResponse -> ShowS)
-> (GetSavingsPlansPurchaseRecommendationResponse -> String)
-> ([GetSavingsPlansPurchaseRecommendationResponse] -> ShowS)
-> Show GetSavingsPlansPurchaseRecommendationResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetSavingsPlansPurchaseRecommendationResponse] -> ShowS
$cshowList :: [GetSavingsPlansPurchaseRecommendationResponse] -> ShowS
show :: GetSavingsPlansPurchaseRecommendationResponse -> String
$cshow :: GetSavingsPlansPurchaseRecommendationResponse -> String
showsPrec :: Int -> GetSavingsPlansPurchaseRecommendationResponse -> ShowS
$cshowsPrec :: Int -> GetSavingsPlansPurchaseRecommendationResponse -> ShowS
Prelude.Show, (forall x.
 GetSavingsPlansPurchaseRecommendationResponse
 -> Rep GetSavingsPlansPurchaseRecommendationResponse x)
-> (forall x.
    Rep GetSavingsPlansPurchaseRecommendationResponse x
    -> GetSavingsPlansPurchaseRecommendationResponse)
-> Generic GetSavingsPlansPurchaseRecommendationResponse
forall x.
Rep GetSavingsPlansPurchaseRecommendationResponse x
-> GetSavingsPlansPurchaseRecommendationResponse
forall x.
GetSavingsPlansPurchaseRecommendationResponse
-> Rep GetSavingsPlansPurchaseRecommendationResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetSavingsPlansPurchaseRecommendationResponse x
-> GetSavingsPlansPurchaseRecommendationResponse
$cfrom :: forall x.
GetSavingsPlansPurchaseRecommendationResponse
-> Rep GetSavingsPlansPurchaseRecommendationResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetSavingsPlansPurchaseRecommendationResponse' 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:
--
-- 'nextPageToken', 'getSavingsPlansPurchaseRecommendationResponse_nextPageToken' - The token for the next set of retrievable results. Amazon Web Services
-- provides the token when the response from a previous call has more
-- results than the maximum page size.
--
-- 'savingsPlansPurchaseRecommendation', 'getSavingsPlansPurchaseRecommendationResponse_savingsPlansPurchaseRecommendation' - Contains your request parameters, Savings Plan Recommendations Summary,
-- and Details.
--
-- 'metadata', 'getSavingsPlansPurchaseRecommendationResponse_metadata' - Information regarding this specific recommendation set.
--
-- 'httpStatus', 'getSavingsPlansPurchaseRecommendationResponse_httpStatus' - The response's http status code.
newGetSavingsPlansPurchaseRecommendationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetSavingsPlansPurchaseRecommendationResponse
newGetSavingsPlansPurchaseRecommendationResponse :: Int -> GetSavingsPlansPurchaseRecommendationResponse
newGetSavingsPlansPurchaseRecommendationResponse
  Int
pHttpStatus_ =
    GetSavingsPlansPurchaseRecommendationResponse' :: Maybe Text
-> Maybe SavingsPlansPurchaseRecommendation
-> Maybe SavingsPlansPurchaseRecommendationMetadata
-> Int
-> GetSavingsPlansPurchaseRecommendationResponse
GetSavingsPlansPurchaseRecommendationResponse'
      { $sel:nextPageToken:GetSavingsPlansPurchaseRecommendationResponse' :: Maybe Text
nextPageToken =
          Maybe Text
forall a. Maybe a
Prelude.Nothing,
        $sel:savingsPlansPurchaseRecommendation:GetSavingsPlansPurchaseRecommendationResponse' :: Maybe SavingsPlansPurchaseRecommendation
savingsPlansPurchaseRecommendation =
          Maybe SavingsPlansPurchaseRecommendation
forall a. Maybe a
Prelude.Nothing,
        $sel:metadata:GetSavingsPlansPurchaseRecommendationResponse' :: Maybe SavingsPlansPurchaseRecommendationMetadata
metadata = Maybe SavingsPlansPurchaseRecommendationMetadata
forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetSavingsPlansPurchaseRecommendationResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | The token for the next set of retrievable results. Amazon Web Services
-- provides the token when the response from a previous call has more
-- results than the maximum page size.
getSavingsPlansPurchaseRecommendationResponse_nextPageToken :: Lens.Lens' GetSavingsPlansPurchaseRecommendationResponse (Prelude.Maybe Prelude.Text)
getSavingsPlansPurchaseRecommendationResponse_nextPageToken :: (Maybe Text -> f (Maybe Text))
-> GetSavingsPlansPurchaseRecommendationResponse
-> f GetSavingsPlansPurchaseRecommendationResponse
getSavingsPlansPurchaseRecommendationResponse_nextPageToken = (GetSavingsPlansPurchaseRecommendationResponse -> Maybe Text)
-> (GetSavingsPlansPurchaseRecommendationResponse
    -> Maybe Text -> GetSavingsPlansPurchaseRecommendationResponse)
-> Lens
     GetSavingsPlansPurchaseRecommendationResponse
     GetSavingsPlansPurchaseRecommendationResponse
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendationResponse' {Maybe Text
nextPageToken :: Maybe Text
$sel:nextPageToken:GetSavingsPlansPurchaseRecommendationResponse' :: GetSavingsPlansPurchaseRecommendationResponse -> Maybe Text
nextPageToken} -> Maybe Text
nextPageToken) (\s :: GetSavingsPlansPurchaseRecommendationResponse
s@GetSavingsPlansPurchaseRecommendationResponse' {} Maybe Text
a -> GetSavingsPlansPurchaseRecommendationResponse
s {$sel:nextPageToken:GetSavingsPlansPurchaseRecommendationResponse' :: Maybe Text
nextPageToken = Maybe Text
a} :: GetSavingsPlansPurchaseRecommendationResponse)

-- | Contains your request parameters, Savings Plan Recommendations Summary,
-- and Details.
getSavingsPlansPurchaseRecommendationResponse_savingsPlansPurchaseRecommendation :: Lens.Lens' GetSavingsPlansPurchaseRecommendationResponse (Prelude.Maybe SavingsPlansPurchaseRecommendation)
getSavingsPlansPurchaseRecommendationResponse_savingsPlansPurchaseRecommendation :: (Maybe SavingsPlansPurchaseRecommendation
 -> f (Maybe SavingsPlansPurchaseRecommendation))
-> GetSavingsPlansPurchaseRecommendationResponse
-> f GetSavingsPlansPurchaseRecommendationResponse
getSavingsPlansPurchaseRecommendationResponse_savingsPlansPurchaseRecommendation = (GetSavingsPlansPurchaseRecommendationResponse
 -> Maybe SavingsPlansPurchaseRecommendation)
-> (GetSavingsPlansPurchaseRecommendationResponse
    -> Maybe SavingsPlansPurchaseRecommendation
    -> GetSavingsPlansPurchaseRecommendationResponse)
-> Lens
     GetSavingsPlansPurchaseRecommendationResponse
     GetSavingsPlansPurchaseRecommendationResponse
     (Maybe SavingsPlansPurchaseRecommendation)
     (Maybe SavingsPlansPurchaseRecommendation)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendationResponse' {Maybe SavingsPlansPurchaseRecommendation
savingsPlansPurchaseRecommendation :: Maybe SavingsPlansPurchaseRecommendation
$sel:savingsPlansPurchaseRecommendation:GetSavingsPlansPurchaseRecommendationResponse' :: GetSavingsPlansPurchaseRecommendationResponse
-> Maybe SavingsPlansPurchaseRecommendation
savingsPlansPurchaseRecommendation} -> Maybe SavingsPlansPurchaseRecommendation
savingsPlansPurchaseRecommendation) (\s :: GetSavingsPlansPurchaseRecommendationResponse
s@GetSavingsPlansPurchaseRecommendationResponse' {} Maybe SavingsPlansPurchaseRecommendation
a -> GetSavingsPlansPurchaseRecommendationResponse
s {$sel:savingsPlansPurchaseRecommendation:GetSavingsPlansPurchaseRecommendationResponse' :: Maybe SavingsPlansPurchaseRecommendation
savingsPlansPurchaseRecommendation = Maybe SavingsPlansPurchaseRecommendation
a} :: GetSavingsPlansPurchaseRecommendationResponse)

-- | Information regarding this specific recommendation set.
getSavingsPlansPurchaseRecommendationResponse_metadata :: Lens.Lens' GetSavingsPlansPurchaseRecommendationResponse (Prelude.Maybe SavingsPlansPurchaseRecommendationMetadata)
getSavingsPlansPurchaseRecommendationResponse_metadata :: (Maybe SavingsPlansPurchaseRecommendationMetadata
 -> f (Maybe SavingsPlansPurchaseRecommendationMetadata))
-> GetSavingsPlansPurchaseRecommendationResponse
-> f GetSavingsPlansPurchaseRecommendationResponse
getSavingsPlansPurchaseRecommendationResponse_metadata = (GetSavingsPlansPurchaseRecommendationResponse
 -> Maybe SavingsPlansPurchaseRecommendationMetadata)
-> (GetSavingsPlansPurchaseRecommendationResponse
    -> Maybe SavingsPlansPurchaseRecommendationMetadata
    -> GetSavingsPlansPurchaseRecommendationResponse)
-> Lens
     GetSavingsPlansPurchaseRecommendationResponse
     GetSavingsPlansPurchaseRecommendationResponse
     (Maybe SavingsPlansPurchaseRecommendationMetadata)
     (Maybe SavingsPlansPurchaseRecommendationMetadata)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetSavingsPlansPurchaseRecommendationResponse' {Maybe SavingsPlansPurchaseRecommendationMetadata
metadata :: Maybe SavingsPlansPurchaseRecommendationMetadata
$sel:metadata:GetSavingsPlansPurchaseRecommendationResponse' :: GetSavingsPlansPurchaseRecommendationResponse
-> Maybe SavingsPlansPurchaseRecommendationMetadata
metadata} -> Maybe SavingsPlansPurchaseRecommendationMetadata
metadata) (\s :: GetSavingsPlansPurchaseRecommendationResponse
s@GetSavingsPlansPurchaseRecommendationResponse' {} Maybe SavingsPlansPurchaseRecommendationMetadata
a -> GetSavingsPlansPurchaseRecommendationResponse
s {$sel:metadata:GetSavingsPlansPurchaseRecommendationResponse' :: Maybe SavingsPlansPurchaseRecommendationMetadata
metadata = Maybe SavingsPlansPurchaseRecommendationMetadata
a} :: GetSavingsPlansPurchaseRecommendationResponse)

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

instance
  Prelude.NFData
    GetSavingsPlansPurchaseRecommendationResponse