{-# 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.Config.GetResourceConfigHistory
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns a list of @ConfigurationItems@ for the specified resource. The
-- list contains details about each state of the resource during the
-- specified time interval. If you specified a retention period to retain
-- your @ConfigurationItems@ between a minimum of 30 days and a maximum of
-- 7 years (2557 days), Config returns the @ConfigurationItems@ for the
-- specified retention period.
--
-- The response is paginated. By default, Config returns a limit of 10
-- configuration items per page. You can customize this number with the
-- @limit@ parameter. The response includes a @nextToken@ string. To get
-- the next page of results, run the request again and specify the string
-- for the @nextToken@ parameter.
--
-- Each call to the API is limited to span a duration of seven days. It is
-- likely that the number of records returned is smaller than the specified
-- @limit@. In such cases, you can make another call, using the
-- @nextToken@.
--
-- This operation returns paginated results.
module Amazonka.Config.GetResourceConfigHistory
  ( -- * Creating a Request
    GetResourceConfigHistory (..),
    newGetResourceConfigHistory,

    -- * Request Lenses
    getResourceConfigHistory_chronologicalOrder,
    getResourceConfigHistory_earlierTime,
    getResourceConfigHistory_laterTime,
    getResourceConfigHistory_limit,
    getResourceConfigHistory_nextToken,
    getResourceConfigHistory_resourceType,
    getResourceConfigHistory_resourceId,

    -- * Destructuring the Response
    GetResourceConfigHistoryResponse (..),
    newGetResourceConfigHistoryResponse,

    -- * Response Lenses
    getResourceConfigHistoryResponse_configurationItems,
    getResourceConfigHistoryResponse_nextToken,
    getResourceConfigHistoryResponse_httpStatus,
  )
where

import Amazonka.Config.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

-- | The input for the GetResourceConfigHistory action.
--
-- /See:/ 'newGetResourceConfigHistory' smart constructor.
data GetResourceConfigHistory = GetResourceConfigHistory'
  { -- | The chronological order for configuration items listed. By default, the
    -- results are listed in reverse chronological order.
    GetResourceConfigHistory -> Maybe ChronologicalOrder
chronologicalOrder :: Prelude.Maybe ChronologicalOrder,
    -- | The time stamp that indicates an earlier time. If not specified, the
    -- action returns paginated results that contain configuration items that
    -- start when the first configuration item was recorded.
    GetResourceConfigHistory -> Maybe POSIX
earlierTime :: Prelude.Maybe Data.POSIX,
    -- | The time stamp that indicates a later time. If not specified, current
    -- time is taken.
    GetResourceConfigHistory -> Maybe POSIX
laterTime :: Prelude.Maybe Data.POSIX,
    -- | The maximum number of configuration items returned on each page. The
    -- default is 10. You cannot specify a number greater than 100. If you
    -- specify 0, Config uses the default.
    GetResourceConfigHistory -> Maybe Natural
limit :: Prelude.Maybe Prelude.Natural,
    -- | The @nextToken@ string returned on a previous page that you use to get
    -- the next page of results in a paginated response.
    GetResourceConfigHistory -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The resource type.
    GetResourceConfigHistory -> ResourceType
resourceType :: ResourceType,
    -- | The ID of the resource (for example., @sg-xxxxxx@).
    GetResourceConfigHistory -> Text
resourceId :: Prelude.Text
  }
  deriving (GetResourceConfigHistory -> GetResourceConfigHistory -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResourceConfigHistory -> GetResourceConfigHistory -> Bool
$c/= :: GetResourceConfigHistory -> GetResourceConfigHistory -> Bool
== :: GetResourceConfigHistory -> GetResourceConfigHistory -> Bool
$c== :: GetResourceConfigHistory -> GetResourceConfigHistory -> Bool
Prelude.Eq, ReadPrec [GetResourceConfigHistory]
ReadPrec GetResourceConfigHistory
Int -> ReadS GetResourceConfigHistory
ReadS [GetResourceConfigHistory]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResourceConfigHistory]
$creadListPrec :: ReadPrec [GetResourceConfigHistory]
readPrec :: ReadPrec GetResourceConfigHistory
$creadPrec :: ReadPrec GetResourceConfigHistory
readList :: ReadS [GetResourceConfigHistory]
$creadList :: ReadS [GetResourceConfigHistory]
readsPrec :: Int -> ReadS GetResourceConfigHistory
$creadsPrec :: Int -> ReadS GetResourceConfigHistory
Prelude.Read, Int -> GetResourceConfigHistory -> ShowS
[GetResourceConfigHistory] -> ShowS
GetResourceConfigHistory -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResourceConfigHistory] -> ShowS
$cshowList :: [GetResourceConfigHistory] -> ShowS
show :: GetResourceConfigHistory -> String
$cshow :: GetResourceConfigHistory -> String
showsPrec :: Int -> GetResourceConfigHistory -> ShowS
$cshowsPrec :: Int -> GetResourceConfigHistory -> ShowS
Prelude.Show, forall x.
Rep GetResourceConfigHistory x -> GetResourceConfigHistory
forall x.
GetResourceConfigHistory -> Rep GetResourceConfigHistory x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetResourceConfigHistory x -> GetResourceConfigHistory
$cfrom :: forall x.
GetResourceConfigHistory -> Rep GetResourceConfigHistory x
Prelude.Generic)

-- |
-- Create a value of 'GetResourceConfigHistory' 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:
--
-- 'chronologicalOrder', 'getResourceConfigHistory_chronologicalOrder' - The chronological order for configuration items listed. By default, the
-- results are listed in reverse chronological order.
--
-- 'earlierTime', 'getResourceConfigHistory_earlierTime' - The time stamp that indicates an earlier time. If not specified, the
-- action returns paginated results that contain configuration items that
-- start when the first configuration item was recorded.
--
-- 'laterTime', 'getResourceConfigHistory_laterTime' - The time stamp that indicates a later time. If not specified, current
-- time is taken.
--
-- 'limit', 'getResourceConfigHistory_limit' - The maximum number of configuration items returned on each page. The
-- default is 10. You cannot specify a number greater than 100. If you
-- specify 0, Config uses the default.
--
-- 'nextToken', 'getResourceConfigHistory_nextToken' - The @nextToken@ string returned on a previous page that you use to get
-- the next page of results in a paginated response.
--
-- 'resourceType', 'getResourceConfigHistory_resourceType' - The resource type.
--
-- 'resourceId', 'getResourceConfigHistory_resourceId' - The ID of the resource (for example., @sg-xxxxxx@).
newGetResourceConfigHistory ::
  -- | 'resourceType'
  ResourceType ->
  -- | 'resourceId'
  Prelude.Text ->
  GetResourceConfigHistory
newGetResourceConfigHistory :: ResourceType -> Text -> GetResourceConfigHistory
newGetResourceConfigHistory
  ResourceType
pResourceType_
  Text
pResourceId_ =
    GetResourceConfigHistory'
      { $sel:chronologicalOrder:GetResourceConfigHistory' :: Maybe ChronologicalOrder
chronologicalOrder =
          forall a. Maybe a
Prelude.Nothing,
        $sel:earlierTime:GetResourceConfigHistory' :: Maybe POSIX
earlierTime = forall a. Maybe a
Prelude.Nothing,
        $sel:laterTime:GetResourceConfigHistory' :: Maybe POSIX
laterTime = forall a. Maybe a
Prelude.Nothing,
        $sel:limit:GetResourceConfigHistory' :: Maybe Natural
limit = forall a. Maybe a
Prelude.Nothing,
        $sel:nextToken:GetResourceConfigHistory' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
        $sel:resourceType:GetResourceConfigHistory' :: ResourceType
resourceType = ResourceType
pResourceType_,
        $sel:resourceId:GetResourceConfigHistory' :: Text
resourceId = Text
pResourceId_
      }

-- | The chronological order for configuration items listed. By default, the
-- results are listed in reverse chronological order.
getResourceConfigHistory_chronologicalOrder :: Lens.Lens' GetResourceConfigHistory (Prelude.Maybe ChronologicalOrder)
getResourceConfigHistory_chronologicalOrder :: Lens' GetResourceConfigHistory (Maybe ChronologicalOrder)
getResourceConfigHistory_chronologicalOrder = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceConfigHistory' {Maybe ChronologicalOrder
chronologicalOrder :: Maybe ChronologicalOrder
$sel:chronologicalOrder:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe ChronologicalOrder
chronologicalOrder} -> Maybe ChronologicalOrder
chronologicalOrder) (\s :: GetResourceConfigHistory
s@GetResourceConfigHistory' {} Maybe ChronologicalOrder
a -> GetResourceConfigHistory
s {$sel:chronologicalOrder:GetResourceConfigHistory' :: Maybe ChronologicalOrder
chronologicalOrder = Maybe ChronologicalOrder
a} :: GetResourceConfigHistory)

-- | The time stamp that indicates an earlier time. If not specified, the
-- action returns paginated results that contain configuration items that
-- start when the first configuration item was recorded.
getResourceConfigHistory_earlierTime :: Lens.Lens' GetResourceConfigHistory (Prelude.Maybe Prelude.UTCTime)
getResourceConfigHistory_earlierTime :: Lens' GetResourceConfigHistory (Maybe UTCTime)
getResourceConfigHistory_earlierTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceConfigHistory' {Maybe POSIX
earlierTime :: Maybe POSIX
$sel:earlierTime:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe POSIX
earlierTime} -> Maybe POSIX
earlierTime) (\s :: GetResourceConfigHistory
s@GetResourceConfigHistory' {} Maybe POSIX
a -> GetResourceConfigHistory
s {$sel:earlierTime:GetResourceConfigHistory' :: Maybe POSIX
earlierTime = Maybe POSIX
a} :: GetResourceConfigHistory) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The time stamp that indicates a later time. If not specified, current
-- time is taken.
getResourceConfigHistory_laterTime :: Lens.Lens' GetResourceConfigHistory (Prelude.Maybe Prelude.UTCTime)
getResourceConfigHistory_laterTime :: Lens' GetResourceConfigHistory (Maybe UTCTime)
getResourceConfigHistory_laterTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceConfigHistory' {Maybe POSIX
laterTime :: Maybe POSIX
$sel:laterTime:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe POSIX
laterTime} -> Maybe POSIX
laterTime) (\s :: GetResourceConfigHistory
s@GetResourceConfigHistory' {} Maybe POSIX
a -> GetResourceConfigHistory
s {$sel:laterTime:GetResourceConfigHistory' :: Maybe POSIX
laterTime = Maybe POSIX
a} :: GetResourceConfigHistory) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The maximum number of configuration items returned on each page. The
-- default is 10. You cannot specify a number greater than 100. If you
-- specify 0, Config uses the default.
getResourceConfigHistory_limit :: Lens.Lens' GetResourceConfigHistory (Prelude.Maybe Prelude.Natural)
getResourceConfigHistory_limit :: Lens' GetResourceConfigHistory (Maybe Natural)
getResourceConfigHistory_limit = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceConfigHistory' {Maybe Natural
limit :: Maybe Natural
$sel:limit:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe Natural
limit} -> Maybe Natural
limit) (\s :: GetResourceConfigHistory
s@GetResourceConfigHistory' {} Maybe Natural
a -> GetResourceConfigHistory
s {$sel:limit:GetResourceConfigHistory' :: Maybe Natural
limit = Maybe Natural
a} :: GetResourceConfigHistory)

-- | The @nextToken@ string returned on a previous page that you use to get
-- the next page of results in a paginated response.
getResourceConfigHistory_nextToken :: Lens.Lens' GetResourceConfigHistory (Prelude.Maybe Prelude.Text)
getResourceConfigHistory_nextToken :: Lens' GetResourceConfigHistory (Maybe Text)
getResourceConfigHistory_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceConfigHistory' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetResourceConfigHistory
s@GetResourceConfigHistory' {} Maybe Text
a -> GetResourceConfigHistory
s {$sel:nextToken:GetResourceConfigHistory' :: Maybe Text
nextToken = Maybe Text
a} :: GetResourceConfigHistory)

-- | The resource type.
getResourceConfigHistory_resourceType :: Lens.Lens' GetResourceConfigHistory ResourceType
getResourceConfigHistory_resourceType :: Lens' GetResourceConfigHistory ResourceType
getResourceConfigHistory_resourceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceConfigHistory' {ResourceType
resourceType :: ResourceType
$sel:resourceType:GetResourceConfigHistory' :: GetResourceConfigHistory -> ResourceType
resourceType} -> ResourceType
resourceType) (\s :: GetResourceConfigHistory
s@GetResourceConfigHistory' {} ResourceType
a -> GetResourceConfigHistory
s {$sel:resourceType:GetResourceConfigHistory' :: ResourceType
resourceType = ResourceType
a} :: GetResourceConfigHistory)

-- | The ID of the resource (for example., @sg-xxxxxx@).
getResourceConfigHistory_resourceId :: Lens.Lens' GetResourceConfigHistory Prelude.Text
getResourceConfigHistory_resourceId :: Lens' GetResourceConfigHistory Text
getResourceConfigHistory_resourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceConfigHistory' {Text
resourceId :: Text
$sel:resourceId:GetResourceConfigHistory' :: GetResourceConfigHistory -> Text
resourceId} -> Text
resourceId) (\s :: GetResourceConfigHistory
s@GetResourceConfigHistory' {} Text
a -> GetResourceConfigHistory
s {$sel:resourceId:GetResourceConfigHistory' :: Text
resourceId = Text
a} :: GetResourceConfigHistory)

instance Core.AWSPager GetResourceConfigHistory where
  page :: GetResourceConfigHistory
-> AWSResponse GetResourceConfigHistory
-> Maybe GetResourceConfigHistory
page GetResourceConfigHistory
rq AWSResponse GetResourceConfigHistory
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse GetResourceConfigHistory
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' GetResourceConfigHistoryResponse (Maybe Text)
getResourceConfigHistoryResponse_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 GetResourceConfigHistory
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' GetResourceConfigHistoryResponse (Maybe [ConfigurationItem])
getResourceConfigHistoryResponse_configurationItems
            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.$ GetResourceConfigHistory
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' GetResourceConfigHistory (Maybe Text)
getResourceConfigHistory_nextToken
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse GetResourceConfigHistory
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' GetResourceConfigHistoryResponse (Maybe Text)
getResourceConfigHistoryResponse_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 GetResourceConfigHistory where
  type
    AWSResponse GetResourceConfigHistory =
      GetResourceConfigHistoryResponse
  request :: (Service -> Service)
-> GetResourceConfigHistory -> Request GetResourceConfigHistory
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 GetResourceConfigHistory
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetResourceConfigHistory)))
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 [ConfigurationItem]
-> Maybe Text -> Int -> GetResourceConfigHistoryResponse
GetResourceConfigHistoryResponse'
            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
"configurationItems"
                            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
"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 GetResourceConfigHistory where
  hashWithSalt :: Int -> GetResourceConfigHistory -> Int
hashWithSalt Int
_salt GetResourceConfigHistory' {Maybe Natural
Maybe Text
Maybe POSIX
Maybe ChronologicalOrder
Text
ResourceType
resourceId :: Text
resourceType :: ResourceType
nextToken :: Maybe Text
limit :: Maybe Natural
laterTime :: Maybe POSIX
earlierTime :: Maybe POSIX
chronologicalOrder :: Maybe ChronologicalOrder
$sel:resourceId:GetResourceConfigHistory' :: GetResourceConfigHistory -> Text
$sel:resourceType:GetResourceConfigHistory' :: GetResourceConfigHistory -> ResourceType
$sel:nextToken:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe Text
$sel:limit:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe Natural
$sel:laterTime:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe POSIX
$sel:earlierTime:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe POSIX
$sel:chronologicalOrder:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe ChronologicalOrder
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ChronologicalOrder
chronologicalOrder
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
earlierTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
laterTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
limit
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ResourceType
resourceType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
resourceId

instance Prelude.NFData GetResourceConfigHistory where
  rnf :: GetResourceConfigHistory -> ()
rnf GetResourceConfigHistory' {Maybe Natural
Maybe Text
Maybe POSIX
Maybe ChronologicalOrder
Text
ResourceType
resourceId :: Text
resourceType :: ResourceType
nextToken :: Maybe Text
limit :: Maybe Natural
laterTime :: Maybe POSIX
earlierTime :: Maybe POSIX
chronologicalOrder :: Maybe ChronologicalOrder
$sel:resourceId:GetResourceConfigHistory' :: GetResourceConfigHistory -> Text
$sel:resourceType:GetResourceConfigHistory' :: GetResourceConfigHistory -> ResourceType
$sel:nextToken:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe Text
$sel:limit:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe Natural
$sel:laterTime:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe POSIX
$sel:earlierTime:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe POSIX
$sel:chronologicalOrder:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe ChronologicalOrder
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ChronologicalOrder
chronologicalOrder
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
earlierTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
laterTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
limit
      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 ResourceType
resourceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
resourceId

instance Data.ToHeaders GetResourceConfigHistory where
  toHeaders :: GetResourceConfigHistory -> 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
"StarlingDoveService.GetResourceConfigHistory" ::
                          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 GetResourceConfigHistory where
  toJSON :: GetResourceConfigHistory -> Value
toJSON GetResourceConfigHistory' {Maybe Natural
Maybe Text
Maybe POSIX
Maybe ChronologicalOrder
Text
ResourceType
resourceId :: Text
resourceType :: ResourceType
nextToken :: Maybe Text
limit :: Maybe Natural
laterTime :: Maybe POSIX
earlierTime :: Maybe POSIX
chronologicalOrder :: Maybe ChronologicalOrder
$sel:resourceId:GetResourceConfigHistory' :: GetResourceConfigHistory -> Text
$sel:resourceType:GetResourceConfigHistory' :: GetResourceConfigHistory -> ResourceType
$sel:nextToken:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe Text
$sel:limit:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe Natural
$sel:laterTime:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe POSIX
$sel:earlierTime:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe POSIX
$sel:chronologicalOrder:GetResourceConfigHistory' :: GetResourceConfigHistory -> Maybe ChronologicalOrder
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"chronologicalOrder" 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 ChronologicalOrder
chronologicalOrder,
            (Key
"earlierTime" 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 POSIX
earlierTime,
            (Key
"laterTime" 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 POSIX
laterTime,
            (Key
"limit" 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
limit,
            (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,
            forall a. a -> Maybe a
Prelude.Just (Key
"resourceType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ResourceType
resourceType),
            forall a. a -> Maybe a
Prelude.Just (Key
"resourceId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
resourceId)
          ]
      )

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

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

-- | The output for the GetResourceConfigHistory action.
--
-- /See:/ 'newGetResourceConfigHistoryResponse' smart constructor.
data GetResourceConfigHistoryResponse = GetResourceConfigHistoryResponse'
  { -- | A list that contains the configuration history of one or more resources.
    GetResourceConfigHistoryResponse -> Maybe [ConfigurationItem]
configurationItems :: Prelude.Maybe [ConfigurationItem],
    -- | The string that you use in a subsequent request to get the next page of
    -- results in a paginated response.
    GetResourceConfigHistoryResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetResourceConfigHistoryResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetResourceConfigHistoryResponse
-> GetResourceConfigHistoryResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResourceConfigHistoryResponse
-> GetResourceConfigHistoryResponse -> Bool
$c/= :: GetResourceConfigHistoryResponse
-> GetResourceConfigHistoryResponse -> Bool
== :: GetResourceConfigHistoryResponse
-> GetResourceConfigHistoryResponse -> Bool
$c== :: GetResourceConfigHistoryResponse
-> GetResourceConfigHistoryResponse -> Bool
Prelude.Eq, ReadPrec [GetResourceConfigHistoryResponse]
ReadPrec GetResourceConfigHistoryResponse
Int -> ReadS GetResourceConfigHistoryResponse
ReadS [GetResourceConfigHistoryResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResourceConfigHistoryResponse]
$creadListPrec :: ReadPrec [GetResourceConfigHistoryResponse]
readPrec :: ReadPrec GetResourceConfigHistoryResponse
$creadPrec :: ReadPrec GetResourceConfigHistoryResponse
readList :: ReadS [GetResourceConfigHistoryResponse]
$creadList :: ReadS [GetResourceConfigHistoryResponse]
readsPrec :: Int -> ReadS GetResourceConfigHistoryResponse
$creadsPrec :: Int -> ReadS GetResourceConfigHistoryResponse
Prelude.Read, Int -> GetResourceConfigHistoryResponse -> ShowS
[GetResourceConfigHistoryResponse] -> ShowS
GetResourceConfigHistoryResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResourceConfigHistoryResponse] -> ShowS
$cshowList :: [GetResourceConfigHistoryResponse] -> ShowS
show :: GetResourceConfigHistoryResponse -> String
$cshow :: GetResourceConfigHistoryResponse -> String
showsPrec :: Int -> GetResourceConfigHistoryResponse -> ShowS
$cshowsPrec :: Int -> GetResourceConfigHistoryResponse -> ShowS
Prelude.Show, forall x.
Rep GetResourceConfigHistoryResponse x
-> GetResourceConfigHistoryResponse
forall x.
GetResourceConfigHistoryResponse
-> Rep GetResourceConfigHistoryResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetResourceConfigHistoryResponse x
-> GetResourceConfigHistoryResponse
$cfrom :: forall x.
GetResourceConfigHistoryResponse
-> Rep GetResourceConfigHistoryResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetResourceConfigHistoryResponse' 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:
--
-- 'configurationItems', 'getResourceConfigHistoryResponse_configurationItems' - A list that contains the configuration history of one or more resources.
--
-- 'nextToken', 'getResourceConfigHistoryResponse_nextToken' - The string that you use in a subsequent request to get the next page of
-- results in a paginated response.
--
-- 'httpStatus', 'getResourceConfigHistoryResponse_httpStatus' - The response's http status code.
newGetResourceConfigHistoryResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetResourceConfigHistoryResponse
newGetResourceConfigHistoryResponse :: Int -> GetResourceConfigHistoryResponse
newGetResourceConfigHistoryResponse Int
pHttpStatus_ =
  GetResourceConfigHistoryResponse'
    { $sel:configurationItems:GetResourceConfigHistoryResponse' :: Maybe [ConfigurationItem]
configurationItems =
        forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:GetResourceConfigHistoryResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetResourceConfigHistoryResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A list that contains the configuration history of one or more resources.
getResourceConfigHistoryResponse_configurationItems :: Lens.Lens' GetResourceConfigHistoryResponse (Prelude.Maybe [ConfigurationItem])
getResourceConfigHistoryResponse_configurationItems :: Lens' GetResourceConfigHistoryResponse (Maybe [ConfigurationItem])
getResourceConfigHistoryResponse_configurationItems = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceConfigHistoryResponse' {Maybe [ConfigurationItem]
configurationItems :: Maybe [ConfigurationItem]
$sel:configurationItems:GetResourceConfigHistoryResponse' :: GetResourceConfigHistoryResponse -> Maybe [ConfigurationItem]
configurationItems} -> Maybe [ConfigurationItem]
configurationItems) (\s :: GetResourceConfigHistoryResponse
s@GetResourceConfigHistoryResponse' {} Maybe [ConfigurationItem]
a -> GetResourceConfigHistoryResponse
s {$sel:configurationItems:GetResourceConfigHistoryResponse' :: Maybe [ConfigurationItem]
configurationItems = Maybe [ConfigurationItem]
a} :: GetResourceConfigHistoryResponse) 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 string that you use in a subsequent request to get the next page of
-- results in a paginated response.
getResourceConfigHistoryResponse_nextToken :: Lens.Lens' GetResourceConfigHistoryResponse (Prelude.Maybe Prelude.Text)
getResourceConfigHistoryResponse_nextToken :: Lens' GetResourceConfigHistoryResponse (Maybe Text)
getResourceConfigHistoryResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceConfigHistoryResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetResourceConfigHistoryResponse' :: GetResourceConfigHistoryResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetResourceConfigHistoryResponse
s@GetResourceConfigHistoryResponse' {} Maybe Text
a -> GetResourceConfigHistoryResponse
s {$sel:nextToken:GetResourceConfigHistoryResponse' :: Maybe Text
nextToken = Maybe Text
a} :: GetResourceConfigHistoryResponse)

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

instance
  Prelude.NFData
    GetResourceConfigHistoryResponse
  where
  rnf :: GetResourceConfigHistoryResponse -> ()
rnf GetResourceConfigHistoryResponse' {Int
Maybe [ConfigurationItem]
Maybe Text
httpStatus :: Int
nextToken :: Maybe Text
configurationItems :: Maybe [ConfigurationItem]
$sel:httpStatus:GetResourceConfigHistoryResponse' :: GetResourceConfigHistoryResponse -> Int
$sel:nextToken:GetResourceConfigHistoryResponse' :: GetResourceConfigHistoryResponse -> Maybe Text
$sel:configurationItems:GetResourceConfigHistoryResponse' :: GetResourceConfigHistoryResponse -> Maybe [ConfigurationItem]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [ConfigurationItem]
configurationItems
      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