{-# 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.GetAggregateDiscoveredResourceCounts
-- 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 the resource counts across accounts and regions that are present
-- in your Config aggregator. You can request the resource counts by
-- providing filters and GroupByKey.
--
-- For example, if the input contains accountID 12345678910 and region
-- us-east-1 in filters, the API returns the count of resources in account
-- ID 12345678910 and region us-east-1. If the input contains ACCOUNT_ID as
-- a GroupByKey, the API returns resource counts for all source accounts
-- that are present in your aggregator.
module Amazonka.Config.GetAggregateDiscoveredResourceCounts
  ( -- * Creating a Request
    GetAggregateDiscoveredResourceCounts (..),
    newGetAggregateDiscoveredResourceCounts,

    -- * Request Lenses
    getAggregateDiscoveredResourceCounts_filters,
    getAggregateDiscoveredResourceCounts_groupByKey,
    getAggregateDiscoveredResourceCounts_limit,
    getAggregateDiscoveredResourceCounts_nextToken,
    getAggregateDiscoveredResourceCounts_configurationAggregatorName,

    -- * Destructuring the Response
    GetAggregateDiscoveredResourceCountsResponse (..),
    newGetAggregateDiscoveredResourceCountsResponse,

    -- * Response Lenses
    getAggregateDiscoveredResourceCountsResponse_groupByKey,
    getAggregateDiscoveredResourceCountsResponse_groupedResourceCounts,
    getAggregateDiscoveredResourceCountsResponse_nextToken,
    getAggregateDiscoveredResourceCountsResponse_httpStatus,
    getAggregateDiscoveredResourceCountsResponse_totalDiscoveredResources,
  )
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

-- | /See:/ 'newGetAggregateDiscoveredResourceCounts' smart constructor.
data GetAggregateDiscoveredResourceCounts = GetAggregateDiscoveredResourceCounts'
  { -- | Filters the results based on the @ResourceCountFilters@ object.
    GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountFilters
filters :: Prelude.Maybe ResourceCountFilters,
    -- | The key to group the resource counts.
    GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountGroupKey
groupByKey :: Prelude.Maybe ResourceCountGroupKey,
    -- | The maximum number of GroupedResourceCount objects returned on each
    -- page. The default is 1000. You cannot specify a number greater than
    -- 1000. If you specify 0, Config uses the default.
    GetAggregateDiscoveredResourceCounts -> 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.
    GetAggregateDiscoveredResourceCounts -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The name of the configuration aggregator.
    GetAggregateDiscoveredResourceCounts -> Text
configurationAggregatorName :: Prelude.Text
  }
  deriving (GetAggregateDiscoveredResourceCounts
-> GetAggregateDiscoveredResourceCounts -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetAggregateDiscoveredResourceCounts
-> GetAggregateDiscoveredResourceCounts -> Bool
$c/= :: GetAggregateDiscoveredResourceCounts
-> GetAggregateDiscoveredResourceCounts -> Bool
== :: GetAggregateDiscoveredResourceCounts
-> GetAggregateDiscoveredResourceCounts -> Bool
$c== :: GetAggregateDiscoveredResourceCounts
-> GetAggregateDiscoveredResourceCounts -> Bool
Prelude.Eq, ReadPrec [GetAggregateDiscoveredResourceCounts]
ReadPrec GetAggregateDiscoveredResourceCounts
Int -> ReadS GetAggregateDiscoveredResourceCounts
ReadS [GetAggregateDiscoveredResourceCounts]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetAggregateDiscoveredResourceCounts]
$creadListPrec :: ReadPrec [GetAggregateDiscoveredResourceCounts]
readPrec :: ReadPrec GetAggregateDiscoveredResourceCounts
$creadPrec :: ReadPrec GetAggregateDiscoveredResourceCounts
readList :: ReadS [GetAggregateDiscoveredResourceCounts]
$creadList :: ReadS [GetAggregateDiscoveredResourceCounts]
readsPrec :: Int -> ReadS GetAggregateDiscoveredResourceCounts
$creadsPrec :: Int -> ReadS GetAggregateDiscoveredResourceCounts
Prelude.Read, Int -> GetAggregateDiscoveredResourceCounts -> ShowS
[GetAggregateDiscoveredResourceCounts] -> ShowS
GetAggregateDiscoveredResourceCounts -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetAggregateDiscoveredResourceCounts] -> ShowS
$cshowList :: [GetAggregateDiscoveredResourceCounts] -> ShowS
show :: GetAggregateDiscoveredResourceCounts -> String
$cshow :: GetAggregateDiscoveredResourceCounts -> String
showsPrec :: Int -> GetAggregateDiscoveredResourceCounts -> ShowS
$cshowsPrec :: Int -> GetAggregateDiscoveredResourceCounts -> ShowS
Prelude.Show, forall x.
Rep GetAggregateDiscoveredResourceCounts x
-> GetAggregateDiscoveredResourceCounts
forall x.
GetAggregateDiscoveredResourceCounts
-> Rep GetAggregateDiscoveredResourceCounts x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetAggregateDiscoveredResourceCounts x
-> GetAggregateDiscoveredResourceCounts
$cfrom :: forall x.
GetAggregateDiscoveredResourceCounts
-> Rep GetAggregateDiscoveredResourceCounts x
Prelude.Generic)

-- |
-- Create a value of 'GetAggregateDiscoveredResourceCounts' 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', 'getAggregateDiscoveredResourceCounts_filters' - Filters the results based on the @ResourceCountFilters@ object.
--
-- 'groupByKey', 'getAggregateDiscoveredResourceCounts_groupByKey' - The key to group the resource counts.
--
-- 'limit', 'getAggregateDiscoveredResourceCounts_limit' - The maximum number of GroupedResourceCount objects returned on each
-- page. The default is 1000. You cannot specify a number greater than
-- 1000. If you specify 0, Config uses the default.
--
-- 'nextToken', 'getAggregateDiscoveredResourceCounts_nextToken' - The @nextToken@ string returned on a previous page that you use to get
-- the next page of results in a paginated response.
--
-- 'configurationAggregatorName', 'getAggregateDiscoveredResourceCounts_configurationAggregatorName' - The name of the configuration aggregator.
newGetAggregateDiscoveredResourceCounts ::
  -- | 'configurationAggregatorName'
  Prelude.Text ->
  GetAggregateDiscoveredResourceCounts
newGetAggregateDiscoveredResourceCounts :: Text -> GetAggregateDiscoveredResourceCounts
newGetAggregateDiscoveredResourceCounts
  Text
pConfigurationAggregatorName_ =
    GetAggregateDiscoveredResourceCounts'
      { $sel:filters:GetAggregateDiscoveredResourceCounts' :: Maybe ResourceCountFilters
filters =
          forall a. Maybe a
Prelude.Nothing,
        $sel:groupByKey:GetAggregateDiscoveredResourceCounts' :: Maybe ResourceCountGroupKey
groupByKey = forall a. Maybe a
Prelude.Nothing,
        $sel:limit:GetAggregateDiscoveredResourceCounts' :: Maybe Natural
limit = forall a. Maybe a
Prelude.Nothing,
        $sel:nextToken:GetAggregateDiscoveredResourceCounts' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
        $sel:configurationAggregatorName:GetAggregateDiscoveredResourceCounts' :: Text
configurationAggregatorName =
          Text
pConfigurationAggregatorName_
      }

-- | Filters the results based on the @ResourceCountFilters@ object.
getAggregateDiscoveredResourceCounts_filters :: Lens.Lens' GetAggregateDiscoveredResourceCounts (Prelude.Maybe ResourceCountFilters)
getAggregateDiscoveredResourceCounts_filters :: Lens'
  GetAggregateDiscoveredResourceCounts (Maybe ResourceCountFilters)
getAggregateDiscoveredResourceCounts_filters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAggregateDiscoveredResourceCounts' {Maybe ResourceCountFilters
filters :: Maybe ResourceCountFilters
$sel:filters:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountFilters
filters} -> Maybe ResourceCountFilters
filters) (\s :: GetAggregateDiscoveredResourceCounts
s@GetAggregateDiscoveredResourceCounts' {} Maybe ResourceCountFilters
a -> GetAggregateDiscoveredResourceCounts
s {$sel:filters:GetAggregateDiscoveredResourceCounts' :: Maybe ResourceCountFilters
filters = Maybe ResourceCountFilters
a} :: GetAggregateDiscoveredResourceCounts)

-- | The key to group the resource counts.
getAggregateDiscoveredResourceCounts_groupByKey :: Lens.Lens' GetAggregateDiscoveredResourceCounts (Prelude.Maybe ResourceCountGroupKey)
getAggregateDiscoveredResourceCounts_groupByKey :: Lens'
  GetAggregateDiscoveredResourceCounts (Maybe ResourceCountGroupKey)
getAggregateDiscoveredResourceCounts_groupByKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAggregateDiscoveredResourceCounts' {Maybe ResourceCountGroupKey
groupByKey :: Maybe ResourceCountGroupKey
$sel:groupByKey:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountGroupKey
groupByKey} -> Maybe ResourceCountGroupKey
groupByKey) (\s :: GetAggregateDiscoveredResourceCounts
s@GetAggregateDiscoveredResourceCounts' {} Maybe ResourceCountGroupKey
a -> GetAggregateDiscoveredResourceCounts
s {$sel:groupByKey:GetAggregateDiscoveredResourceCounts' :: Maybe ResourceCountGroupKey
groupByKey = Maybe ResourceCountGroupKey
a} :: GetAggregateDiscoveredResourceCounts)

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

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

-- | The name of the configuration aggregator.
getAggregateDiscoveredResourceCounts_configurationAggregatorName :: Lens.Lens' GetAggregateDiscoveredResourceCounts Prelude.Text
getAggregateDiscoveredResourceCounts_configurationAggregatorName :: Lens' GetAggregateDiscoveredResourceCounts Text
getAggregateDiscoveredResourceCounts_configurationAggregatorName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAggregateDiscoveredResourceCounts' {Text
configurationAggregatorName :: Text
$sel:configurationAggregatorName:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Text
configurationAggregatorName} -> Text
configurationAggregatorName) (\s :: GetAggregateDiscoveredResourceCounts
s@GetAggregateDiscoveredResourceCounts' {} Text
a -> GetAggregateDiscoveredResourceCounts
s {$sel:configurationAggregatorName:GetAggregateDiscoveredResourceCounts' :: Text
configurationAggregatorName = Text
a} :: GetAggregateDiscoveredResourceCounts)

instance
  Core.AWSRequest
    GetAggregateDiscoveredResourceCounts
  where
  type
    AWSResponse GetAggregateDiscoveredResourceCounts =
      GetAggregateDiscoveredResourceCountsResponse
  request :: (Service -> Service)
-> GetAggregateDiscoveredResourceCounts
-> Request GetAggregateDiscoveredResourceCounts
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 GetAggregateDiscoveredResourceCounts
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse GetAggregateDiscoveredResourceCounts)))
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 [GroupedResourceCount]
-> Maybe Text
-> Int
-> Integer
-> GetAggregateDiscoveredResourceCountsResponse
GetAggregateDiscoveredResourceCountsResponse'
            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
"GroupByKey")
            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
"GroupedResourceCounts"
                            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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"TotalDiscoveredResources")
      )

instance
  Prelude.Hashable
    GetAggregateDiscoveredResourceCounts
  where
  hashWithSalt :: Int -> GetAggregateDiscoveredResourceCounts -> Int
hashWithSalt
    Int
_salt
    GetAggregateDiscoveredResourceCounts' {Maybe Natural
Maybe Text
Maybe ResourceCountGroupKey
Maybe ResourceCountFilters
Text
configurationAggregatorName :: Text
nextToken :: Maybe Text
limit :: Maybe Natural
groupByKey :: Maybe ResourceCountGroupKey
filters :: Maybe ResourceCountFilters
$sel:configurationAggregatorName:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Text
$sel:nextToken:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe Text
$sel:limit:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe Natural
$sel:groupByKey:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountGroupKey
$sel:filters:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountFilters
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceCountFilters
filters
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceCountGroupKey
groupByKey
        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` Text
configurationAggregatorName

instance
  Prelude.NFData
    GetAggregateDiscoveredResourceCounts
  where
  rnf :: GetAggregateDiscoveredResourceCounts -> ()
rnf GetAggregateDiscoveredResourceCounts' {Maybe Natural
Maybe Text
Maybe ResourceCountGroupKey
Maybe ResourceCountFilters
Text
configurationAggregatorName :: Text
nextToken :: Maybe Text
limit :: Maybe Natural
groupByKey :: Maybe ResourceCountGroupKey
filters :: Maybe ResourceCountFilters
$sel:configurationAggregatorName:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Text
$sel:nextToken:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe Text
$sel:limit:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe Natural
$sel:groupByKey:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountGroupKey
$sel:filters:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountFilters
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceCountFilters
filters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceCountGroupKey
groupByKey
      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 Text
configurationAggregatorName

instance
  Data.ToHeaders
    GetAggregateDiscoveredResourceCounts
  where
  toHeaders :: GetAggregateDiscoveredResourceCounts -> 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.GetAggregateDiscoveredResourceCounts" ::
                          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
    GetAggregateDiscoveredResourceCounts
  where
  toJSON :: GetAggregateDiscoveredResourceCounts -> Value
toJSON GetAggregateDiscoveredResourceCounts' {Maybe Natural
Maybe Text
Maybe ResourceCountGroupKey
Maybe ResourceCountFilters
Text
configurationAggregatorName :: Text
nextToken :: Maybe Text
limit :: Maybe Natural
groupByKey :: Maybe ResourceCountGroupKey
filters :: Maybe ResourceCountFilters
$sel:configurationAggregatorName:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Text
$sel:nextToken:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe Text
$sel:limit:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe Natural
$sel:groupByKey:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountGroupKey
$sel:filters:GetAggregateDiscoveredResourceCounts' :: GetAggregateDiscoveredResourceCounts -> Maybe ResourceCountFilters
..} =
    [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 ResourceCountFilters
filters,
            (Key
"GroupByKey" 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 ResourceCountGroupKey
groupByKey,
            (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
"ConfigurationAggregatorName"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
configurationAggregatorName
              )
          ]
      )

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

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

-- | /See:/ 'newGetAggregateDiscoveredResourceCountsResponse' smart constructor.
data GetAggregateDiscoveredResourceCountsResponse = GetAggregateDiscoveredResourceCountsResponse'
  { -- | The key passed into the request object. If @GroupByKey@ is not provided,
    -- the result will be empty.
    GetAggregateDiscoveredResourceCountsResponse -> Maybe Text
groupByKey :: Prelude.Maybe Prelude.Text,
    -- | Returns a list of GroupedResourceCount objects.
    GetAggregateDiscoveredResourceCountsResponse
-> Maybe [GroupedResourceCount]
groupedResourceCounts :: Prelude.Maybe [GroupedResourceCount],
    -- | The @nextToken@ string returned on a previous page that you use to get
    -- the next page of results in a paginated response.
    GetAggregateDiscoveredResourceCountsResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetAggregateDiscoveredResourceCountsResponse -> Int
httpStatus :: Prelude.Int,
    -- | The total number of resources that are present in an aggregator with the
    -- filters that you provide.
    GetAggregateDiscoveredResourceCountsResponse -> Integer
totalDiscoveredResources :: Prelude.Integer
  }
  deriving (GetAggregateDiscoveredResourceCountsResponse
-> GetAggregateDiscoveredResourceCountsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetAggregateDiscoveredResourceCountsResponse
-> GetAggregateDiscoveredResourceCountsResponse -> Bool
$c/= :: GetAggregateDiscoveredResourceCountsResponse
-> GetAggregateDiscoveredResourceCountsResponse -> Bool
== :: GetAggregateDiscoveredResourceCountsResponse
-> GetAggregateDiscoveredResourceCountsResponse -> Bool
$c== :: GetAggregateDiscoveredResourceCountsResponse
-> GetAggregateDiscoveredResourceCountsResponse -> Bool
Prelude.Eq, ReadPrec [GetAggregateDiscoveredResourceCountsResponse]
ReadPrec GetAggregateDiscoveredResourceCountsResponse
Int -> ReadS GetAggregateDiscoveredResourceCountsResponse
ReadS [GetAggregateDiscoveredResourceCountsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetAggregateDiscoveredResourceCountsResponse]
$creadListPrec :: ReadPrec [GetAggregateDiscoveredResourceCountsResponse]
readPrec :: ReadPrec GetAggregateDiscoveredResourceCountsResponse
$creadPrec :: ReadPrec GetAggregateDiscoveredResourceCountsResponse
readList :: ReadS [GetAggregateDiscoveredResourceCountsResponse]
$creadList :: ReadS [GetAggregateDiscoveredResourceCountsResponse]
readsPrec :: Int -> ReadS GetAggregateDiscoveredResourceCountsResponse
$creadsPrec :: Int -> ReadS GetAggregateDiscoveredResourceCountsResponse
Prelude.Read, Int -> GetAggregateDiscoveredResourceCountsResponse -> ShowS
[GetAggregateDiscoveredResourceCountsResponse] -> ShowS
GetAggregateDiscoveredResourceCountsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetAggregateDiscoveredResourceCountsResponse] -> ShowS
$cshowList :: [GetAggregateDiscoveredResourceCountsResponse] -> ShowS
show :: GetAggregateDiscoveredResourceCountsResponse -> String
$cshow :: GetAggregateDiscoveredResourceCountsResponse -> String
showsPrec :: Int -> GetAggregateDiscoveredResourceCountsResponse -> ShowS
$cshowsPrec :: Int -> GetAggregateDiscoveredResourceCountsResponse -> ShowS
Prelude.Show, forall x.
Rep GetAggregateDiscoveredResourceCountsResponse x
-> GetAggregateDiscoveredResourceCountsResponse
forall x.
GetAggregateDiscoveredResourceCountsResponse
-> Rep GetAggregateDiscoveredResourceCountsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetAggregateDiscoveredResourceCountsResponse x
-> GetAggregateDiscoveredResourceCountsResponse
$cfrom :: forall x.
GetAggregateDiscoveredResourceCountsResponse
-> Rep GetAggregateDiscoveredResourceCountsResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetAggregateDiscoveredResourceCountsResponse' 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:
--
-- 'groupByKey', 'getAggregateDiscoveredResourceCountsResponse_groupByKey' - The key passed into the request object. If @GroupByKey@ is not provided,
-- the result will be empty.
--
-- 'groupedResourceCounts', 'getAggregateDiscoveredResourceCountsResponse_groupedResourceCounts' - Returns a list of GroupedResourceCount objects.
--
-- 'nextToken', 'getAggregateDiscoveredResourceCountsResponse_nextToken' - The @nextToken@ string returned on a previous page that you use to get
-- the next page of results in a paginated response.
--
-- 'httpStatus', 'getAggregateDiscoveredResourceCountsResponse_httpStatus' - The response's http status code.
--
-- 'totalDiscoveredResources', 'getAggregateDiscoveredResourceCountsResponse_totalDiscoveredResources' - The total number of resources that are present in an aggregator with the
-- filters that you provide.
newGetAggregateDiscoveredResourceCountsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'totalDiscoveredResources'
  Prelude.Integer ->
  GetAggregateDiscoveredResourceCountsResponse
newGetAggregateDiscoveredResourceCountsResponse :: Int -> Integer -> GetAggregateDiscoveredResourceCountsResponse
newGetAggregateDiscoveredResourceCountsResponse
  Int
pHttpStatus_
  Integer
pTotalDiscoveredResources_ =
    GetAggregateDiscoveredResourceCountsResponse'
      { $sel:groupByKey:GetAggregateDiscoveredResourceCountsResponse' :: Maybe Text
groupByKey =
          forall a. Maybe a
Prelude.Nothing,
        $sel:groupedResourceCounts:GetAggregateDiscoveredResourceCountsResponse' :: Maybe [GroupedResourceCount]
groupedResourceCounts =
          forall a. Maybe a
Prelude.Nothing,
        $sel:nextToken:GetAggregateDiscoveredResourceCountsResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetAggregateDiscoveredResourceCountsResponse' :: Int
httpStatus = Int
pHttpStatus_,
        $sel:totalDiscoveredResources:GetAggregateDiscoveredResourceCountsResponse' :: Integer
totalDiscoveredResources =
          Integer
pTotalDiscoveredResources_
      }

-- | The key passed into the request object. If @GroupByKey@ is not provided,
-- the result will be empty.
getAggregateDiscoveredResourceCountsResponse_groupByKey :: Lens.Lens' GetAggregateDiscoveredResourceCountsResponse (Prelude.Maybe Prelude.Text)
getAggregateDiscoveredResourceCountsResponse_groupByKey :: Lens' GetAggregateDiscoveredResourceCountsResponse (Maybe Text)
getAggregateDiscoveredResourceCountsResponse_groupByKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAggregateDiscoveredResourceCountsResponse' {Maybe Text
groupByKey :: Maybe Text
$sel:groupByKey:GetAggregateDiscoveredResourceCountsResponse' :: GetAggregateDiscoveredResourceCountsResponse -> Maybe Text
groupByKey} -> Maybe Text
groupByKey) (\s :: GetAggregateDiscoveredResourceCountsResponse
s@GetAggregateDiscoveredResourceCountsResponse' {} Maybe Text
a -> GetAggregateDiscoveredResourceCountsResponse
s {$sel:groupByKey:GetAggregateDiscoveredResourceCountsResponse' :: Maybe Text
groupByKey = Maybe Text
a} :: GetAggregateDiscoveredResourceCountsResponse)

-- | Returns a list of GroupedResourceCount objects.
getAggregateDiscoveredResourceCountsResponse_groupedResourceCounts :: Lens.Lens' GetAggregateDiscoveredResourceCountsResponse (Prelude.Maybe [GroupedResourceCount])
getAggregateDiscoveredResourceCountsResponse_groupedResourceCounts :: Lens'
  GetAggregateDiscoveredResourceCountsResponse
  (Maybe [GroupedResourceCount])
getAggregateDiscoveredResourceCountsResponse_groupedResourceCounts = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAggregateDiscoveredResourceCountsResponse' {Maybe [GroupedResourceCount]
groupedResourceCounts :: Maybe [GroupedResourceCount]
$sel:groupedResourceCounts:GetAggregateDiscoveredResourceCountsResponse' :: GetAggregateDiscoveredResourceCountsResponse
-> Maybe [GroupedResourceCount]
groupedResourceCounts} -> Maybe [GroupedResourceCount]
groupedResourceCounts) (\s :: GetAggregateDiscoveredResourceCountsResponse
s@GetAggregateDiscoveredResourceCountsResponse' {} Maybe [GroupedResourceCount]
a -> GetAggregateDiscoveredResourceCountsResponse
s {$sel:groupedResourceCounts:GetAggregateDiscoveredResourceCountsResponse' :: Maybe [GroupedResourceCount]
groupedResourceCounts = Maybe [GroupedResourceCount]
a} :: GetAggregateDiscoveredResourceCountsResponse) 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 @nextToken@ string returned on a previous page that you use to get
-- the next page of results in a paginated response.
getAggregateDiscoveredResourceCountsResponse_nextToken :: Lens.Lens' GetAggregateDiscoveredResourceCountsResponse (Prelude.Maybe Prelude.Text)
getAggregateDiscoveredResourceCountsResponse_nextToken :: Lens' GetAggregateDiscoveredResourceCountsResponse (Maybe Text)
getAggregateDiscoveredResourceCountsResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAggregateDiscoveredResourceCountsResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:GetAggregateDiscoveredResourceCountsResponse' :: GetAggregateDiscoveredResourceCountsResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: GetAggregateDiscoveredResourceCountsResponse
s@GetAggregateDiscoveredResourceCountsResponse' {} Maybe Text
a -> GetAggregateDiscoveredResourceCountsResponse
s {$sel:nextToken:GetAggregateDiscoveredResourceCountsResponse' :: Maybe Text
nextToken = Maybe Text
a} :: GetAggregateDiscoveredResourceCountsResponse)

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

-- | The total number of resources that are present in an aggregator with the
-- filters that you provide.
getAggregateDiscoveredResourceCountsResponse_totalDiscoveredResources :: Lens.Lens' GetAggregateDiscoveredResourceCountsResponse Prelude.Integer
getAggregateDiscoveredResourceCountsResponse_totalDiscoveredResources :: Lens' GetAggregateDiscoveredResourceCountsResponse Integer
getAggregateDiscoveredResourceCountsResponse_totalDiscoveredResources = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetAggregateDiscoveredResourceCountsResponse' {Integer
totalDiscoveredResources :: Integer
$sel:totalDiscoveredResources:GetAggregateDiscoveredResourceCountsResponse' :: GetAggregateDiscoveredResourceCountsResponse -> Integer
totalDiscoveredResources} -> Integer
totalDiscoveredResources) (\s :: GetAggregateDiscoveredResourceCountsResponse
s@GetAggregateDiscoveredResourceCountsResponse' {} Integer
a -> GetAggregateDiscoveredResourceCountsResponse
s {$sel:totalDiscoveredResources:GetAggregateDiscoveredResourceCountsResponse' :: Integer
totalDiscoveredResources = Integer
a} :: GetAggregateDiscoveredResourceCountsResponse)

instance
  Prelude.NFData
    GetAggregateDiscoveredResourceCountsResponse
  where
  rnf :: GetAggregateDiscoveredResourceCountsResponse -> ()
rnf GetAggregateDiscoveredResourceCountsResponse' {Int
Integer
Maybe [GroupedResourceCount]
Maybe Text
totalDiscoveredResources :: Integer
httpStatus :: Int
nextToken :: Maybe Text
groupedResourceCounts :: Maybe [GroupedResourceCount]
groupByKey :: Maybe Text
$sel:totalDiscoveredResources:GetAggregateDiscoveredResourceCountsResponse' :: GetAggregateDiscoveredResourceCountsResponse -> Integer
$sel:httpStatus:GetAggregateDiscoveredResourceCountsResponse' :: GetAggregateDiscoveredResourceCountsResponse -> Int
$sel:nextToken:GetAggregateDiscoveredResourceCountsResponse' :: GetAggregateDiscoveredResourceCountsResponse -> Maybe Text
$sel:groupedResourceCounts:GetAggregateDiscoveredResourceCountsResponse' :: GetAggregateDiscoveredResourceCountsResponse
-> Maybe [GroupedResourceCount]
$sel:groupByKey:GetAggregateDiscoveredResourceCountsResponse' :: GetAggregateDiscoveredResourceCountsResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
groupByKey
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [GroupedResourceCount]
groupedResourceCounts
      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
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Integer
totalDiscoveredResources