{-# 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.ListSavingsPlansPurchaseRecommendationGeneration
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves a list of your historical recommendation generations within
-- the past 30 days.
module Amazonka.CostExplorer.ListSavingsPlansPurchaseRecommendationGeneration
  ( -- * Creating a Request
    ListSavingsPlansPurchaseRecommendationGeneration (..),
    newListSavingsPlansPurchaseRecommendationGeneration,

    -- * Request Lenses
    listSavingsPlansPurchaseRecommendationGeneration_generationStatus,
    listSavingsPlansPurchaseRecommendationGeneration_nextPageToken,
    listSavingsPlansPurchaseRecommendationGeneration_pageSize,
    listSavingsPlansPurchaseRecommendationGeneration_recommendationIds,

    -- * Destructuring the Response
    ListSavingsPlansPurchaseRecommendationGenerationResponse (..),
    newListSavingsPlansPurchaseRecommendationGenerationResponse,

    -- * Response Lenses
    listSavingsPlansPurchaseRecommendationGenerationResponse_generationSummaryList,
    listSavingsPlansPurchaseRecommendationGenerationResponse_nextPageToken,
    listSavingsPlansPurchaseRecommendationGenerationResponse_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:/ 'newListSavingsPlansPurchaseRecommendationGeneration' smart constructor.
data ListSavingsPlansPurchaseRecommendationGeneration = ListSavingsPlansPurchaseRecommendationGeneration'
  { -- | The status of the recommendation generation.
    ListSavingsPlansPurchaseRecommendationGeneration
-> Maybe GenerationStatus
generationStatus :: Prelude.Maybe GenerationStatus,
    -- | The token to retrieve the next set of results.
    ListSavingsPlansPurchaseRecommendationGeneration -> Maybe Text
nextPageToken :: Prelude.Maybe Prelude.Text,
    -- | The number of recommendations that you want returned in a single
    -- response object.
    ListSavingsPlansPurchaseRecommendationGeneration -> Maybe Natural
pageSize :: Prelude.Maybe Prelude.Natural,
    -- | The IDs for each specific recommendation.
    ListSavingsPlansPurchaseRecommendationGeneration -> Maybe [Text]
recommendationIds :: Prelude.Maybe [Prelude.Text]
  }
  deriving (ListSavingsPlansPurchaseRecommendationGeneration
-> ListSavingsPlansPurchaseRecommendationGeneration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListSavingsPlansPurchaseRecommendationGeneration
-> ListSavingsPlansPurchaseRecommendationGeneration -> Bool
$c/= :: ListSavingsPlansPurchaseRecommendationGeneration
-> ListSavingsPlansPurchaseRecommendationGeneration -> Bool
== :: ListSavingsPlansPurchaseRecommendationGeneration
-> ListSavingsPlansPurchaseRecommendationGeneration -> Bool
$c== :: ListSavingsPlansPurchaseRecommendationGeneration
-> ListSavingsPlansPurchaseRecommendationGeneration -> Bool
Prelude.Eq, ReadPrec [ListSavingsPlansPurchaseRecommendationGeneration]
ReadPrec ListSavingsPlansPurchaseRecommendationGeneration
Int -> ReadS ListSavingsPlansPurchaseRecommendationGeneration
ReadS [ListSavingsPlansPurchaseRecommendationGeneration]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListSavingsPlansPurchaseRecommendationGeneration]
$creadListPrec :: ReadPrec [ListSavingsPlansPurchaseRecommendationGeneration]
readPrec :: ReadPrec ListSavingsPlansPurchaseRecommendationGeneration
$creadPrec :: ReadPrec ListSavingsPlansPurchaseRecommendationGeneration
readList :: ReadS [ListSavingsPlansPurchaseRecommendationGeneration]
$creadList :: ReadS [ListSavingsPlansPurchaseRecommendationGeneration]
readsPrec :: Int -> ReadS ListSavingsPlansPurchaseRecommendationGeneration
$creadsPrec :: Int -> ReadS ListSavingsPlansPurchaseRecommendationGeneration
Prelude.Read, Int -> ListSavingsPlansPurchaseRecommendationGeneration -> ShowS
[ListSavingsPlansPurchaseRecommendationGeneration] -> ShowS
ListSavingsPlansPurchaseRecommendationGeneration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListSavingsPlansPurchaseRecommendationGeneration] -> ShowS
$cshowList :: [ListSavingsPlansPurchaseRecommendationGeneration] -> ShowS
show :: ListSavingsPlansPurchaseRecommendationGeneration -> String
$cshow :: ListSavingsPlansPurchaseRecommendationGeneration -> String
showsPrec :: Int -> ListSavingsPlansPurchaseRecommendationGeneration -> ShowS
$cshowsPrec :: Int -> ListSavingsPlansPurchaseRecommendationGeneration -> ShowS
Prelude.Show, forall x.
Rep ListSavingsPlansPurchaseRecommendationGeneration x
-> ListSavingsPlansPurchaseRecommendationGeneration
forall x.
ListSavingsPlansPurchaseRecommendationGeneration
-> Rep ListSavingsPlansPurchaseRecommendationGeneration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ListSavingsPlansPurchaseRecommendationGeneration x
-> ListSavingsPlansPurchaseRecommendationGeneration
$cfrom :: forall x.
ListSavingsPlansPurchaseRecommendationGeneration
-> Rep ListSavingsPlansPurchaseRecommendationGeneration x
Prelude.Generic)

-- |
-- Create a value of 'ListSavingsPlansPurchaseRecommendationGeneration' 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:
--
-- 'generationStatus', 'listSavingsPlansPurchaseRecommendationGeneration_generationStatus' - The status of the recommendation generation.
--
-- 'nextPageToken', 'listSavingsPlansPurchaseRecommendationGeneration_nextPageToken' - The token to retrieve the next set of results.
--
-- 'pageSize', 'listSavingsPlansPurchaseRecommendationGeneration_pageSize' - The number of recommendations that you want returned in a single
-- response object.
--
-- 'recommendationIds', 'listSavingsPlansPurchaseRecommendationGeneration_recommendationIds' - The IDs for each specific recommendation.
newListSavingsPlansPurchaseRecommendationGeneration ::
  ListSavingsPlansPurchaseRecommendationGeneration
newListSavingsPlansPurchaseRecommendationGeneration :: ListSavingsPlansPurchaseRecommendationGeneration
newListSavingsPlansPurchaseRecommendationGeneration =
  ListSavingsPlansPurchaseRecommendationGeneration'
    { $sel:generationStatus:ListSavingsPlansPurchaseRecommendationGeneration' :: Maybe GenerationStatus
generationStatus =
        forall a. Maybe a
Prelude.Nothing,
      $sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGeneration' :: Maybe Text
nextPageToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:pageSize:ListSavingsPlansPurchaseRecommendationGeneration' :: Maybe Natural
pageSize =
        forall a. Maybe a
Prelude.Nothing,
      $sel:recommendationIds:ListSavingsPlansPurchaseRecommendationGeneration' :: Maybe [Text]
recommendationIds =
        forall a. Maybe a
Prelude.Nothing
    }

-- | The status of the recommendation generation.
listSavingsPlansPurchaseRecommendationGeneration_generationStatus :: Lens.Lens' ListSavingsPlansPurchaseRecommendationGeneration (Prelude.Maybe GenerationStatus)
listSavingsPlansPurchaseRecommendationGeneration_generationStatus :: Lens'
  ListSavingsPlansPurchaseRecommendationGeneration
  (Maybe GenerationStatus)
listSavingsPlansPurchaseRecommendationGeneration_generationStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListSavingsPlansPurchaseRecommendationGeneration' {Maybe GenerationStatus
generationStatus :: Maybe GenerationStatus
$sel:generationStatus:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration
-> Maybe GenerationStatus
generationStatus} -> Maybe GenerationStatus
generationStatus) (\s :: ListSavingsPlansPurchaseRecommendationGeneration
s@ListSavingsPlansPurchaseRecommendationGeneration' {} Maybe GenerationStatus
a -> ListSavingsPlansPurchaseRecommendationGeneration
s {$sel:generationStatus:ListSavingsPlansPurchaseRecommendationGeneration' :: Maybe GenerationStatus
generationStatus = Maybe GenerationStatus
a} :: ListSavingsPlansPurchaseRecommendationGeneration)

-- | The token to retrieve the next set of results.
listSavingsPlansPurchaseRecommendationGeneration_nextPageToken :: Lens.Lens' ListSavingsPlansPurchaseRecommendationGeneration (Prelude.Maybe Prelude.Text)
listSavingsPlansPurchaseRecommendationGeneration_nextPageToken :: Lens' ListSavingsPlansPurchaseRecommendationGeneration (Maybe Text)
listSavingsPlansPurchaseRecommendationGeneration_nextPageToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListSavingsPlansPurchaseRecommendationGeneration' {Maybe Text
nextPageToken :: Maybe Text
$sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe Text
nextPageToken} -> Maybe Text
nextPageToken) (\s :: ListSavingsPlansPurchaseRecommendationGeneration
s@ListSavingsPlansPurchaseRecommendationGeneration' {} Maybe Text
a -> ListSavingsPlansPurchaseRecommendationGeneration
s {$sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGeneration' :: Maybe Text
nextPageToken = Maybe Text
a} :: ListSavingsPlansPurchaseRecommendationGeneration)

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

-- | The IDs for each specific recommendation.
listSavingsPlansPurchaseRecommendationGeneration_recommendationIds :: Lens.Lens' ListSavingsPlansPurchaseRecommendationGeneration (Prelude.Maybe [Prelude.Text])
listSavingsPlansPurchaseRecommendationGeneration_recommendationIds :: Lens'
  ListSavingsPlansPurchaseRecommendationGeneration (Maybe [Text])
listSavingsPlansPurchaseRecommendationGeneration_recommendationIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListSavingsPlansPurchaseRecommendationGeneration' {Maybe [Text]
recommendationIds :: Maybe [Text]
$sel:recommendationIds:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe [Text]
recommendationIds} -> Maybe [Text]
recommendationIds) (\s :: ListSavingsPlansPurchaseRecommendationGeneration
s@ListSavingsPlansPurchaseRecommendationGeneration' {} Maybe [Text]
a -> ListSavingsPlansPurchaseRecommendationGeneration
s {$sel:recommendationIds:ListSavingsPlansPurchaseRecommendationGeneration' :: Maybe [Text]
recommendationIds = Maybe [Text]
a} :: ListSavingsPlansPurchaseRecommendationGeneration) 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

instance
  Core.AWSRequest
    ListSavingsPlansPurchaseRecommendationGeneration
  where
  type
    AWSResponse
      ListSavingsPlansPurchaseRecommendationGeneration =
      ListSavingsPlansPurchaseRecommendationGenerationResponse
  request :: (Service -> Service)
-> ListSavingsPlansPurchaseRecommendationGeneration
-> Request ListSavingsPlansPurchaseRecommendationGeneration
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 ListSavingsPlansPurchaseRecommendationGeneration
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse ListSavingsPlansPurchaseRecommendationGeneration)))
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 [GenerationSummary]
-> Maybe Text
-> Int
-> ListSavingsPlansPurchaseRecommendationGenerationResponse
ListSavingsPlansPurchaseRecommendationGenerationResponse'
            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
"GenerationSummaryList"
                            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.<*> (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.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    ListSavingsPlansPurchaseRecommendationGeneration
  where
  hashWithSalt :: Int -> ListSavingsPlansPurchaseRecommendationGeneration -> Int
hashWithSalt
    Int
_salt
    ListSavingsPlansPurchaseRecommendationGeneration' {Maybe Natural
Maybe [Text]
Maybe Text
Maybe GenerationStatus
recommendationIds :: Maybe [Text]
pageSize :: Maybe Natural
nextPageToken :: Maybe Text
generationStatus :: Maybe GenerationStatus
$sel:recommendationIds:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe [Text]
$sel:pageSize:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe Natural
$sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe Text
$sel:generationStatus:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration
-> Maybe GenerationStatus
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe GenerationStatus
generationStatus
        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 [Text]
recommendationIds

instance
  Prelude.NFData
    ListSavingsPlansPurchaseRecommendationGeneration
  where
  rnf :: ListSavingsPlansPurchaseRecommendationGeneration -> ()
rnf
    ListSavingsPlansPurchaseRecommendationGeneration' {Maybe Natural
Maybe [Text]
Maybe Text
Maybe GenerationStatus
recommendationIds :: Maybe [Text]
pageSize :: Maybe Natural
nextPageToken :: Maybe Text
generationStatus :: Maybe GenerationStatus
$sel:recommendationIds:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe [Text]
$sel:pageSize:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe Natural
$sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe Text
$sel:generationStatus:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration
-> Maybe GenerationStatus
..} =
      forall a. NFData a => a -> ()
Prelude.rnf Maybe GenerationStatus
generationStatus
        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 [Text]
recommendationIds

instance
  Data.ToHeaders
    ListSavingsPlansPurchaseRecommendationGeneration
  where
  toHeaders :: ListSavingsPlansPurchaseRecommendationGeneration -> 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.ListSavingsPlansPurchaseRecommendationGeneration" ::
                          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
    ListSavingsPlansPurchaseRecommendationGeneration
  where
  toJSON :: ListSavingsPlansPurchaseRecommendationGeneration -> Value
toJSON
    ListSavingsPlansPurchaseRecommendationGeneration' {Maybe Natural
Maybe [Text]
Maybe Text
Maybe GenerationStatus
recommendationIds :: Maybe [Text]
pageSize :: Maybe Natural
nextPageToken :: Maybe Text
generationStatus :: Maybe GenerationStatus
$sel:recommendationIds:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe [Text]
$sel:pageSize:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe Natural
$sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration -> Maybe Text
$sel:generationStatus:ListSavingsPlansPurchaseRecommendationGeneration' :: ListSavingsPlansPurchaseRecommendationGeneration
-> Maybe GenerationStatus
..} =
      [Pair] -> Value
Data.object
        ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
            [ (Key
"GenerationStatus" 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 GenerationStatus
generationStatus,
              (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
"RecommendationIds" 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]
recommendationIds
            ]
        )

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

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

-- | /See:/ 'newListSavingsPlansPurchaseRecommendationGenerationResponse' smart constructor.
data ListSavingsPlansPurchaseRecommendationGenerationResponse = ListSavingsPlansPurchaseRecommendationGenerationResponse'
  { -- | The list of historical recommendation generations.
    ListSavingsPlansPurchaseRecommendationGenerationResponse
-> Maybe [GenerationSummary]
generationSummaryList :: Prelude.Maybe [GenerationSummary],
    -- | The token to retrieve the next set of results.
    ListSavingsPlansPurchaseRecommendationGenerationResponse
-> Maybe Text
nextPageToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    ListSavingsPlansPurchaseRecommendationGenerationResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (ListSavingsPlansPurchaseRecommendationGenerationResponse
-> ListSavingsPlansPurchaseRecommendationGenerationResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListSavingsPlansPurchaseRecommendationGenerationResponse
-> ListSavingsPlansPurchaseRecommendationGenerationResponse -> Bool
$c/= :: ListSavingsPlansPurchaseRecommendationGenerationResponse
-> ListSavingsPlansPurchaseRecommendationGenerationResponse -> Bool
== :: ListSavingsPlansPurchaseRecommendationGenerationResponse
-> ListSavingsPlansPurchaseRecommendationGenerationResponse -> Bool
$c== :: ListSavingsPlansPurchaseRecommendationGenerationResponse
-> ListSavingsPlansPurchaseRecommendationGenerationResponse -> Bool
Prelude.Eq, ReadPrec [ListSavingsPlansPurchaseRecommendationGenerationResponse]
ReadPrec ListSavingsPlansPurchaseRecommendationGenerationResponse
Int
-> ReadS ListSavingsPlansPurchaseRecommendationGenerationResponse
ReadS [ListSavingsPlansPurchaseRecommendationGenerationResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListSavingsPlansPurchaseRecommendationGenerationResponse]
$creadListPrec :: ReadPrec [ListSavingsPlansPurchaseRecommendationGenerationResponse]
readPrec :: ReadPrec ListSavingsPlansPurchaseRecommendationGenerationResponse
$creadPrec :: ReadPrec ListSavingsPlansPurchaseRecommendationGenerationResponse
readList :: ReadS [ListSavingsPlansPurchaseRecommendationGenerationResponse]
$creadList :: ReadS [ListSavingsPlansPurchaseRecommendationGenerationResponse]
readsPrec :: Int
-> ReadS ListSavingsPlansPurchaseRecommendationGenerationResponse
$creadsPrec :: Int
-> ReadS ListSavingsPlansPurchaseRecommendationGenerationResponse
Prelude.Read, Int
-> ListSavingsPlansPurchaseRecommendationGenerationResponse
-> ShowS
[ListSavingsPlansPurchaseRecommendationGenerationResponse] -> ShowS
ListSavingsPlansPurchaseRecommendationGenerationResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListSavingsPlansPurchaseRecommendationGenerationResponse] -> ShowS
$cshowList :: [ListSavingsPlansPurchaseRecommendationGenerationResponse] -> ShowS
show :: ListSavingsPlansPurchaseRecommendationGenerationResponse -> String
$cshow :: ListSavingsPlansPurchaseRecommendationGenerationResponse -> String
showsPrec :: Int
-> ListSavingsPlansPurchaseRecommendationGenerationResponse
-> ShowS
$cshowsPrec :: Int
-> ListSavingsPlansPurchaseRecommendationGenerationResponse
-> ShowS
Prelude.Show, forall x.
Rep ListSavingsPlansPurchaseRecommendationGenerationResponse x
-> ListSavingsPlansPurchaseRecommendationGenerationResponse
forall x.
ListSavingsPlansPurchaseRecommendationGenerationResponse
-> Rep ListSavingsPlansPurchaseRecommendationGenerationResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ListSavingsPlansPurchaseRecommendationGenerationResponse x
-> ListSavingsPlansPurchaseRecommendationGenerationResponse
$cfrom :: forall x.
ListSavingsPlansPurchaseRecommendationGenerationResponse
-> Rep ListSavingsPlansPurchaseRecommendationGenerationResponse x
Prelude.Generic)

-- |
-- Create a value of 'ListSavingsPlansPurchaseRecommendationGenerationResponse' 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:
--
-- 'generationSummaryList', 'listSavingsPlansPurchaseRecommendationGenerationResponse_generationSummaryList' - The list of historical recommendation generations.
--
-- 'nextPageToken', 'listSavingsPlansPurchaseRecommendationGenerationResponse_nextPageToken' - The token to retrieve the next set of results.
--
-- 'httpStatus', 'listSavingsPlansPurchaseRecommendationGenerationResponse_httpStatus' - The response's http status code.
newListSavingsPlansPurchaseRecommendationGenerationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ListSavingsPlansPurchaseRecommendationGenerationResponse
newListSavingsPlansPurchaseRecommendationGenerationResponse :: Int -> ListSavingsPlansPurchaseRecommendationGenerationResponse
newListSavingsPlansPurchaseRecommendationGenerationResponse
  Int
pHttpStatus_ =
    ListSavingsPlansPurchaseRecommendationGenerationResponse'
      { $sel:generationSummaryList:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: Maybe [GenerationSummary]
generationSummaryList =
          forall a. Maybe a
Prelude.Nothing,
        $sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: Maybe Text
nextPageToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: Int
httpStatus =
          Int
pHttpStatus_
      }

-- | The list of historical recommendation generations.
listSavingsPlansPurchaseRecommendationGenerationResponse_generationSummaryList :: Lens.Lens' ListSavingsPlansPurchaseRecommendationGenerationResponse (Prelude.Maybe [GenerationSummary])
listSavingsPlansPurchaseRecommendationGenerationResponse_generationSummaryList :: Lens'
  ListSavingsPlansPurchaseRecommendationGenerationResponse
  (Maybe [GenerationSummary])
listSavingsPlansPurchaseRecommendationGenerationResponse_generationSummaryList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListSavingsPlansPurchaseRecommendationGenerationResponse' {Maybe [GenerationSummary]
generationSummaryList :: Maybe [GenerationSummary]
$sel:generationSummaryList:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: ListSavingsPlansPurchaseRecommendationGenerationResponse
-> Maybe [GenerationSummary]
generationSummaryList} -> Maybe [GenerationSummary]
generationSummaryList) (\s :: ListSavingsPlansPurchaseRecommendationGenerationResponse
s@ListSavingsPlansPurchaseRecommendationGenerationResponse' {} Maybe [GenerationSummary]
a -> ListSavingsPlansPurchaseRecommendationGenerationResponse
s {$sel:generationSummaryList:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: Maybe [GenerationSummary]
generationSummaryList = Maybe [GenerationSummary]
a} :: ListSavingsPlansPurchaseRecommendationGenerationResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The token to retrieve the next set of results.
listSavingsPlansPurchaseRecommendationGenerationResponse_nextPageToken :: Lens.Lens' ListSavingsPlansPurchaseRecommendationGenerationResponse (Prelude.Maybe Prelude.Text)
listSavingsPlansPurchaseRecommendationGenerationResponse_nextPageToken :: Lens'
  ListSavingsPlansPurchaseRecommendationGenerationResponse
  (Maybe Text)
listSavingsPlansPurchaseRecommendationGenerationResponse_nextPageToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListSavingsPlansPurchaseRecommendationGenerationResponse' {Maybe Text
nextPageToken :: Maybe Text
$sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: ListSavingsPlansPurchaseRecommendationGenerationResponse
-> Maybe Text
nextPageToken} -> Maybe Text
nextPageToken) (\s :: ListSavingsPlansPurchaseRecommendationGenerationResponse
s@ListSavingsPlansPurchaseRecommendationGenerationResponse' {} Maybe Text
a -> ListSavingsPlansPurchaseRecommendationGenerationResponse
s {$sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: Maybe Text
nextPageToken = Maybe Text
a} :: ListSavingsPlansPurchaseRecommendationGenerationResponse)

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

instance
  Prelude.NFData
    ListSavingsPlansPurchaseRecommendationGenerationResponse
  where
  rnf :: ListSavingsPlansPurchaseRecommendationGenerationResponse -> ()
rnf
    ListSavingsPlansPurchaseRecommendationGenerationResponse' {Int
Maybe [GenerationSummary]
Maybe Text
httpStatus :: Int
nextPageToken :: Maybe Text
generationSummaryList :: Maybe [GenerationSummary]
$sel:httpStatus:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: ListSavingsPlansPurchaseRecommendationGenerationResponse -> Int
$sel:nextPageToken:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: ListSavingsPlansPurchaseRecommendationGenerationResponse
-> Maybe Text
$sel:generationSummaryList:ListSavingsPlansPurchaseRecommendationGenerationResponse' :: ListSavingsPlansPurchaseRecommendationGenerationResponse
-> Maybe [GenerationSummary]
..} =
      forall a. NFData a => a -> ()
Prelude.rnf Maybe [GenerationSummary]
generationSummaryList
        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 Int
httpStatus