{-# 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.Budgets.DescribeBudgetPerformanceHistory
-- 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 history for @DAILY@, @MONTHLY@, and @QUARTERLY@ budgets.
-- Budget history isn\'t available for @ANNUAL@ budgets.
--
-- This operation returns paginated results.
module Amazonka.Budgets.DescribeBudgetPerformanceHistory
  ( -- * Creating a Request
    DescribeBudgetPerformanceHistory (..),
    newDescribeBudgetPerformanceHistory,

    -- * Request Lenses
    describeBudgetPerformanceHistory_maxResults,
    describeBudgetPerformanceHistory_nextToken,
    describeBudgetPerformanceHistory_timePeriod,
    describeBudgetPerformanceHistory_accountId,
    describeBudgetPerformanceHistory_budgetName,

    -- * Destructuring the Response
    DescribeBudgetPerformanceHistoryResponse (..),
    newDescribeBudgetPerformanceHistoryResponse,

    -- * Response Lenses
    describeBudgetPerformanceHistoryResponse_budgetPerformanceHistory,
    describeBudgetPerformanceHistoryResponse_nextToken,
    describeBudgetPerformanceHistoryResponse_httpStatus,
  )
where

import Amazonka.Budgets.Types
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

-- | /See:/ 'newDescribeBudgetPerformanceHistory' smart constructor.
data DescribeBudgetPerformanceHistory = DescribeBudgetPerformanceHistory'
  { DescribeBudgetPerformanceHistory -> Maybe Natural
maxResults :: Prelude.Maybe Prelude.Natural,
    DescribeBudgetPerformanceHistory -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | Retrieves how often the budget went into an @ALARM@ state for the
    -- specified time period.
    DescribeBudgetPerformanceHistory -> Maybe TimePeriod
timePeriod :: Prelude.Maybe TimePeriod,
    DescribeBudgetPerformanceHistory -> Text
accountId :: Prelude.Text,
    DescribeBudgetPerformanceHistory -> Text
budgetName :: Prelude.Text
  }
  deriving (DescribeBudgetPerformanceHistory
-> DescribeBudgetPerformanceHistory -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeBudgetPerformanceHistory
-> DescribeBudgetPerformanceHistory -> Bool
$c/= :: DescribeBudgetPerformanceHistory
-> DescribeBudgetPerformanceHistory -> Bool
== :: DescribeBudgetPerformanceHistory
-> DescribeBudgetPerformanceHistory -> Bool
$c== :: DescribeBudgetPerformanceHistory
-> DescribeBudgetPerformanceHistory -> Bool
Prelude.Eq, ReadPrec [DescribeBudgetPerformanceHistory]
ReadPrec DescribeBudgetPerformanceHistory
Int -> ReadS DescribeBudgetPerformanceHistory
ReadS [DescribeBudgetPerformanceHistory]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeBudgetPerformanceHistory]
$creadListPrec :: ReadPrec [DescribeBudgetPerformanceHistory]
readPrec :: ReadPrec DescribeBudgetPerformanceHistory
$creadPrec :: ReadPrec DescribeBudgetPerformanceHistory
readList :: ReadS [DescribeBudgetPerformanceHistory]
$creadList :: ReadS [DescribeBudgetPerformanceHistory]
readsPrec :: Int -> ReadS DescribeBudgetPerformanceHistory
$creadsPrec :: Int -> ReadS DescribeBudgetPerformanceHistory
Prelude.Read, Int -> DescribeBudgetPerformanceHistory -> ShowS
[DescribeBudgetPerformanceHistory] -> ShowS
DescribeBudgetPerformanceHistory -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeBudgetPerformanceHistory] -> ShowS
$cshowList :: [DescribeBudgetPerformanceHistory] -> ShowS
show :: DescribeBudgetPerformanceHistory -> String
$cshow :: DescribeBudgetPerformanceHistory -> String
showsPrec :: Int -> DescribeBudgetPerformanceHistory -> ShowS
$cshowsPrec :: Int -> DescribeBudgetPerformanceHistory -> ShowS
Prelude.Show, forall x.
Rep DescribeBudgetPerformanceHistory x
-> DescribeBudgetPerformanceHistory
forall x.
DescribeBudgetPerformanceHistory
-> Rep DescribeBudgetPerformanceHistory x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeBudgetPerformanceHistory x
-> DescribeBudgetPerformanceHistory
$cfrom :: forall x.
DescribeBudgetPerformanceHistory
-> Rep DescribeBudgetPerformanceHistory x
Prelude.Generic)

-- |
-- Create a value of 'DescribeBudgetPerformanceHistory' 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:
--
-- 'maxResults', 'describeBudgetPerformanceHistory_maxResults' - Undocumented member.
--
-- 'nextToken', 'describeBudgetPerformanceHistory_nextToken' - Undocumented member.
--
-- 'timePeriod', 'describeBudgetPerformanceHistory_timePeriod' - Retrieves how often the budget went into an @ALARM@ state for the
-- specified time period.
--
-- 'accountId', 'describeBudgetPerformanceHistory_accountId' - Undocumented member.
--
-- 'budgetName', 'describeBudgetPerformanceHistory_budgetName' - Undocumented member.
newDescribeBudgetPerformanceHistory ::
  -- | 'accountId'
  Prelude.Text ->
  -- | 'budgetName'
  Prelude.Text ->
  DescribeBudgetPerformanceHistory
newDescribeBudgetPerformanceHistory :: Text -> Text -> DescribeBudgetPerformanceHistory
newDescribeBudgetPerformanceHistory
  Text
pAccountId_
  Text
pBudgetName_ =
    DescribeBudgetPerformanceHistory'
      { $sel:maxResults:DescribeBudgetPerformanceHistory' :: Maybe Natural
maxResults =
          forall a. Maybe a
Prelude.Nothing,
        $sel:nextToken:DescribeBudgetPerformanceHistory' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
        $sel:timePeriod:DescribeBudgetPerformanceHistory' :: Maybe TimePeriod
timePeriod = forall a. Maybe a
Prelude.Nothing,
        $sel:accountId:DescribeBudgetPerformanceHistory' :: Text
accountId = Text
pAccountId_,
        $sel:budgetName:DescribeBudgetPerformanceHistory' :: Text
budgetName = Text
pBudgetName_
      }

-- | Undocumented member.
describeBudgetPerformanceHistory_maxResults :: Lens.Lens' DescribeBudgetPerformanceHistory (Prelude.Maybe Prelude.Natural)
describeBudgetPerformanceHistory_maxResults :: Lens' DescribeBudgetPerformanceHistory (Maybe Natural)
describeBudgetPerformanceHistory_maxResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeBudgetPerformanceHistory' {Maybe Natural
maxResults :: Maybe Natural
$sel:maxResults:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe Natural
maxResults} -> Maybe Natural
maxResults) (\s :: DescribeBudgetPerformanceHistory
s@DescribeBudgetPerformanceHistory' {} Maybe Natural
a -> DescribeBudgetPerformanceHistory
s {$sel:maxResults:DescribeBudgetPerformanceHistory' :: Maybe Natural
maxResults = Maybe Natural
a} :: DescribeBudgetPerformanceHistory)

-- | Undocumented member.
describeBudgetPerformanceHistory_nextToken :: Lens.Lens' DescribeBudgetPerformanceHistory (Prelude.Maybe Prelude.Text)
describeBudgetPerformanceHistory_nextToken :: Lens' DescribeBudgetPerformanceHistory (Maybe Text)
describeBudgetPerformanceHistory_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeBudgetPerformanceHistory' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: DescribeBudgetPerformanceHistory
s@DescribeBudgetPerformanceHistory' {} Maybe Text
a -> DescribeBudgetPerformanceHistory
s {$sel:nextToken:DescribeBudgetPerformanceHistory' :: Maybe Text
nextToken = Maybe Text
a} :: DescribeBudgetPerformanceHistory)

-- | Retrieves how often the budget went into an @ALARM@ state for the
-- specified time period.
describeBudgetPerformanceHistory_timePeriod :: Lens.Lens' DescribeBudgetPerformanceHistory (Prelude.Maybe TimePeriod)
describeBudgetPerformanceHistory_timePeriod :: Lens' DescribeBudgetPerformanceHistory (Maybe TimePeriod)
describeBudgetPerformanceHistory_timePeriod = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeBudgetPerformanceHistory' {Maybe TimePeriod
timePeriod :: Maybe TimePeriod
$sel:timePeriod:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe TimePeriod
timePeriod} -> Maybe TimePeriod
timePeriod) (\s :: DescribeBudgetPerformanceHistory
s@DescribeBudgetPerformanceHistory' {} Maybe TimePeriod
a -> DescribeBudgetPerformanceHistory
s {$sel:timePeriod:DescribeBudgetPerformanceHistory' :: Maybe TimePeriod
timePeriod = Maybe TimePeriod
a} :: DescribeBudgetPerformanceHistory)

-- | Undocumented member.
describeBudgetPerformanceHistory_accountId :: Lens.Lens' DescribeBudgetPerformanceHistory Prelude.Text
describeBudgetPerformanceHistory_accountId :: Lens' DescribeBudgetPerformanceHistory Text
describeBudgetPerformanceHistory_accountId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeBudgetPerformanceHistory' {Text
accountId :: Text
$sel:accountId:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Text
accountId} -> Text
accountId) (\s :: DescribeBudgetPerformanceHistory
s@DescribeBudgetPerformanceHistory' {} Text
a -> DescribeBudgetPerformanceHistory
s {$sel:accountId:DescribeBudgetPerformanceHistory' :: Text
accountId = Text
a} :: DescribeBudgetPerformanceHistory)

-- | Undocumented member.
describeBudgetPerformanceHistory_budgetName :: Lens.Lens' DescribeBudgetPerformanceHistory Prelude.Text
describeBudgetPerformanceHistory_budgetName :: Lens' DescribeBudgetPerformanceHistory Text
describeBudgetPerformanceHistory_budgetName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeBudgetPerformanceHistory' {Text
budgetName :: Text
$sel:budgetName:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Text
budgetName} -> Text
budgetName) (\s :: DescribeBudgetPerformanceHistory
s@DescribeBudgetPerformanceHistory' {} Text
a -> DescribeBudgetPerformanceHistory
s {$sel:budgetName:DescribeBudgetPerformanceHistory' :: Text
budgetName = Text
a} :: DescribeBudgetPerformanceHistory)

instance
  Core.AWSPager
    DescribeBudgetPerformanceHistory
  where
  page :: DescribeBudgetPerformanceHistory
-> AWSResponse DescribeBudgetPerformanceHistory
-> Maybe DescribeBudgetPerformanceHistory
page DescribeBudgetPerformanceHistory
rq AWSResponse DescribeBudgetPerformanceHistory
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeBudgetPerformanceHistory
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeBudgetPerformanceHistoryResponse (Maybe Text)
describeBudgetPerformanceHistoryResponse_nextToken
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeBudgetPerformanceHistory
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens'
  DescribeBudgetPerformanceHistoryResponse
  (Maybe BudgetPerformanceHistory)
describeBudgetPerformanceHistoryResponse_budgetPerformanceHistory
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
        forall a. a -> Maybe a
Prelude.Just
          forall a b. (a -> b) -> a -> b
Prelude.$ DescribeBudgetPerformanceHistory
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' DescribeBudgetPerformanceHistory (Maybe Text)
describeBudgetPerformanceHistory_nextToken
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse DescribeBudgetPerformanceHistory
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeBudgetPerformanceHistoryResponse (Maybe Text)
describeBudgetPerformanceHistoryResponse_nextToken
          forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance
  Core.AWSRequest
    DescribeBudgetPerformanceHistory
  where
  type
    AWSResponse DescribeBudgetPerformanceHistory =
      DescribeBudgetPerformanceHistoryResponse
  request :: (Service -> Service)
-> DescribeBudgetPerformanceHistory
-> Request DescribeBudgetPerformanceHistory
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 DescribeBudgetPerformanceHistory
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse DescribeBudgetPerformanceHistory)))
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 BudgetPerformanceHistory
-> Maybe Text -> Int -> DescribeBudgetPerformanceHistoryResponse
DescribeBudgetPerformanceHistoryResponse'
            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
"BudgetPerformanceHistory")
            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
"NextToken")
            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
    DescribeBudgetPerformanceHistory
  where
  hashWithSalt :: Int -> DescribeBudgetPerformanceHistory -> Int
hashWithSalt
    Int
_salt
    DescribeBudgetPerformanceHistory' {Maybe Natural
Maybe Text
Maybe TimePeriod
Text
budgetName :: Text
accountId :: Text
timePeriod :: Maybe TimePeriod
nextToken :: Maybe Text
maxResults :: Maybe Natural
$sel:budgetName:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Text
$sel:accountId:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Text
$sel:timePeriod:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe TimePeriod
$sel:nextToken:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe Text
$sel:maxResults:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe Natural
..} =
      Int
_salt
        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 TimePeriod
timePeriod
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
accountId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
budgetName

instance
  Prelude.NFData
    DescribeBudgetPerformanceHistory
  where
  rnf :: DescribeBudgetPerformanceHistory -> ()
rnf DescribeBudgetPerformanceHistory' {Maybe Natural
Maybe Text
Maybe TimePeriod
Text
budgetName :: Text
accountId :: Text
timePeriod :: Maybe TimePeriod
nextToken :: Maybe Text
maxResults :: Maybe Natural
$sel:budgetName:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Text
$sel:accountId:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Text
$sel:timePeriod:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe TimePeriod
$sel:nextToken:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe Text
$sel:maxResults:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe Natural
..} =
    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 TimePeriod
timePeriod
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
accountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
budgetName

instance
  Data.ToHeaders
    DescribeBudgetPerformanceHistory
  where
  toHeaders :: DescribeBudgetPerformanceHistory -> 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
"AWSBudgetServiceGateway.DescribeBudgetPerformanceHistory" ::
                          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 DescribeBudgetPerformanceHistory where
  toJSON :: DescribeBudgetPerformanceHistory -> Value
toJSON DescribeBudgetPerformanceHistory' {Maybe Natural
Maybe Text
Maybe TimePeriod
Text
budgetName :: Text
accountId :: Text
timePeriod :: Maybe TimePeriod
nextToken :: Maybe Text
maxResults :: Maybe Natural
$sel:budgetName:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Text
$sel:accountId:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Text
$sel:timePeriod:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe TimePeriod
$sel:nextToken:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe Text
$sel:maxResults:DescribeBudgetPerformanceHistory' :: DescribeBudgetPerformanceHistory -> Maybe Natural
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (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
"TimePeriod" 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 TimePeriod
timePeriod,
            forall a. a -> Maybe a
Prelude.Just (Key
"AccountId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
accountId),
            forall a. a -> Maybe a
Prelude.Just (Key
"BudgetName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
budgetName)
          ]
      )

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

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

-- | /See:/ 'newDescribeBudgetPerformanceHistoryResponse' smart constructor.
data DescribeBudgetPerformanceHistoryResponse = DescribeBudgetPerformanceHistoryResponse'
  { -- | The history of how often the budget has gone into an @ALARM@ state.
    --
    -- For @DAILY@ budgets, the history saves the state of the budget for the
    -- last 60 days. For @MONTHLY@ budgets, the history saves the state of the
    -- budget for the current month plus the last 12 months. For @QUARTERLY@
    -- budgets, the history saves the state of the budget for the last four
    -- quarters.
    DescribeBudgetPerformanceHistoryResponse
-> Maybe BudgetPerformanceHistory
budgetPerformanceHistory :: Prelude.Maybe BudgetPerformanceHistory,
    DescribeBudgetPerformanceHistoryResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    DescribeBudgetPerformanceHistoryResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeBudgetPerformanceHistoryResponse
-> DescribeBudgetPerformanceHistoryResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeBudgetPerformanceHistoryResponse
-> DescribeBudgetPerformanceHistoryResponse -> Bool
$c/= :: DescribeBudgetPerformanceHistoryResponse
-> DescribeBudgetPerformanceHistoryResponse -> Bool
== :: DescribeBudgetPerformanceHistoryResponse
-> DescribeBudgetPerformanceHistoryResponse -> Bool
$c== :: DescribeBudgetPerformanceHistoryResponse
-> DescribeBudgetPerformanceHistoryResponse -> Bool
Prelude.Eq, ReadPrec [DescribeBudgetPerformanceHistoryResponse]
ReadPrec DescribeBudgetPerformanceHistoryResponse
Int -> ReadS DescribeBudgetPerformanceHistoryResponse
ReadS [DescribeBudgetPerformanceHistoryResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeBudgetPerformanceHistoryResponse]
$creadListPrec :: ReadPrec [DescribeBudgetPerformanceHistoryResponse]
readPrec :: ReadPrec DescribeBudgetPerformanceHistoryResponse
$creadPrec :: ReadPrec DescribeBudgetPerformanceHistoryResponse
readList :: ReadS [DescribeBudgetPerformanceHistoryResponse]
$creadList :: ReadS [DescribeBudgetPerformanceHistoryResponse]
readsPrec :: Int -> ReadS DescribeBudgetPerformanceHistoryResponse
$creadsPrec :: Int -> ReadS DescribeBudgetPerformanceHistoryResponse
Prelude.Read, Int -> DescribeBudgetPerformanceHistoryResponse -> ShowS
[DescribeBudgetPerformanceHistoryResponse] -> ShowS
DescribeBudgetPerformanceHistoryResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeBudgetPerformanceHistoryResponse] -> ShowS
$cshowList :: [DescribeBudgetPerformanceHistoryResponse] -> ShowS
show :: DescribeBudgetPerformanceHistoryResponse -> String
$cshow :: DescribeBudgetPerformanceHistoryResponse -> String
showsPrec :: Int -> DescribeBudgetPerformanceHistoryResponse -> ShowS
$cshowsPrec :: Int -> DescribeBudgetPerformanceHistoryResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeBudgetPerformanceHistoryResponse x
-> DescribeBudgetPerformanceHistoryResponse
forall x.
DescribeBudgetPerformanceHistoryResponse
-> Rep DescribeBudgetPerformanceHistoryResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeBudgetPerformanceHistoryResponse x
-> DescribeBudgetPerformanceHistoryResponse
$cfrom :: forall x.
DescribeBudgetPerformanceHistoryResponse
-> Rep DescribeBudgetPerformanceHistoryResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeBudgetPerformanceHistoryResponse' 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:
--
-- 'budgetPerformanceHistory', 'describeBudgetPerformanceHistoryResponse_budgetPerformanceHistory' - The history of how often the budget has gone into an @ALARM@ state.
--
-- For @DAILY@ budgets, the history saves the state of the budget for the
-- last 60 days. For @MONTHLY@ budgets, the history saves the state of the
-- budget for the current month plus the last 12 months. For @QUARTERLY@
-- budgets, the history saves the state of the budget for the last four
-- quarters.
--
-- 'nextToken', 'describeBudgetPerformanceHistoryResponse_nextToken' - Undocumented member.
--
-- 'httpStatus', 'describeBudgetPerformanceHistoryResponse_httpStatus' - The response's http status code.
newDescribeBudgetPerformanceHistoryResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeBudgetPerformanceHistoryResponse
newDescribeBudgetPerformanceHistoryResponse :: Int -> DescribeBudgetPerformanceHistoryResponse
newDescribeBudgetPerformanceHistoryResponse
  Int
pHttpStatus_ =
    DescribeBudgetPerformanceHistoryResponse'
      { $sel:budgetPerformanceHistory:DescribeBudgetPerformanceHistoryResponse' :: Maybe BudgetPerformanceHistory
budgetPerformanceHistory =
          forall a. Maybe a
Prelude.Nothing,
        $sel:nextToken:DescribeBudgetPerformanceHistoryResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:DescribeBudgetPerformanceHistoryResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | The history of how often the budget has gone into an @ALARM@ state.
--
-- For @DAILY@ budgets, the history saves the state of the budget for the
-- last 60 days. For @MONTHLY@ budgets, the history saves the state of the
-- budget for the current month plus the last 12 months. For @QUARTERLY@
-- budgets, the history saves the state of the budget for the last four
-- quarters.
describeBudgetPerformanceHistoryResponse_budgetPerformanceHistory :: Lens.Lens' DescribeBudgetPerformanceHistoryResponse (Prelude.Maybe BudgetPerformanceHistory)
describeBudgetPerformanceHistoryResponse_budgetPerformanceHistory :: Lens'
  DescribeBudgetPerformanceHistoryResponse
  (Maybe BudgetPerformanceHistory)
describeBudgetPerformanceHistoryResponse_budgetPerformanceHistory = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeBudgetPerformanceHistoryResponse' {Maybe BudgetPerformanceHistory
budgetPerformanceHistory :: Maybe BudgetPerformanceHistory
$sel:budgetPerformanceHistory:DescribeBudgetPerformanceHistoryResponse' :: DescribeBudgetPerformanceHistoryResponse
-> Maybe BudgetPerformanceHistory
budgetPerformanceHistory} -> Maybe BudgetPerformanceHistory
budgetPerformanceHistory) (\s :: DescribeBudgetPerformanceHistoryResponse
s@DescribeBudgetPerformanceHistoryResponse' {} Maybe BudgetPerformanceHistory
a -> DescribeBudgetPerformanceHistoryResponse
s {$sel:budgetPerformanceHistory:DescribeBudgetPerformanceHistoryResponse' :: Maybe BudgetPerformanceHistory
budgetPerformanceHistory = Maybe BudgetPerformanceHistory
a} :: DescribeBudgetPerformanceHistoryResponse)

-- | Undocumented member.
describeBudgetPerformanceHistoryResponse_nextToken :: Lens.Lens' DescribeBudgetPerformanceHistoryResponse (Prelude.Maybe Prelude.Text)
describeBudgetPerformanceHistoryResponse_nextToken :: Lens' DescribeBudgetPerformanceHistoryResponse (Maybe Text)
describeBudgetPerformanceHistoryResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeBudgetPerformanceHistoryResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:DescribeBudgetPerformanceHistoryResponse' :: DescribeBudgetPerformanceHistoryResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: DescribeBudgetPerformanceHistoryResponse
s@DescribeBudgetPerformanceHistoryResponse' {} Maybe Text
a -> DescribeBudgetPerformanceHistoryResponse
s {$sel:nextToken:DescribeBudgetPerformanceHistoryResponse' :: Maybe Text
nextToken = Maybe Text
a} :: DescribeBudgetPerformanceHistoryResponse)

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

instance
  Prelude.NFData
    DescribeBudgetPerformanceHistoryResponse
  where
  rnf :: DescribeBudgetPerformanceHistoryResponse -> ()
rnf DescribeBudgetPerformanceHistoryResponse' {Int
Maybe Text
Maybe BudgetPerformanceHistory
httpStatus :: Int
nextToken :: Maybe Text
budgetPerformanceHistory :: Maybe BudgetPerformanceHistory
$sel:httpStatus:DescribeBudgetPerformanceHistoryResponse' :: DescribeBudgetPerformanceHistoryResponse -> Int
$sel:nextToken:DescribeBudgetPerformanceHistoryResponse' :: DescribeBudgetPerformanceHistoryResponse -> Maybe Text
$sel:budgetPerformanceHistory:DescribeBudgetPerformanceHistoryResponse' :: DescribeBudgetPerformanceHistoryResponse
-> Maybe BudgetPerformanceHistory
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe BudgetPerformanceHistory
budgetPerformanceHistory
      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 Int
httpStatus