{-# 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.GetComplianceSummaryByResourceType
-- 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 number of resources that are compliant and the number that
-- are noncompliant. You can specify one or more resource types to get
-- these numbers for each resource type. The maximum number returned is
-- 100.
module Amazonka.Config.GetComplianceSummaryByResourceType
  ( -- * Creating a Request
    GetComplianceSummaryByResourceType (..),
    newGetComplianceSummaryByResourceType,

    -- * Request Lenses
    getComplianceSummaryByResourceType_resourceTypes,

    -- * Destructuring the Response
    GetComplianceSummaryByResourceTypeResponse (..),
    newGetComplianceSummaryByResourceTypeResponse,

    -- * Response Lenses
    getComplianceSummaryByResourceTypeResponse_complianceSummariesByResourceType,
    getComplianceSummaryByResourceTypeResponse_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

-- |
--
-- /See:/ 'newGetComplianceSummaryByResourceType' smart constructor.
data GetComplianceSummaryByResourceType = GetComplianceSummaryByResourceType'
  { -- | Specify one or more resource types to get the number of resources that
    -- are compliant and the number that are noncompliant for each resource
    -- type.
    --
    -- For this request, you can specify an Amazon Web Services resource type
    -- such as @AWS::EC2::Instance@. You can specify that the resource type is
    -- an Amazon Web Services account by specifying @AWS::::Account@.
    GetComplianceSummaryByResourceType -> Maybe [Text]
resourceTypes :: Prelude.Maybe [Prelude.Text]
  }
  deriving (GetComplianceSummaryByResourceType
-> GetComplianceSummaryByResourceType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetComplianceSummaryByResourceType
-> GetComplianceSummaryByResourceType -> Bool
$c/= :: GetComplianceSummaryByResourceType
-> GetComplianceSummaryByResourceType -> Bool
== :: GetComplianceSummaryByResourceType
-> GetComplianceSummaryByResourceType -> Bool
$c== :: GetComplianceSummaryByResourceType
-> GetComplianceSummaryByResourceType -> Bool
Prelude.Eq, ReadPrec [GetComplianceSummaryByResourceType]
ReadPrec GetComplianceSummaryByResourceType
Int -> ReadS GetComplianceSummaryByResourceType
ReadS [GetComplianceSummaryByResourceType]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetComplianceSummaryByResourceType]
$creadListPrec :: ReadPrec [GetComplianceSummaryByResourceType]
readPrec :: ReadPrec GetComplianceSummaryByResourceType
$creadPrec :: ReadPrec GetComplianceSummaryByResourceType
readList :: ReadS [GetComplianceSummaryByResourceType]
$creadList :: ReadS [GetComplianceSummaryByResourceType]
readsPrec :: Int -> ReadS GetComplianceSummaryByResourceType
$creadsPrec :: Int -> ReadS GetComplianceSummaryByResourceType
Prelude.Read, Int -> GetComplianceSummaryByResourceType -> ShowS
[GetComplianceSummaryByResourceType] -> ShowS
GetComplianceSummaryByResourceType -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetComplianceSummaryByResourceType] -> ShowS
$cshowList :: [GetComplianceSummaryByResourceType] -> ShowS
show :: GetComplianceSummaryByResourceType -> String
$cshow :: GetComplianceSummaryByResourceType -> String
showsPrec :: Int -> GetComplianceSummaryByResourceType -> ShowS
$cshowsPrec :: Int -> GetComplianceSummaryByResourceType -> ShowS
Prelude.Show, forall x.
Rep GetComplianceSummaryByResourceType x
-> GetComplianceSummaryByResourceType
forall x.
GetComplianceSummaryByResourceType
-> Rep GetComplianceSummaryByResourceType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetComplianceSummaryByResourceType x
-> GetComplianceSummaryByResourceType
$cfrom :: forall x.
GetComplianceSummaryByResourceType
-> Rep GetComplianceSummaryByResourceType x
Prelude.Generic)

-- |
-- Create a value of 'GetComplianceSummaryByResourceType' 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:
--
-- 'resourceTypes', 'getComplianceSummaryByResourceType_resourceTypes' - Specify one or more resource types to get the number of resources that
-- are compliant and the number that are noncompliant for each resource
-- type.
--
-- For this request, you can specify an Amazon Web Services resource type
-- such as @AWS::EC2::Instance@. You can specify that the resource type is
-- an Amazon Web Services account by specifying @AWS::::Account@.
newGetComplianceSummaryByResourceType ::
  GetComplianceSummaryByResourceType
newGetComplianceSummaryByResourceType :: GetComplianceSummaryByResourceType
newGetComplianceSummaryByResourceType =
  GetComplianceSummaryByResourceType'
    { $sel:resourceTypes:GetComplianceSummaryByResourceType' :: Maybe [Text]
resourceTypes =
        forall a. Maybe a
Prelude.Nothing
    }

-- | Specify one or more resource types to get the number of resources that
-- are compliant and the number that are noncompliant for each resource
-- type.
--
-- For this request, you can specify an Amazon Web Services resource type
-- such as @AWS::EC2::Instance@. You can specify that the resource type is
-- an Amazon Web Services account by specifying @AWS::::Account@.
getComplianceSummaryByResourceType_resourceTypes :: Lens.Lens' GetComplianceSummaryByResourceType (Prelude.Maybe [Prelude.Text])
getComplianceSummaryByResourceType_resourceTypes :: Lens' GetComplianceSummaryByResourceType (Maybe [Text])
getComplianceSummaryByResourceType_resourceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetComplianceSummaryByResourceType' {Maybe [Text]
resourceTypes :: Maybe [Text]
$sel:resourceTypes:GetComplianceSummaryByResourceType' :: GetComplianceSummaryByResourceType -> Maybe [Text]
resourceTypes} -> Maybe [Text]
resourceTypes) (\s :: GetComplianceSummaryByResourceType
s@GetComplianceSummaryByResourceType' {} Maybe [Text]
a -> GetComplianceSummaryByResourceType
s {$sel:resourceTypes:GetComplianceSummaryByResourceType' :: Maybe [Text]
resourceTypes = Maybe [Text]
a} :: GetComplianceSummaryByResourceType) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance
  Core.AWSRequest
    GetComplianceSummaryByResourceType
  where
  type
    AWSResponse GetComplianceSummaryByResourceType =
      GetComplianceSummaryByResourceTypeResponse
  request :: (Service -> Service)
-> GetComplianceSummaryByResourceType
-> Request GetComplianceSummaryByResourceType
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 GetComplianceSummaryByResourceType
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse GetComplianceSummaryByResourceType)))
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 [ComplianceSummaryByResourceType]
-> Int -> GetComplianceSummaryByResourceTypeResponse
GetComplianceSummaryByResourceTypeResponse'
            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
"ComplianceSummariesByResourceType"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    GetComplianceSummaryByResourceType
  where
  hashWithSalt :: Int -> GetComplianceSummaryByResourceType -> Int
hashWithSalt
    Int
_salt
    GetComplianceSummaryByResourceType' {Maybe [Text]
resourceTypes :: Maybe [Text]
$sel:resourceTypes:GetComplianceSummaryByResourceType' :: GetComplianceSummaryByResourceType -> Maybe [Text]
..} =
      Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
resourceTypes

instance
  Prelude.NFData
    GetComplianceSummaryByResourceType
  where
  rnf :: GetComplianceSummaryByResourceType -> ()
rnf GetComplianceSummaryByResourceType' {Maybe [Text]
resourceTypes :: Maybe [Text]
$sel:resourceTypes:GetComplianceSummaryByResourceType' :: GetComplianceSummaryByResourceType -> Maybe [Text]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
resourceTypes

instance
  Data.ToHeaders
    GetComplianceSummaryByResourceType
  where
  toHeaders :: GetComplianceSummaryByResourceType -> 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.GetComplianceSummaryByResourceType" ::
                          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
    GetComplianceSummaryByResourceType
  where
  toJSON :: GetComplianceSummaryByResourceType -> Value
toJSON GetComplianceSummaryByResourceType' {Maybe [Text]
resourceTypes :: Maybe [Text]
$sel:resourceTypes:GetComplianceSummaryByResourceType' :: GetComplianceSummaryByResourceType -> Maybe [Text]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ResourceTypes" 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]
resourceTypes
          ]
      )

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

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

-- |
--
-- /See:/ 'newGetComplianceSummaryByResourceTypeResponse' smart constructor.
data GetComplianceSummaryByResourceTypeResponse = GetComplianceSummaryByResourceTypeResponse'
  { -- | The number of resources that are compliant and the number that are
    -- noncompliant. If one or more resource types were provided with the
    -- request, the numbers are returned for each resource type. The maximum
    -- number returned is 100.
    GetComplianceSummaryByResourceTypeResponse
-> Maybe [ComplianceSummaryByResourceType]
complianceSummariesByResourceType :: Prelude.Maybe [ComplianceSummaryByResourceType],
    -- | The response's http status code.
    GetComplianceSummaryByResourceTypeResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetComplianceSummaryByResourceTypeResponse
-> GetComplianceSummaryByResourceTypeResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetComplianceSummaryByResourceTypeResponse
-> GetComplianceSummaryByResourceTypeResponse -> Bool
$c/= :: GetComplianceSummaryByResourceTypeResponse
-> GetComplianceSummaryByResourceTypeResponse -> Bool
== :: GetComplianceSummaryByResourceTypeResponse
-> GetComplianceSummaryByResourceTypeResponse -> Bool
$c== :: GetComplianceSummaryByResourceTypeResponse
-> GetComplianceSummaryByResourceTypeResponse -> Bool
Prelude.Eq, ReadPrec [GetComplianceSummaryByResourceTypeResponse]
ReadPrec GetComplianceSummaryByResourceTypeResponse
Int -> ReadS GetComplianceSummaryByResourceTypeResponse
ReadS [GetComplianceSummaryByResourceTypeResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetComplianceSummaryByResourceTypeResponse]
$creadListPrec :: ReadPrec [GetComplianceSummaryByResourceTypeResponse]
readPrec :: ReadPrec GetComplianceSummaryByResourceTypeResponse
$creadPrec :: ReadPrec GetComplianceSummaryByResourceTypeResponse
readList :: ReadS [GetComplianceSummaryByResourceTypeResponse]
$creadList :: ReadS [GetComplianceSummaryByResourceTypeResponse]
readsPrec :: Int -> ReadS GetComplianceSummaryByResourceTypeResponse
$creadsPrec :: Int -> ReadS GetComplianceSummaryByResourceTypeResponse
Prelude.Read, Int -> GetComplianceSummaryByResourceTypeResponse -> ShowS
[GetComplianceSummaryByResourceTypeResponse] -> ShowS
GetComplianceSummaryByResourceTypeResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetComplianceSummaryByResourceTypeResponse] -> ShowS
$cshowList :: [GetComplianceSummaryByResourceTypeResponse] -> ShowS
show :: GetComplianceSummaryByResourceTypeResponse -> String
$cshow :: GetComplianceSummaryByResourceTypeResponse -> String
showsPrec :: Int -> GetComplianceSummaryByResourceTypeResponse -> ShowS
$cshowsPrec :: Int -> GetComplianceSummaryByResourceTypeResponse -> ShowS
Prelude.Show, forall x.
Rep GetComplianceSummaryByResourceTypeResponse x
-> GetComplianceSummaryByResourceTypeResponse
forall x.
GetComplianceSummaryByResourceTypeResponse
-> Rep GetComplianceSummaryByResourceTypeResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetComplianceSummaryByResourceTypeResponse x
-> GetComplianceSummaryByResourceTypeResponse
$cfrom :: forall x.
GetComplianceSummaryByResourceTypeResponse
-> Rep GetComplianceSummaryByResourceTypeResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetComplianceSummaryByResourceTypeResponse' 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:
--
-- 'complianceSummariesByResourceType', 'getComplianceSummaryByResourceTypeResponse_complianceSummariesByResourceType' - The number of resources that are compliant and the number that are
-- noncompliant. If one or more resource types were provided with the
-- request, the numbers are returned for each resource type. The maximum
-- number returned is 100.
--
-- 'httpStatus', 'getComplianceSummaryByResourceTypeResponse_httpStatus' - The response's http status code.
newGetComplianceSummaryByResourceTypeResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetComplianceSummaryByResourceTypeResponse
newGetComplianceSummaryByResourceTypeResponse :: Int -> GetComplianceSummaryByResourceTypeResponse
newGetComplianceSummaryByResourceTypeResponse
  Int
pHttpStatus_ =
    GetComplianceSummaryByResourceTypeResponse'
      { $sel:complianceSummariesByResourceType:GetComplianceSummaryByResourceTypeResponse' :: Maybe [ComplianceSummaryByResourceType]
complianceSummariesByResourceType =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetComplianceSummaryByResourceTypeResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | The number of resources that are compliant and the number that are
-- noncompliant. If one or more resource types were provided with the
-- request, the numbers are returned for each resource type. The maximum
-- number returned is 100.
getComplianceSummaryByResourceTypeResponse_complianceSummariesByResourceType :: Lens.Lens' GetComplianceSummaryByResourceTypeResponse (Prelude.Maybe [ComplianceSummaryByResourceType])
getComplianceSummaryByResourceTypeResponse_complianceSummariesByResourceType :: Lens'
  GetComplianceSummaryByResourceTypeResponse
  (Maybe [ComplianceSummaryByResourceType])
getComplianceSummaryByResourceTypeResponse_complianceSummariesByResourceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetComplianceSummaryByResourceTypeResponse' {Maybe [ComplianceSummaryByResourceType]
complianceSummariesByResourceType :: Maybe [ComplianceSummaryByResourceType]
$sel:complianceSummariesByResourceType:GetComplianceSummaryByResourceTypeResponse' :: GetComplianceSummaryByResourceTypeResponse
-> Maybe [ComplianceSummaryByResourceType]
complianceSummariesByResourceType} -> Maybe [ComplianceSummaryByResourceType]
complianceSummariesByResourceType) (\s :: GetComplianceSummaryByResourceTypeResponse
s@GetComplianceSummaryByResourceTypeResponse' {} Maybe [ComplianceSummaryByResourceType]
a -> GetComplianceSummaryByResourceTypeResponse
s {$sel:complianceSummariesByResourceType:GetComplianceSummaryByResourceTypeResponse' :: Maybe [ComplianceSummaryByResourceType]
complianceSummariesByResourceType = Maybe [ComplianceSummaryByResourceType]
a} :: GetComplianceSummaryByResourceTypeResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

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

instance
  Prelude.NFData
    GetComplianceSummaryByResourceTypeResponse
  where
  rnf :: GetComplianceSummaryByResourceTypeResponse -> ()
rnf GetComplianceSummaryByResourceTypeResponse' {Int
Maybe [ComplianceSummaryByResourceType]
httpStatus :: Int
complianceSummariesByResourceType :: Maybe [ComplianceSummaryByResourceType]
$sel:httpStatus:GetComplianceSummaryByResourceTypeResponse' :: GetComplianceSummaryByResourceTypeResponse -> Int
$sel:complianceSummariesByResourceType:GetComplianceSummaryByResourceTypeResponse' :: GetComplianceSummaryByResourceTypeResponse
-> Maybe [ComplianceSummaryByResourceType]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [ComplianceSummaryByResourceType]
complianceSummariesByResourceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus