{-# 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.Inspector.DescribeExclusions
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes the exclusions that are specified by the exclusions\' ARNs.
module Amazonka.Inspector.DescribeExclusions
  ( -- * Creating a Request
    DescribeExclusions (..),
    newDescribeExclusions,

    -- * Request Lenses
    describeExclusions_locale,
    describeExclusions_exclusionArns,

    -- * Destructuring the Response
    DescribeExclusionsResponse (..),
    newDescribeExclusionsResponse,

    -- * Response Lenses
    describeExclusionsResponse_httpStatus,
    describeExclusionsResponse_exclusions,
    describeExclusionsResponse_failedItems,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Inspector.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDescribeExclusions' smart constructor.
data DescribeExclusions = DescribeExclusions'
  { -- | The locale into which you want to translate the exclusion\'s title,
    -- description, and recommendation.
    DescribeExclusions -> Maybe Locale
locale :: Prelude.Maybe Locale,
    -- | The list of ARNs that specify the exclusions that you want to describe.
    DescribeExclusions -> NonEmpty Text
exclusionArns :: Prelude.NonEmpty Prelude.Text
  }
  deriving (DescribeExclusions -> DescribeExclusions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeExclusions -> DescribeExclusions -> Bool
$c/= :: DescribeExclusions -> DescribeExclusions -> Bool
== :: DescribeExclusions -> DescribeExclusions -> Bool
$c== :: DescribeExclusions -> DescribeExclusions -> Bool
Prelude.Eq, ReadPrec [DescribeExclusions]
ReadPrec DescribeExclusions
Int -> ReadS DescribeExclusions
ReadS [DescribeExclusions]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeExclusions]
$creadListPrec :: ReadPrec [DescribeExclusions]
readPrec :: ReadPrec DescribeExclusions
$creadPrec :: ReadPrec DescribeExclusions
readList :: ReadS [DescribeExclusions]
$creadList :: ReadS [DescribeExclusions]
readsPrec :: Int -> ReadS DescribeExclusions
$creadsPrec :: Int -> ReadS DescribeExclusions
Prelude.Read, Int -> DescribeExclusions -> ShowS
[DescribeExclusions] -> ShowS
DescribeExclusions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeExclusions] -> ShowS
$cshowList :: [DescribeExclusions] -> ShowS
show :: DescribeExclusions -> String
$cshow :: DescribeExclusions -> String
showsPrec :: Int -> DescribeExclusions -> ShowS
$cshowsPrec :: Int -> DescribeExclusions -> ShowS
Prelude.Show, forall x. Rep DescribeExclusions x -> DescribeExclusions
forall x. DescribeExclusions -> Rep DescribeExclusions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeExclusions x -> DescribeExclusions
$cfrom :: forall x. DescribeExclusions -> Rep DescribeExclusions x
Prelude.Generic)

-- |
-- Create a value of 'DescribeExclusions' 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:
--
-- 'locale', 'describeExclusions_locale' - The locale into which you want to translate the exclusion\'s title,
-- description, and recommendation.
--
-- 'exclusionArns', 'describeExclusions_exclusionArns' - The list of ARNs that specify the exclusions that you want to describe.
newDescribeExclusions ::
  -- | 'exclusionArns'
  Prelude.NonEmpty Prelude.Text ->
  DescribeExclusions
newDescribeExclusions :: NonEmpty Text -> DescribeExclusions
newDescribeExclusions NonEmpty Text
pExclusionArns_ =
  DescribeExclusions'
    { $sel:locale:DescribeExclusions' :: Maybe Locale
locale = forall a. Maybe a
Prelude.Nothing,
      $sel:exclusionArns:DescribeExclusions' :: NonEmpty Text
exclusionArns = forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced forall t b. AReview t b -> b -> t
Lens.# NonEmpty Text
pExclusionArns_
    }

-- | The locale into which you want to translate the exclusion\'s title,
-- description, and recommendation.
describeExclusions_locale :: Lens.Lens' DescribeExclusions (Prelude.Maybe Locale)
describeExclusions_locale :: Lens' DescribeExclusions (Maybe Locale)
describeExclusions_locale = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeExclusions' {Maybe Locale
locale :: Maybe Locale
$sel:locale:DescribeExclusions' :: DescribeExclusions -> Maybe Locale
locale} -> Maybe Locale
locale) (\s :: DescribeExclusions
s@DescribeExclusions' {} Maybe Locale
a -> DescribeExclusions
s {$sel:locale:DescribeExclusions' :: Maybe Locale
locale = Maybe Locale
a} :: DescribeExclusions)

-- | The list of ARNs that specify the exclusions that you want to describe.
describeExclusions_exclusionArns :: Lens.Lens' DescribeExclusions (Prelude.NonEmpty Prelude.Text)
describeExclusions_exclusionArns :: Lens' DescribeExclusions (NonEmpty Text)
describeExclusions_exclusionArns = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeExclusions' {NonEmpty Text
exclusionArns :: NonEmpty Text
$sel:exclusionArns:DescribeExclusions' :: DescribeExclusions -> NonEmpty Text
exclusionArns} -> NonEmpty Text
exclusionArns) (\s :: DescribeExclusions
s@DescribeExclusions' {} NonEmpty Text
a -> DescribeExclusions
s {$sel:exclusionArns:DescribeExclusions' :: NonEmpty Text
exclusionArns = NonEmpty Text
a} :: DescribeExclusions) 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 DescribeExclusions where
  type
    AWSResponse DescribeExclusions =
      DescribeExclusionsResponse
  request :: (Service -> Service)
-> DescribeExclusions -> Request DescribeExclusions
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 DescribeExclusions
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeExclusions)))
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 ->
          Int
-> HashMap Text Exclusion
-> HashMap Text FailedItemDetails
-> DescribeExclusionsResponse
DescribeExclusionsResponse'
            forall (f :: * -> *) a b. Functor 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 (Maybe a)
Data..?> Key
"exclusions" 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
"failedItems" forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty)
      )

instance Prelude.Hashable DescribeExclusions where
  hashWithSalt :: Int -> DescribeExclusions -> Int
hashWithSalt Int
_salt DescribeExclusions' {Maybe Locale
NonEmpty Text
exclusionArns :: NonEmpty Text
locale :: Maybe Locale
$sel:exclusionArns:DescribeExclusions' :: DescribeExclusions -> NonEmpty Text
$sel:locale:DescribeExclusions' :: DescribeExclusions -> Maybe Locale
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Locale
locale
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty Text
exclusionArns

instance Prelude.NFData DescribeExclusions where
  rnf :: DescribeExclusions -> ()
rnf DescribeExclusions' {Maybe Locale
NonEmpty Text
exclusionArns :: NonEmpty Text
locale :: Maybe Locale
$sel:exclusionArns:DescribeExclusions' :: DescribeExclusions -> NonEmpty Text
$sel:locale:DescribeExclusions' :: DescribeExclusions -> Maybe Locale
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Locale
locale
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty Text
exclusionArns

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

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

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

-- | /See:/ 'newDescribeExclusionsResponse' smart constructor.
data DescribeExclusionsResponse = DescribeExclusionsResponse'
  { -- | The response's http status code.
    DescribeExclusionsResponse -> Int
httpStatus :: Prelude.Int,
    -- | Information about the exclusions.
    DescribeExclusionsResponse -> HashMap Text Exclusion
exclusions :: Prelude.HashMap Prelude.Text Exclusion,
    -- | Exclusion details that cannot be described. An error code is provided
    -- for each failed item.
    DescribeExclusionsResponse -> HashMap Text FailedItemDetails
failedItems :: Prelude.HashMap Prelude.Text FailedItemDetails
  }
  deriving (DescribeExclusionsResponse -> DescribeExclusionsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeExclusionsResponse -> DescribeExclusionsResponse -> Bool
$c/= :: DescribeExclusionsResponse -> DescribeExclusionsResponse -> Bool
== :: DescribeExclusionsResponse -> DescribeExclusionsResponse -> Bool
$c== :: DescribeExclusionsResponse -> DescribeExclusionsResponse -> Bool
Prelude.Eq, ReadPrec [DescribeExclusionsResponse]
ReadPrec DescribeExclusionsResponse
Int -> ReadS DescribeExclusionsResponse
ReadS [DescribeExclusionsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeExclusionsResponse]
$creadListPrec :: ReadPrec [DescribeExclusionsResponse]
readPrec :: ReadPrec DescribeExclusionsResponse
$creadPrec :: ReadPrec DescribeExclusionsResponse
readList :: ReadS [DescribeExclusionsResponse]
$creadList :: ReadS [DescribeExclusionsResponse]
readsPrec :: Int -> ReadS DescribeExclusionsResponse
$creadsPrec :: Int -> ReadS DescribeExclusionsResponse
Prelude.Read, Int -> DescribeExclusionsResponse -> ShowS
[DescribeExclusionsResponse] -> ShowS
DescribeExclusionsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeExclusionsResponse] -> ShowS
$cshowList :: [DescribeExclusionsResponse] -> ShowS
show :: DescribeExclusionsResponse -> String
$cshow :: DescribeExclusionsResponse -> String
showsPrec :: Int -> DescribeExclusionsResponse -> ShowS
$cshowsPrec :: Int -> DescribeExclusionsResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeExclusionsResponse x -> DescribeExclusionsResponse
forall x.
DescribeExclusionsResponse -> Rep DescribeExclusionsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeExclusionsResponse x -> DescribeExclusionsResponse
$cfrom :: forall x.
DescribeExclusionsResponse -> Rep DescribeExclusionsResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeExclusionsResponse' 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:
--
-- 'httpStatus', 'describeExclusionsResponse_httpStatus' - The response's http status code.
--
-- 'exclusions', 'describeExclusionsResponse_exclusions' - Information about the exclusions.
--
-- 'failedItems', 'describeExclusionsResponse_failedItems' - Exclusion details that cannot be described. An error code is provided
-- for each failed item.
newDescribeExclusionsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeExclusionsResponse
newDescribeExclusionsResponse :: Int -> DescribeExclusionsResponse
newDescribeExclusionsResponse Int
pHttpStatus_ =
  DescribeExclusionsResponse'
    { $sel:httpStatus:DescribeExclusionsResponse' :: Int
httpStatus =
        Int
pHttpStatus_,
      $sel:exclusions:DescribeExclusionsResponse' :: HashMap Text Exclusion
exclusions = forall a. Monoid a => a
Prelude.mempty,
      $sel:failedItems:DescribeExclusionsResponse' :: HashMap Text FailedItemDetails
failedItems = forall a. Monoid a => a
Prelude.mempty
    }

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

-- | Information about the exclusions.
describeExclusionsResponse_exclusions :: Lens.Lens' DescribeExclusionsResponse (Prelude.HashMap Prelude.Text Exclusion)
describeExclusionsResponse_exclusions :: Lens' DescribeExclusionsResponse (HashMap Text Exclusion)
describeExclusionsResponse_exclusions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeExclusionsResponse' {HashMap Text Exclusion
exclusions :: HashMap Text Exclusion
$sel:exclusions:DescribeExclusionsResponse' :: DescribeExclusionsResponse -> HashMap Text Exclusion
exclusions} -> HashMap Text Exclusion
exclusions) (\s :: DescribeExclusionsResponse
s@DescribeExclusionsResponse' {} HashMap Text Exclusion
a -> DescribeExclusionsResponse
s {$sel:exclusions:DescribeExclusionsResponse' :: HashMap Text Exclusion
exclusions = HashMap Text Exclusion
a} :: DescribeExclusionsResponse) 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

-- | Exclusion details that cannot be described. An error code is provided
-- for each failed item.
describeExclusionsResponse_failedItems :: Lens.Lens' DescribeExclusionsResponse (Prelude.HashMap Prelude.Text FailedItemDetails)
describeExclusionsResponse_failedItems :: Lens' DescribeExclusionsResponse (HashMap Text FailedItemDetails)
describeExclusionsResponse_failedItems = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeExclusionsResponse' {HashMap Text FailedItemDetails
failedItems :: HashMap Text FailedItemDetails
$sel:failedItems:DescribeExclusionsResponse' :: DescribeExclusionsResponse -> HashMap Text FailedItemDetails
failedItems} -> HashMap Text FailedItemDetails
failedItems) (\s :: DescribeExclusionsResponse
s@DescribeExclusionsResponse' {} HashMap Text FailedItemDetails
a -> DescribeExclusionsResponse
s {$sel:failedItems:DescribeExclusionsResponse' :: HashMap Text FailedItemDetails
failedItems = HashMap Text FailedItemDetails
a} :: DescribeExclusionsResponse) 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 Prelude.NFData DescribeExclusionsResponse where
  rnf :: DescribeExclusionsResponse -> ()
rnf DescribeExclusionsResponse' {Int
HashMap Text FailedItemDetails
HashMap Text Exclusion
failedItems :: HashMap Text FailedItemDetails
exclusions :: HashMap Text Exclusion
httpStatus :: Int
$sel:failedItems:DescribeExclusionsResponse' :: DescribeExclusionsResponse -> HashMap Text FailedItemDetails
$sel:exclusions:DescribeExclusionsResponse' :: DescribeExclusionsResponse -> HashMap Text Exclusion
$sel:httpStatus:DescribeExclusionsResponse' :: DescribeExclusionsResponse -> Int
..} =
    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 HashMap Text Exclusion
exclusions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf HashMap Text FailedItemDetails
failedItems