{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.MacieV2.Types.AllowListStatus
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.MacieV2.Types.AllowListStatus where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.MacieV2.Types.AllowListStatusCode
import qualified Amazonka.Prelude as Prelude

-- | Provides information about the current status of an allow list, which
-- indicates whether Amazon Macie can access and use the list\'s criteria.
--
-- /See:/ 'newAllowListStatus' smart constructor.
data AllowListStatus = AllowListStatus'
  { -- | A brief description of the status of the allow list. Amazon Macie uses
    -- this value to provide additional information about an error that
    -- occurred when Macie tried to access and use the list\'s criteria.
    AllowListStatus -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The current status of the allow list. If the list\'s criteria specify a
    -- regular expression (regex), this value is typically OK. Amazon Macie can
    -- compile the expression.
    --
    -- If the list\'s criteria specify an S3 object, possible values are:
    --
    -- -   OK - Macie can retrieve and parse the contents of the object.
    --
    -- -   S3_OBJECT_ACCESS_DENIED - Macie isn\'t allowed to access the object
    --     or the object is encrypted with a customer managed KMS key that
    --     Macie isn\'t allowed to use. Check the bucket policy and other
    --     permissions settings for the bucket and the object. If the object is
    --     encrypted, also ensure that it\'s encrypted with a key that Macie is
    --     allowed to use.
    --
    -- -   S3_OBJECT_EMPTY - Macie can retrieve the object but the object
    --     doesn\'t contain any content. Ensure that the object contains the
    --     correct entries. Also ensure that the list\'s criteria specify the
    --     correct bucket and object names.
    --
    -- -   S3_OBJECT_NOT_FOUND - The object doesn\'t exist in Amazon S3. Ensure
    --     that the list\'s criteria specify the correct bucket and object
    --     names.
    --
    -- -   S3_OBJECT_OVERSIZE - Macie can retrieve the object. However, the
    --     object contains too many entries or its storage size exceeds the
    --     quota for an allow list. Try breaking the list into multiple files
    --     and ensure that each file doesn\'t exceed any quotas. Then configure
    --     list settings in Macie for each file.
    --
    -- -   S3_THROTTLED - Amazon S3 throttled the request to retrieve the
    --     object. Wait a few minutes and then try again.
    --
    -- -   S3_USER_ACCESS_DENIED - Amazon S3 denied the request to retrieve the
    --     object. If the specified object exists, you\'re not allowed to
    --     access it or it\'s encrypted with an KMS key that you\'re not
    --     allowed to use. Work with your Amazon Web Services administrator to
    --     ensure that the list\'s criteria specify the correct bucket and
    --     object names, and you have read access to the bucket and the object.
    --     If the object is encrypted, also ensure that it\'s encrypted with a
    --     key that you\'re allowed to use.
    --
    -- -   UNKNOWN_ERROR - A transient or internal error occurred when Macie
    --     attempted to retrieve or parse the object. Wait a few minutes and
    --     then try again. A list can also have this status if it\'s encrypted
    --     with a key that Amazon S3 and Macie can\'t access or use.
    AllowListStatus -> AllowListStatusCode
code :: AllowListStatusCode
  }
  deriving (AllowListStatus -> AllowListStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AllowListStatus -> AllowListStatus -> Bool
$c/= :: AllowListStatus -> AllowListStatus -> Bool
== :: AllowListStatus -> AllowListStatus -> Bool
$c== :: AllowListStatus -> AllowListStatus -> Bool
Prelude.Eq, ReadPrec [AllowListStatus]
ReadPrec AllowListStatus
Int -> ReadS AllowListStatus
ReadS [AllowListStatus]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AllowListStatus]
$creadListPrec :: ReadPrec [AllowListStatus]
readPrec :: ReadPrec AllowListStatus
$creadPrec :: ReadPrec AllowListStatus
readList :: ReadS [AllowListStatus]
$creadList :: ReadS [AllowListStatus]
readsPrec :: Int -> ReadS AllowListStatus
$creadsPrec :: Int -> ReadS AllowListStatus
Prelude.Read, Int -> AllowListStatus -> ShowS
[AllowListStatus] -> ShowS
AllowListStatus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AllowListStatus] -> ShowS
$cshowList :: [AllowListStatus] -> ShowS
show :: AllowListStatus -> String
$cshow :: AllowListStatus -> String
showsPrec :: Int -> AllowListStatus -> ShowS
$cshowsPrec :: Int -> AllowListStatus -> ShowS
Prelude.Show, forall x. Rep AllowListStatus x -> AllowListStatus
forall x. AllowListStatus -> Rep AllowListStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AllowListStatus x -> AllowListStatus
$cfrom :: forall x. AllowListStatus -> Rep AllowListStatus x
Prelude.Generic)

-- |
-- Create a value of 'AllowListStatus' 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:
--
-- 'description', 'allowListStatus_description' - A brief description of the status of the allow list. Amazon Macie uses
-- this value to provide additional information about an error that
-- occurred when Macie tried to access and use the list\'s criteria.
--
-- 'code', 'allowListStatus_code' - The current status of the allow list. If the list\'s criteria specify a
-- regular expression (regex), this value is typically OK. Amazon Macie can
-- compile the expression.
--
-- If the list\'s criteria specify an S3 object, possible values are:
--
-- -   OK - Macie can retrieve and parse the contents of the object.
--
-- -   S3_OBJECT_ACCESS_DENIED - Macie isn\'t allowed to access the object
--     or the object is encrypted with a customer managed KMS key that
--     Macie isn\'t allowed to use. Check the bucket policy and other
--     permissions settings for the bucket and the object. If the object is
--     encrypted, also ensure that it\'s encrypted with a key that Macie is
--     allowed to use.
--
-- -   S3_OBJECT_EMPTY - Macie can retrieve the object but the object
--     doesn\'t contain any content. Ensure that the object contains the
--     correct entries. Also ensure that the list\'s criteria specify the
--     correct bucket and object names.
--
-- -   S3_OBJECT_NOT_FOUND - The object doesn\'t exist in Amazon S3. Ensure
--     that the list\'s criteria specify the correct bucket and object
--     names.
--
-- -   S3_OBJECT_OVERSIZE - Macie can retrieve the object. However, the
--     object contains too many entries or its storage size exceeds the
--     quota for an allow list. Try breaking the list into multiple files
--     and ensure that each file doesn\'t exceed any quotas. Then configure
--     list settings in Macie for each file.
--
-- -   S3_THROTTLED - Amazon S3 throttled the request to retrieve the
--     object. Wait a few minutes and then try again.
--
-- -   S3_USER_ACCESS_DENIED - Amazon S3 denied the request to retrieve the
--     object. If the specified object exists, you\'re not allowed to
--     access it or it\'s encrypted with an KMS key that you\'re not
--     allowed to use. Work with your Amazon Web Services administrator to
--     ensure that the list\'s criteria specify the correct bucket and
--     object names, and you have read access to the bucket and the object.
--     If the object is encrypted, also ensure that it\'s encrypted with a
--     key that you\'re allowed to use.
--
-- -   UNKNOWN_ERROR - A transient or internal error occurred when Macie
--     attempted to retrieve or parse the object. Wait a few minutes and
--     then try again. A list can also have this status if it\'s encrypted
--     with a key that Amazon S3 and Macie can\'t access or use.
newAllowListStatus ::
  -- | 'code'
  AllowListStatusCode ->
  AllowListStatus
newAllowListStatus :: AllowListStatusCode -> AllowListStatus
newAllowListStatus AllowListStatusCode
pCode_ =
  AllowListStatus'
    { $sel:description:AllowListStatus' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:code:AllowListStatus' :: AllowListStatusCode
code = AllowListStatusCode
pCode_
    }

-- | A brief description of the status of the allow list. Amazon Macie uses
-- this value to provide additional information about an error that
-- occurred when Macie tried to access and use the list\'s criteria.
allowListStatus_description :: Lens.Lens' AllowListStatus (Prelude.Maybe Prelude.Text)
allowListStatus_description :: Lens' AllowListStatus (Maybe Text)
allowListStatus_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AllowListStatus' {Maybe Text
description :: Maybe Text
$sel:description:AllowListStatus' :: AllowListStatus -> Maybe Text
description} -> Maybe Text
description) (\s :: AllowListStatus
s@AllowListStatus' {} Maybe Text
a -> AllowListStatus
s {$sel:description:AllowListStatus' :: Maybe Text
description = Maybe Text
a} :: AllowListStatus)

-- | The current status of the allow list. If the list\'s criteria specify a
-- regular expression (regex), this value is typically OK. Amazon Macie can
-- compile the expression.
--
-- If the list\'s criteria specify an S3 object, possible values are:
--
-- -   OK - Macie can retrieve and parse the contents of the object.
--
-- -   S3_OBJECT_ACCESS_DENIED - Macie isn\'t allowed to access the object
--     or the object is encrypted with a customer managed KMS key that
--     Macie isn\'t allowed to use. Check the bucket policy and other
--     permissions settings for the bucket and the object. If the object is
--     encrypted, also ensure that it\'s encrypted with a key that Macie is
--     allowed to use.
--
-- -   S3_OBJECT_EMPTY - Macie can retrieve the object but the object
--     doesn\'t contain any content. Ensure that the object contains the
--     correct entries. Also ensure that the list\'s criteria specify the
--     correct bucket and object names.
--
-- -   S3_OBJECT_NOT_FOUND - The object doesn\'t exist in Amazon S3. Ensure
--     that the list\'s criteria specify the correct bucket and object
--     names.
--
-- -   S3_OBJECT_OVERSIZE - Macie can retrieve the object. However, the
--     object contains too many entries or its storage size exceeds the
--     quota for an allow list. Try breaking the list into multiple files
--     and ensure that each file doesn\'t exceed any quotas. Then configure
--     list settings in Macie for each file.
--
-- -   S3_THROTTLED - Amazon S3 throttled the request to retrieve the
--     object. Wait a few minutes and then try again.
--
-- -   S3_USER_ACCESS_DENIED - Amazon S3 denied the request to retrieve the
--     object. If the specified object exists, you\'re not allowed to
--     access it or it\'s encrypted with an KMS key that you\'re not
--     allowed to use. Work with your Amazon Web Services administrator to
--     ensure that the list\'s criteria specify the correct bucket and
--     object names, and you have read access to the bucket and the object.
--     If the object is encrypted, also ensure that it\'s encrypted with a
--     key that you\'re allowed to use.
--
-- -   UNKNOWN_ERROR - A transient or internal error occurred when Macie
--     attempted to retrieve or parse the object. Wait a few minutes and
--     then try again. A list can also have this status if it\'s encrypted
--     with a key that Amazon S3 and Macie can\'t access or use.
allowListStatus_code :: Lens.Lens' AllowListStatus AllowListStatusCode
allowListStatus_code :: Lens' AllowListStatus AllowListStatusCode
allowListStatus_code = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AllowListStatus' {AllowListStatusCode
code :: AllowListStatusCode
$sel:code:AllowListStatus' :: AllowListStatus -> AllowListStatusCode
code} -> AllowListStatusCode
code) (\s :: AllowListStatus
s@AllowListStatus' {} AllowListStatusCode
a -> AllowListStatus
s {$sel:code:AllowListStatus' :: AllowListStatusCode
code = AllowListStatusCode
a} :: AllowListStatus)

instance Data.FromJSON AllowListStatus where
  parseJSON :: Value -> Parser AllowListStatus
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"AllowListStatus"
      ( \Object
x ->
          Maybe Text -> AllowListStatusCode -> AllowListStatus
AllowListStatus'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"description")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"code")
      )

instance Prelude.Hashable AllowListStatus where
  hashWithSalt :: Int -> AllowListStatus -> Int
hashWithSalt Int
_salt AllowListStatus' {Maybe Text
AllowListStatusCode
code :: AllowListStatusCode
description :: Maybe Text
$sel:code:AllowListStatus' :: AllowListStatus -> AllowListStatusCode
$sel:description:AllowListStatus' :: AllowListStatus -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AllowListStatusCode
code

instance Prelude.NFData AllowListStatus where
  rnf :: AllowListStatus -> ()
rnf AllowListStatus' {Maybe Text
AllowListStatusCode
code :: AllowListStatusCode
description :: Maybe Text
$sel:code:AllowListStatus' :: AllowListStatus -> AllowListStatusCode
$sel:description:AllowListStatus' :: AllowListStatus -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AllowListStatusCode
code