{-# 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.SavingsPlans.DescribeSavingsPlans
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes the specified Savings Plans.
module Amazonka.SavingsPlans.DescribeSavingsPlans
  ( -- * Creating a Request
    DescribeSavingsPlans (..),
    newDescribeSavingsPlans,

    -- * Request Lenses
    describeSavingsPlans_filters,
    describeSavingsPlans_maxResults,
    describeSavingsPlans_nextToken,
    describeSavingsPlans_savingsPlanArns,
    describeSavingsPlans_savingsPlanIds,
    describeSavingsPlans_states,

    -- * Destructuring the Response
    DescribeSavingsPlansResponse (..),
    newDescribeSavingsPlansResponse,

    -- * Response Lenses
    describeSavingsPlansResponse_nextToken,
    describeSavingsPlansResponse_savingsPlans,
    describeSavingsPlansResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribeSavingsPlans' smart constructor.
data DescribeSavingsPlans = DescribeSavingsPlans'
  { -- | The filters.
    DescribeSavingsPlans -> Maybe [SavingsPlanFilter]
filters :: Prelude.Maybe [SavingsPlanFilter],
    -- | The maximum number of results to return with a single call. To retrieve
    -- additional results, make another call with the returned token value.
    DescribeSavingsPlans -> Maybe Natural
maxResults :: Prelude.Maybe Prelude.Natural,
    -- | The token for the next page of results.
    DescribeSavingsPlans -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Names (ARN) of the Savings Plans.
    DescribeSavingsPlans -> Maybe [Text]
savingsPlanArns :: Prelude.Maybe [Prelude.Text],
    -- | The IDs of the Savings Plans.
    DescribeSavingsPlans -> Maybe [Text]
savingsPlanIds :: Prelude.Maybe [Prelude.Text],
    -- | The states.
    DescribeSavingsPlans -> Maybe [SavingsPlanState]
states :: Prelude.Maybe [SavingsPlanState]
  }
  deriving (DescribeSavingsPlans -> DescribeSavingsPlans -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeSavingsPlans -> DescribeSavingsPlans -> Bool
$c/= :: DescribeSavingsPlans -> DescribeSavingsPlans -> Bool
== :: DescribeSavingsPlans -> DescribeSavingsPlans -> Bool
$c== :: DescribeSavingsPlans -> DescribeSavingsPlans -> Bool
Prelude.Eq, ReadPrec [DescribeSavingsPlans]
ReadPrec DescribeSavingsPlans
Int -> ReadS DescribeSavingsPlans
ReadS [DescribeSavingsPlans]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeSavingsPlans]
$creadListPrec :: ReadPrec [DescribeSavingsPlans]
readPrec :: ReadPrec DescribeSavingsPlans
$creadPrec :: ReadPrec DescribeSavingsPlans
readList :: ReadS [DescribeSavingsPlans]
$creadList :: ReadS [DescribeSavingsPlans]
readsPrec :: Int -> ReadS DescribeSavingsPlans
$creadsPrec :: Int -> ReadS DescribeSavingsPlans
Prelude.Read, Int -> DescribeSavingsPlans -> ShowS
[DescribeSavingsPlans] -> ShowS
DescribeSavingsPlans -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeSavingsPlans] -> ShowS
$cshowList :: [DescribeSavingsPlans] -> ShowS
show :: DescribeSavingsPlans -> String
$cshow :: DescribeSavingsPlans -> String
showsPrec :: Int -> DescribeSavingsPlans -> ShowS
$cshowsPrec :: Int -> DescribeSavingsPlans -> ShowS
Prelude.Show, forall x. Rep DescribeSavingsPlans x -> DescribeSavingsPlans
forall x. DescribeSavingsPlans -> Rep DescribeSavingsPlans x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeSavingsPlans x -> DescribeSavingsPlans
$cfrom :: forall x. DescribeSavingsPlans -> Rep DescribeSavingsPlans x
Prelude.Generic)

-- |
-- Create a value of 'DescribeSavingsPlans' 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:
--
-- 'filters', 'describeSavingsPlans_filters' - The filters.
--
-- 'maxResults', 'describeSavingsPlans_maxResults' - The maximum number of results to return with a single call. To retrieve
-- additional results, make another call with the returned token value.
--
-- 'nextToken', 'describeSavingsPlans_nextToken' - The token for the next page of results.
--
-- 'savingsPlanArns', 'describeSavingsPlans_savingsPlanArns' - The Amazon Resource Names (ARN) of the Savings Plans.
--
-- 'savingsPlanIds', 'describeSavingsPlans_savingsPlanIds' - The IDs of the Savings Plans.
--
-- 'states', 'describeSavingsPlans_states' - The states.
newDescribeSavingsPlans ::
  DescribeSavingsPlans
newDescribeSavingsPlans :: DescribeSavingsPlans
newDescribeSavingsPlans =
  DescribeSavingsPlans'
    { $sel:filters:DescribeSavingsPlans' :: Maybe [SavingsPlanFilter]
filters = forall a. Maybe a
Prelude.Nothing,
      $sel:maxResults:DescribeSavingsPlans' :: Maybe Natural
maxResults = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:DescribeSavingsPlans' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:savingsPlanArns:DescribeSavingsPlans' :: Maybe [Text]
savingsPlanArns = forall a. Maybe a
Prelude.Nothing,
      $sel:savingsPlanIds:DescribeSavingsPlans' :: Maybe [Text]
savingsPlanIds = forall a. Maybe a
Prelude.Nothing,
      $sel:states:DescribeSavingsPlans' :: Maybe [SavingsPlanState]
states = forall a. Maybe a
Prelude.Nothing
    }

-- | The filters.
describeSavingsPlans_filters :: Lens.Lens' DescribeSavingsPlans (Prelude.Maybe [SavingsPlanFilter])
describeSavingsPlans_filters :: Lens' DescribeSavingsPlans (Maybe [SavingsPlanFilter])
describeSavingsPlans_filters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSavingsPlans' {Maybe [SavingsPlanFilter]
filters :: Maybe [SavingsPlanFilter]
$sel:filters:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [SavingsPlanFilter]
filters} -> Maybe [SavingsPlanFilter]
filters) (\s :: DescribeSavingsPlans
s@DescribeSavingsPlans' {} Maybe [SavingsPlanFilter]
a -> DescribeSavingsPlans
s {$sel:filters:DescribeSavingsPlans' :: Maybe [SavingsPlanFilter]
filters = Maybe [SavingsPlanFilter]
a} :: DescribeSavingsPlans) 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 maximum number of results to return with a single call. To retrieve
-- additional results, make another call with the returned token value.
describeSavingsPlans_maxResults :: Lens.Lens' DescribeSavingsPlans (Prelude.Maybe Prelude.Natural)
describeSavingsPlans_maxResults :: Lens' DescribeSavingsPlans (Maybe Natural)
describeSavingsPlans_maxResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSavingsPlans' {Maybe Natural
maxResults :: Maybe Natural
$sel:maxResults:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe Natural
maxResults} -> Maybe Natural
maxResults) (\s :: DescribeSavingsPlans
s@DescribeSavingsPlans' {} Maybe Natural
a -> DescribeSavingsPlans
s {$sel:maxResults:DescribeSavingsPlans' :: Maybe Natural
maxResults = Maybe Natural
a} :: DescribeSavingsPlans)

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

-- | The Amazon Resource Names (ARN) of the Savings Plans.
describeSavingsPlans_savingsPlanArns :: Lens.Lens' DescribeSavingsPlans (Prelude.Maybe [Prelude.Text])
describeSavingsPlans_savingsPlanArns :: Lens' DescribeSavingsPlans (Maybe [Text])
describeSavingsPlans_savingsPlanArns = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSavingsPlans' {Maybe [Text]
savingsPlanArns :: Maybe [Text]
$sel:savingsPlanArns:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [Text]
savingsPlanArns} -> Maybe [Text]
savingsPlanArns) (\s :: DescribeSavingsPlans
s@DescribeSavingsPlans' {} Maybe [Text]
a -> DescribeSavingsPlans
s {$sel:savingsPlanArns:DescribeSavingsPlans' :: Maybe [Text]
savingsPlanArns = Maybe [Text]
a} :: DescribeSavingsPlans) 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 IDs of the Savings Plans.
describeSavingsPlans_savingsPlanIds :: Lens.Lens' DescribeSavingsPlans (Prelude.Maybe [Prelude.Text])
describeSavingsPlans_savingsPlanIds :: Lens' DescribeSavingsPlans (Maybe [Text])
describeSavingsPlans_savingsPlanIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSavingsPlans' {Maybe [Text]
savingsPlanIds :: Maybe [Text]
$sel:savingsPlanIds:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [Text]
savingsPlanIds} -> Maybe [Text]
savingsPlanIds) (\s :: DescribeSavingsPlans
s@DescribeSavingsPlans' {} Maybe [Text]
a -> DescribeSavingsPlans
s {$sel:savingsPlanIds:DescribeSavingsPlans' :: Maybe [Text]
savingsPlanIds = Maybe [Text]
a} :: DescribeSavingsPlans) 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 states.
describeSavingsPlans_states :: Lens.Lens' DescribeSavingsPlans (Prelude.Maybe [SavingsPlanState])
describeSavingsPlans_states :: Lens' DescribeSavingsPlans (Maybe [SavingsPlanState])
describeSavingsPlans_states = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSavingsPlans' {Maybe [SavingsPlanState]
states :: Maybe [SavingsPlanState]
$sel:states:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [SavingsPlanState]
states} -> Maybe [SavingsPlanState]
states) (\s :: DescribeSavingsPlans
s@DescribeSavingsPlans' {} Maybe [SavingsPlanState]
a -> DescribeSavingsPlans
s {$sel:states:DescribeSavingsPlans' :: Maybe [SavingsPlanState]
states = Maybe [SavingsPlanState]
a} :: DescribeSavingsPlans) 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 DescribeSavingsPlans where
  type
    AWSResponse DescribeSavingsPlans =
      DescribeSavingsPlansResponse
  request :: (Service -> Service)
-> DescribeSavingsPlans -> Request DescribeSavingsPlans
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 DescribeSavingsPlans
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeSavingsPlans)))
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 Text
-> Maybe [SavingsPlan] -> Int -> DescribeSavingsPlansResponse
DescribeSavingsPlansResponse'
            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
"nextToken")
            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
"savingsPlans" 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 DescribeSavingsPlans where
  hashWithSalt :: Int -> DescribeSavingsPlans -> Int
hashWithSalt Int
_salt DescribeSavingsPlans' {Maybe Natural
Maybe [Text]
Maybe [SavingsPlanState]
Maybe [SavingsPlanFilter]
Maybe Text
states :: Maybe [SavingsPlanState]
savingsPlanIds :: Maybe [Text]
savingsPlanArns :: Maybe [Text]
nextToken :: Maybe Text
maxResults :: Maybe Natural
filters :: Maybe [SavingsPlanFilter]
$sel:states:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [SavingsPlanState]
$sel:savingsPlanIds:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [Text]
$sel:savingsPlanArns:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [Text]
$sel:nextToken:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe Text
$sel:maxResults:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe Natural
$sel:filters:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [SavingsPlanFilter]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [SavingsPlanFilter]
filters
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maxResults
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
savingsPlanArns
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
savingsPlanIds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [SavingsPlanState]
states

instance Prelude.NFData DescribeSavingsPlans where
  rnf :: DescribeSavingsPlans -> ()
rnf DescribeSavingsPlans' {Maybe Natural
Maybe [Text]
Maybe [SavingsPlanState]
Maybe [SavingsPlanFilter]
Maybe Text
states :: Maybe [SavingsPlanState]
savingsPlanIds :: Maybe [Text]
savingsPlanArns :: Maybe [Text]
nextToken :: Maybe Text
maxResults :: Maybe Natural
filters :: Maybe [SavingsPlanFilter]
$sel:states:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [SavingsPlanState]
$sel:savingsPlanIds:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [Text]
$sel:savingsPlanArns:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [Text]
$sel:nextToken:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe Text
$sel:maxResults:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe Natural
$sel:filters:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [SavingsPlanFilter]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [SavingsPlanFilter]
filters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maxResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
savingsPlanArns
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
savingsPlanIds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [SavingsPlanState]
states

instance Data.ToHeaders DescribeSavingsPlans where
  toHeaders :: DescribeSavingsPlans -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON DescribeSavingsPlans where
  toJSON :: DescribeSavingsPlans -> Value
toJSON DescribeSavingsPlans' {Maybe Natural
Maybe [Text]
Maybe [SavingsPlanState]
Maybe [SavingsPlanFilter]
Maybe Text
states :: Maybe [SavingsPlanState]
savingsPlanIds :: Maybe [Text]
savingsPlanArns :: Maybe [Text]
nextToken :: Maybe Text
maxResults :: Maybe Natural
filters :: Maybe [SavingsPlanFilter]
$sel:states:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [SavingsPlanState]
$sel:savingsPlanIds:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [Text]
$sel:savingsPlanArns:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [Text]
$sel:nextToken:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe Text
$sel:maxResults:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe Natural
$sel:filters:DescribeSavingsPlans' :: DescribeSavingsPlans -> Maybe [SavingsPlanFilter]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"filters" 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 [SavingsPlanFilter]
filters,
            (Key
"maxResults" 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
maxResults,
            (Key
"nextToken" 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
nextToken,
            (Key
"savingsPlanArns" 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]
savingsPlanArns,
            (Key
"savingsPlanIds" 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]
savingsPlanIds,
            (Key
"states" 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 [SavingsPlanState]
states
          ]
      )

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

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

-- | /See:/ 'newDescribeSavingsPlansResponse' smart constructor.
data DescribeSavingsPlansResponse = DescribeSavingsPlansResponse'
  { -- | The token to use to retrieve the next page of results. This value is
    -- null when there are no more results to return.
    DescribeSavingsPlansResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | Information about the Savings Plans.
    DescribeSavingsPlansResponse -> Maybe [SavingsPlan]
savingsPlans :: Prelude.Maybe [SavingsPlan],
    -- | The response's http status code.
    DescribeSavingsPlansResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeSavingsPlansResponse
-> DescribeSavingsPlansResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeSavingsPlansResponse
-> DescribeSavingsPlansResponse -> Bool
$c/= :: DescribeSavingsPlansResponse
-> DescribeSavingsPlansResponse -> Bool
== :: DescribeSavingsPlansResponse
-> DescribeSavingsPlansResponse -> Bool
$c== :: DescribeSavingsPlansResponse
-> DescribeSavingsPlansResponse -> Bool
Prelude.Eq, ReadPrec [DescribeSavingsPlansResponse]
ReadPrec DescribeSavingsPlansResponse
Int -> ReadS DescribeSavingsPlansResponse
ReadS [DescribeSavingsPlansResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeSavingsPlansResponse]
$creadListPrec :: ReadPrec [DescribeSavingsPlansResponse]
readPrec :: ReadPrec DescribeSavingsPlansResponse
$creadPrec :: ReadPrec DescribeSavingsPlansResponse
readList :: ReadS [DescribeSavingsPlansResponse]
$creadList :: ReadS [DescribeSavingsPlansResponse]
readsPrec :: Int -> ReadS DescribeSavingsPlansResponse
$creadsPrec :: Int -> ReadS DescribeSavingsPlansResponse
Prelude.Read, Int -> DescribeSavingsPlansResponse -> ShowS
[DescribeSavingsPlansResponse] -> ShowS
DescribeSavingsPlansResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeSavingsPlansResponse] -> ShowS
$cshowList :: [DescribeSavingsPlansResponse] -> ShowS
show :: DescribeSavingsPlansResponse -> String
$cshow :: DescribeSavingsPlansResponse -> String
showsPrec :: Int -> DescribeSavingsPlansResponse -> ShowS
$cshowsPrec :: Int -> DescribeSavingsPlansResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeSavingsPlansResponse x -> DescribeSavingsPlansResponse
forall x.
DescribeSavingsPlansResponse -> Rep DescribeSavingsPlansResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeSavingsPlansResponse x -> DescribeSavingsPlansResponse
$cfrom :: forall x.
DescribeSavingsPlansResponse -> Rep DescribeSavingsPlansResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeSavingsPlansResponse' 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:
--
-- 'nextToken', 'describeSavingsPlansResponse_nextToken' - The token to use to retrieve the next page of results. This value is
-- null when there are no more results to return.
--
-- 'savingsPlans', 'describeSavingsPlansResponse_savingsPlans' - Information about the Savings Plans.
--
-- 'httpStatus', 'describeSavingsPlansResponse_httpStatus' - The response's http status code.
newDescribeSavingsPlansResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeSavingsPlansResponse
newDescribeSavingsPlansResponse :: Int -> DescribeSavingsPlansResponse
newDescribeSavingsPlansResponse Int
pHttpStatus_ =
  DescribeSavingsPlansResponse'
    { $sel:nextToken:DescribeSavingsPlansResponse' :: Maybe Text
nextToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:savingsPlans:DescribeSavingsPlansResponse' :: Maybe [SavingsPlan]
savingsPlans = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeSavingsPlansResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The token to use to retrieve the next page of results. This value is
-- null when there are no more results to return.
describeSavingsPlansResponse_nextToken :: Lens.Lens' DescribeSavingsPlansResponse (Prelude.Maybe Prelude.Text)
describeSavingsPlansResponse_nextToken :: Lens' DescribeSavingsPlansResponse (Maybe Text)
describeSavingsPlansResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSavingsPlansResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:DescribeSavingsPlansResponse' :: DescribeSavingsPlansResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: DescribeSavingsPlansResponse
s@DescribeSavingsPlansResponse' {} Maybe Text
a -> DescribeSavingsPlansResponse
s {$sel:nextToken:DescribeSavingsPlansResponse' :: Maybe Text
nextToken = Maybe Text
a} :: DescribeSavingsPlansResponse)

-- | Information about the Savings Plans.
describeSavingsPlansResponse_savingsPlans :: Lens.Lens' DescribeSavingsPlansResponse (Prelude.Maybe [SavingsPlan])
describeSavingsPlansResponse_savingsPlans :: Lens' DescribeSavingsPlansResponse (Maybe [SavingsPlan])
describeSavingsPlansResponse_savingsPlans = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSavingsPlansResponse' {Maybe [SavingsPlan]
savingsPlans :: Maybe [SavingsPlan]
$sel:savingsPlans:DescribeSavingsPlansResponse' :: DescribeSavingsPlansResponse -> Maybe [SavingsPlan]
savingsPlans} -> Maybe [SavingsPlan]
savingsPlans) (\s :: DescribeSavingsPlansResponse
s@DescribeSavingsPlansResponse' {} Maybe [SavingsPlan]
a -> DescribeSavingsPlansResponse
s {$sel:savingsPlans:DescribeSavingsPlansResponse' :: Maybe [SavingsPlan]
savingsPlans = Maybe [SavingsPlan]
a} :: DescribeSavingsPlansResponse) 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.
describeSavingsPlansResponse_httpStatus :: Lens.Lens' DescribeSavingsPlansResponse Prelude.Int
describeSavingsPlansResponse_httpStatus :: Lens' DescribeSavingsPlansResponse Int
describeSavingsPlansResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSavingsPlansResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeSavingsPlansResponse' :: DescribeSavingsPlansResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeSavingsPlansResponse
s@DescribeSavingsPlansResponse' {} Int
a -> DescribeSavingsPlansResponse
s {$sel:httpStatus:DescribeSavingsPlansResponse' :: Int
httpStatus = Int
a} :: DescribeSavingsPlansResponse)

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