{-# 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.DescribeRemediationConfigurations
-- 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 details of one or more remediation configurations.
module Amazonka.Config.DescribeRemediationConfigurations
  ( -- * Creating a Request
    DescribeRemediationConfigurations (..),
    newDescribeRemediationConfigurations,

    -- * Request Lenses
    describeRemediationConfigurations_configRuleNames,

    -- * Destructuring the Response
    DescribeRemediationConfigurationsResponse (..),
    newDescribeRemediationConfigurationsResponse,

    -- * Response Lenses
    describeRemediationConfigurationsResponse_remediationConfigurations,
    describeRemediationConfigurationsResponse_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:/ 'newDescribeRemediationConfigurations' smart constructor.
data DescribeRemediationConfigurations = DescribeRemediationConfigurations'
  { -- | A list of Config rule names of remediation configurations for which you
    -- want details.
    DescribeRemediationConfigurations -> [Text]
configRuleNames :: [Prelude.Text]
  }
  deriving (DescribeRemediationConfigurations
-> DescribeRemediationConfigurations -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeRemediationConfigurations
-> DescribeRemediationConfigurations -> Bool
$c/= :: DescribeRemediationConfigurations
-> DescribeRemediationConfigurations -> Bool
== :: DescribeRemediationConfigurations
-> DescribeRemediationConfigurations -> Bool
$c== :: DescribeRemediationConfigurations
-> DescribeRemediationConfigurations -> Bool
Prelude.Eq, ReadPrec [DescribeRemediationConfigurations]
ReadPrec DescribeRemediationConfigurations
Int -> ReadS DescribeRemediationConfigurations
ReadS [DescribeRemediationConfigurations]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeRemediationConfigurations]
$creadListPrec :: ReadPrec [DescribeRemediationConfigurations]
readPrec :: ReadPrec DescribeRemediationConfigurations
$creadPrec :: ReadPrec DescribeRemediationConfigurations
readList :: ReadS [DescribeRemediationConfigurations]
$creadList :: ReadS [DescribeRemediationConfigurations]
readsPrec :: Int -> ReadS DescribeRemediationConfigurations
$creadsPrec :: Int -> ReadS DescribeRemediationConfigurations
Prelude.Read, Int -> DescribeRemediationConfigurations -> ShowS
[DescribeRemediationConfigurations] -> ShowS
DescribeRemediationConfigurations -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeRemediationConfigurations] -> ShowS
$cshowList :: [DescribeRemediationConfigurations] -> ShowS
show :: DescribeRemediationConfigurations -> String
$cshow :: DescribeRemediationConfigurations -> String
showsPrec :: Int -> DescribeRemediationConfigurations -> ShowS
$cshowsPrec :: Int -> DescribeRemediationConfigurations -> ShowS
Prelude.Show, forall x.
Rep DescribeRemediationConfigurations x
-> DescribeRemediationConfigurations
forall x.
DescribeRemediationConfigurations
-> Rep DescribeRemediationConfigurations x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeRemediationConfigurations x
-> DescribeRemediationConfigurations
$cfrom :: forall x.
DescribeRemediationConfigurations
-> Rep DescribeRemediationConfigurations x
Prelude.Generic)

-- |
-- Create a value of 'DescribeRemediationConfigurations' 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:
--
-- 'configRuleNames', 'describeRemediationConfigurations_configRuleNames' - A list of Config rule names of remediation configurations for which you
-- want details.
newDescribeRemediationConfigurations ::
  DescribeRemediationConfigurations
newDescribeRemediationConfigurations :: DescribeRemediationConfigurations
newDescribeRemediationConfigurations =
  DescribeRemediationConfigurations'
    { $sel:configRuleNames:DescribeRemediationConfigurations' :: [Text]
configRuleNames =
        forall a. Monoid a => a
Prelude.mempty
    }

-- | A list of Config rule names of remediation configurations for which you
-- want details.
describeRemediationConfigurations_configRuleNames :: Lens.Lens' DescribeRemediationConfigurations [Prelude.Text]
describeRemediationConfigurations_configRuleNames :: Lens' DescribeRemediationConfigurations [Text]
describeRemediationConfigurations_configRuleNames = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeRemediationConfigurations' {[Text]
configRuleNames :: [Text]
$sel:configRuleNames:DescribeRemediationConfigurations' :: DescribeRemediationConfigurations -> [Text]
configRuleNames} -> [Text]
configRuleNames) (\s :: DescribeRemediationConfigurations
s@DescribeRemediationConfigurations' {} [Text]
a -> DescribeRemediationConfigurations
s {$sel:configRuleNames:DescribeRemediationConfigurations' :: [Text]
configRuleNames = [Text]
a} :: DescribeRemediationConfigurations) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance
  Core.AWSRequest
    DescribeRemediationConfigurations
  where
  type
    AWSResponse DescribeRemediationConfigurations =
      DescribeRemediationConfigurationsResponse
  request :: (Service -> Service)
-> DescribeRemediationConfigurations
-> Request DescribeRemediationConfigurations
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 DescribeRemediationConfigurations
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse DescribeRemediationConfigurations)))
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 [RemediationConfiguration]
-> Int -> DescribeRemediationConfigurationsResponse
DescribeRemediationConfigurationsResponse'
            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
"RemediationConfigurations"
                            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
    DescribeRemediationConfigurations
  where
  hashWithSalt :: Int -> DescribeRemediationConfigurations -> Int
hashWithSalt
    Int
_salt
    DescribeRemediationConfigurations' {[Text]
configRuleNames :: [Text]
$sel:configRuleNames:DescribeRemediationConfigurations' :: DescribeRemediationConfigurations -> [Text]
..} =
      Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [Text]
configRuleNames

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

instance
  Data.ToHeaders
    DescribeRemediationConfigurations
  where
  toHeaders :: DescribeRemediationConfigurations -> 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.DescribeRemediationConfigurations" ::
                          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
    DescribeRemediationConfigurations
  where
  toJSON :: DescribeRemediationConfigurations -> Value
toJSON DescribeRemediationConfigurations' {[Text]
configRuleNames :: [Text]
$sel:configRuleNames:DescribeRemediationConfigurations' :: DescribeRemediationConfigurations -> [Text]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"ConfigRuleNames" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= [Text]
configRuleNames)
          ]
      )

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

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

-- | /See:/ 'newDescribeRemediationConfigurationsResponse' smart constructor.
data DescribeRemediationConfigurationsResponse = DescribeRemediationConfigurationsResponse'
  { -- | Returns a remediation configuration object.
    DescribeRemediationConfigurationsResponse
-> Maybe [RemediationConfiguration]
remediationConfigurations :: Prelude.Maybe [RemediationConfiguration],
    -- | The response's http status code.
    DescribeRemediationConfigurationsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeRemediationConfigurationsResponse
-> DescribeRemediationConfigurationsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeRemediationConfigurationsResponse
-> DescribeRemediationConfigurationsResponse -> Bool
$c/= :: DescribeRemediationConfigurationsResponse
-> DescribeRemediationConfigurationsResponse -> Bool
== :: DescribeRemediationConfigurationsResponse
-> DescribeRemediationConfigurationsResponse -> Bool
$c== :: DescribeRemediationConfigurationsResponse
-> DescribeRemediationConfigurationsResponse -> Bool
Prelude.Eq, ReadPrec [DescribeRemediationConfigurationsResponse]
ReadPrec DescribeRemediationConfigurationsResponse
Int -> ReadS DescribeRemediationConfigurationsResponse
ReadS [DescribeRemediationConfigurationsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeRemediationConfigurationsResponse]
$creadListPrec :: ReadPrec [DescribeRemediationConfigurationsResponse]
readPrec :: ReadPrec DescribeRemediationConfigurationsResponse
$creadPrec :: ReadPrec DescribeRemediationConfigurationsResponse
readList :: ReadS [DescribeRemediationConfigurationsResponse]
$creadList :: ReadS [DescribeRemediationConfigurationsResponse]
readsPrec :: Int -> ReadS DescribeRemediationConfigurationsResponse
$creadsPrec :: Int -> ReadS DescribeRemediationConfigurationsResponse
Prelude.Read, Int -> DescribeRemediationConfigurationsResponse -> ShowS
[DescribeRemediationConfigurationsResponse] -> ShowS
DescribeRemediationConfigurationsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeRemediationConfigurationsResponse] -> ShowS
$cshowList :: [DescribeRemediationConfigurationsResponse] -> ShowS
show :: DescribeRemediationConfigurationsResponse -> String
$cshow :: DescribeRemediationConfigurationsResponse -> String
showsPrec :: Int -> DescribeRemediationConfigurationsResponse -> ShowS
$cshowsPrec :: Int -> DescribeRemediationConfigurationsResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeRemediationConfigurationsResponse x
-> DescribeRemediationConfigurationsResponse
forall x.
DescribeRemediationConfigurationsResponse
-> Rep DescribeRemediationConfigurationsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeRemediationConfigurationsResponse x
-> DescribeRemediationConfigurationsResponse
$cfrom :: forall x.
DescribeRemediationConfigurationsResponse
-> Rep DescribeRemediationConfigurationsResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeRemediationConfigurationsResponse' 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:
--
-- 'remediationConfigurations', 'describeRemediationConfigurationsResponse_remediationConfigurations' - Returns a remediation configuration object.
--
-- 'httpStatus', 'describeRemediationConfigurationsResponse_httpStatus' - The response's http status code.
newDescribeRemediationConfigurationsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeRemediationConfigurationsResponse
newDescribeRemediationConfigurationsResponse :: Int -> DescribeRemediationConfigurationsResponse
newDescribeRemediationConfigurationsResponse
  Int
pHttpStatus_ =
    DescribeRemediationConfigurationsResponse'
      { $sel:remediationConfigurations:DescribeRemediationConfigurationsResponse' :: Maybe [RemediationConfiguration]
remediationConfigurations =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:DescribeRemediationConfigurationsResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | Returns a remediation configuration object.
describeRemediationConfigurationsResponse_remediationConfigurations :: Lens.Lens' DescribeRemediationConfigurationsResponse (Prelude.Maybe [RemediationConfiguration])
describeRemediationConfigurationsResponse_remediationConfigurations :: Lens'
  DescribeRemediationConfigurationsResponse
  (Maybe [RemediationConfiguration])
describeRemediationConfigurationsResponse_remediationConfigurations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeRemediationConfigurationsResponse' {Maybe [RemediationConfiguration]
remediationConfigurations :: Maybe [RemediationConfiguration]
$sel:remediationConfigurations:DescribeRemediationConfigurationsResponse' :: DescribeRemediationConfigurationsResponse
-> Maybe [RemediationConfiguration]
remediationConfigurations} -> Maybe [RemediationConfiguration]
remediationConfigurations) (\s :: DescribeRemediationConfigurationsResponse
s@DescribeRemediationConfigurationsResponse' {} Maybe [RemediationConfiguration]
a -> DescribeRemediationConfigurationsResponse
s {$sel:remediationConfigurations:DescribeRemediationConfigurationsResponse' :: Maybe [RemediationConfiguration]
remediationConfigurations = Maybe [RemediationConfiguration]
a} :: DescribeRemediationConfigurationsResponse) 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.
describeRemediationConfigurationsResponse_httpStatus :: Lens.Lens' DescribeRemediationConfigurationsResponse Prelude.Int
describeRemediationConfigurationsResponse_httpStatus :: Lens' DescribeRemediationConfigurationsResponse Int
describeRemediationConfigurationsResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeRemediationConfigurationsResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeRemediationConfigurationsResponse' :: DescribeRemediationConfigurationsResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeRemediationConfigurationsResponse
s@DescribeRemediationConfigurationsResponse' {} Int
a -> DescribeRemediationConfigurationsResponse
s {$sel:httpStatus:DescribeRemediationConfigurationsResponse' :: Int
httpStatus = Int
a} :: DescribeRemediationConfigurationsResponse)

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