{-# 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.BucketLevelPermissions
-- 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.BucketLevelPermissions 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.AccessControlList
import Amazonka.MacieV2.Types.BlockPublicAccess
import Amazonka.MacieV2.Types.BucketPolicy
import qualified Amazonka.Prelude as Prelude

-- | Provides information about the bucket-level permissions settings for an
-- S3 bucket.
--
-- /See:/ 'newBucketLevelPermissions' smart constructor.
data BucketLevelPermissions = BucketLevelPermissions'
  { -- | The permissions settings of the access control list (ACL) for the
    -- bucket. This value is null if an ACL hasn\'t been defined for the
    -- bucket.
    BucketLevelPermissions -> Maybe AccessControlList
accessControlList :: Prelude.Maybe AccessControlList,
    -- | The block public access settings for the bucket.
    BucketLevelPermissions -> Maybe BlockPublicAccess
blockPublicAccess :: Prelude.Maybe BlockPublicAccess,
    -- | The permissions settings of the bucket policy for the bucket. This value
    -- is null if a bucket policy hasn\'t been defined for the bucket.
    BucketLevelPermissions -> Maybe BucketPolicy
bucketPolicy :: Prelude.Maybe BucketPolicy
  }
  deriving (BucketLevelPermissions -> BucketLevelPermissions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BucketLevelPermissions -> BucketLevelPermissions -> Bool
$c/= :: BucketLevelPermissions -> BucketLevelPermissions -> Bool
== :: BucketLevelPermissions -> BucketLevelPermissions -> Bool
$c== :: BucketLevelPermissions -> BucketLevelPermissions -> Bool
Prelude.Eq, ReadPrec [BucketLevelPermissions]
ReadPrec BucketLevelPermissions
Int -> ReadS BucketLevelPermissions
ReadS [BucketLevelPermissions]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [BucketLevelPermissions]
$creadListPrec :: ReadPrec [BucketLevelPermissions]
readPrec :: ReadPrec BucketLevelPermissions
$creadPrec :: ReadPrec BucketLevelPermissions
readList :: ReadS [BucketLevelPermissions]
$creadList :: ReadS [BucketLevelPermissions]
readsPrec :: Int -> ReadS BucketLevelPermissions
$creadsPrec :: Int -> ReadS BucketLevelPermissions
Prelude.Read, Int -> BucketLevelPermissions -> ShowS
[BucketLevelPermissions] -> ShowS
BucketLevelPermissions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BucketLevelPermissions] -> ShowS
$cshowList :: [BucketLevelPermissions] -> ShowS
show :: BucketLevelPermissions -> String
$cshow :: BucketLevelPermissions -> String
showsPrec :: Int -> BucketLevelPermissions -> ShowS
$cshowsPrec :: Int -> BucketLevelPermissions -> ShowS
Prelude.Show, forall x. Rep BucketLevelPermissions x -> BucketLevelPermissions
forall x. BucketLevelPermissions -> Rep BucketLevelPermissions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BucketLevelPermissions x -> BucketLevelPermissions
$cfrom :: forall x. BucketLevelPermissions -> Rep BucketLevelPermissions x
Prelude.Generic)

-- |
-- Create a value of 'BucketLevelPermissions' 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:
--
-- 'accessControlList', 'bucketLevelPermissions_accessControlList' - The permissions settings of the access control list (ACL) for the
-- bucket. This value is null if an ACL hasn\'t been defined for the
-- bucket.
--
-- 'blockPublicAccess', 'bucketLevelPermissions_blockPublicAccess' - The block public access settings for the bucket.
--
-- 'bucketPolicy', 'bucketLevelPermissions_bucketPolicy' - The permissions settings of the bucket policy for the bucket. This value
-- is null if a bucket policy hasn\'t been defined for the bucket.
newBucketLevelPermissions ::
  BucketLevelPermissions
newBucketLevelPermissions :: BucketLevelPermissions
newBucketLevelPermissions =
  BucketLevelPermissions'
    { $sel:accessControlList:BucketLevelPermissions' :: Maybe AccessControlList
accessControlList =
        forall a. Maybe a
Prelude.Nothing,
      $sel:blockPublicAccess:BucketLevelPermissions' :: Maybe BlockPublicAccess
blockPublicAccess = forall a. Maybe a
Prelude.Nothing,
      $sel:bucketPolicy:BucketLevelPermissions' :: Maybe BucketPolicy
bucketPolicy = forall a. Maybe a
Prelude.Nothing
    }

-- | The permissions settings of the access control list (ACL) for the
-- bucket. This value is null if an ACL hasn\'t been defined for the
-- bucket.
bucketLevelPermissions_accessControlList :: Lens.Lens' BucketLevelPermissions (Prelude.Maybe AccessControlList)
bucketLevelPermissions_accessControlList :: Lens' BucketLevelPermissions (Maybe AccessControlList)
bucketLevelPermissions_accessControlList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\BucketLevelPermissions' {Maybe AccessControlList
accessControlList :: Maybe AccessControlList
$sel:accessControlList:BucketLevelPermissions' :: BucketLevelPermissions -> Maybe AccessControlList
accessControlList} -> Maybe AccessControlList
accessControlList) (\s :: BucketLevelPermissions
s@BucketLevelPermissions' {} Maybe AccessControlList
a -> BucketLevelPermissions
s {$sel:accessControlList:BucketLevelPermissions' :: Maybe AccessControlList
accessControlList = Maybe AccessControlList
a} :: BucketLevelPermissions)

-- | The block public access settings for the bucket.
bucketLevelPermissions_blockPublicAccess :: Lens.Lens' BucketLevelPermissions (Prelude.Maybe BlockPublicAccess)
bucketLevelPermissions_blockPublicAccess :: Lens' BucketLevelPermissions (Maybe BlockPublicAccess)
bucketLevelPermissions_blockPublicAccess = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\BucketLevelPermissions' {Maybe BlockPublicAccess
blockPublicAccess :: Maybe BlockPublicAccess
$sel:blockPublicAccess:BucketLevelPermissions' :: BucketLevelPermissions -> Maybe BlockPublicAccess
blockPublicAccess} -> Maybe BlockPublicAccess
blockPublicAccess) (\s :: BucketLevelPermissions
s@BucketLevelPermissions' {} Maybe BlockPublicAccess
a -> BucketLevelPermissions
s {$sel:blockPublicAccess:BucketLevelPermissions' :: Maybe BlockPublicAccess
blockPublicAccess = Maybe BlockPublicAccess
a} :: BucketLevelPermissions)

-- | The permissions settings of the bucket policy for the bucket. This value
-- is null if a bucket policy hasn\'t been defined for the bucket.
bucketLevelPermissions_bucketPolicy :: Lens.Lens' BucketLevelPermissions (Prelude.Maybe BucketPolicy)
bucketLevelPermissions_bucketPolicy :: Lens' BucketLevelPermissions (Maybe BucketPolicy)
bucketLevelPermissions_bucketPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\BucketLevelPermissions' {Maybe BucketPolicy
bucketPolicy :: Maybe BucketPolicy
$sel:bucketPolicy:BucketLevelPermissions' :: BucketLevelPermissions -> Maybe BucketPolicy
bucketPolicy} -> Maybe BucketPolicy
bucketPolicy) (\s :: BucketLevelPermissions
s@BucketLevelPermissions' {} Maybe BucketPolicy
a -> BucketLevelPermissions
s {$sel:bucketPolicy:BucketLevelPermissions' :: Maybe BucketPolicy
bucketPolicy = Maybe BucketPolicy
a} :: BucketLevelPermissions)

instance Data.FromJSON BucketLevelPermissions where
  parseJSON :: Value -> Parser BucketLevelPermissions
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"BucketLevelPermissions"
      ( \Object
x ->
          Maybe AccessControlList
-> Maybe BlockPublicAccess
-> Maybe BucketPolicy
-> BucketLevelPermissions
BucketLevelPermissions'
            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
"accessControlList")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"blockPublicAccess")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"bucketPolicy")
      )

instance Prelude.Hashable BucketLevelPermissions where
  hashWithSalt :: Int -> BucketLevelPermissions -> Int
hashWithSalt Int
_salt BucketLevelPermissions' {Maybe AccessControlList
Maybe BlockPublicAccess
Maybe BucketPolicy
bucketPolicy :: Maybe BucketPolicy
blockPublicAccess :: Maybe BlockPublicAccess
accessControlList :: Maybe AccessControlList
$sel:bucketPolicy:BucketLevelPermissions' :: BucketLevelPermissions -> Maybe BucketPolicy
$sel:blockPublicAccess:BucketLevelPermissions' :: BucketLevelPermissions -> Maybe BlockPublicAccess
$sel:accessControlList:BucketLevelPermissions' :: BucketLevelPermissions -> Maybe AccessControlList
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AccessControlList
accessControlList
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BlockPublicAccess
blockPublicAccess
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BucketPolicy
bucketPolicy

instance Prelude.NFData BucketLevelPermissions where
  rnf :: BucketLevelPermissions -> ()
rnf BucketLevelPermissions' {Maybe AccessControlList
Maybe BlockPublicAccess
Maybe BucketPolicy
bucketPolicy :: Maybe BucketPolicy
blockPublicAccess :: Maybe BlockPublicAccess
accessControlList :: Maybe AccessControlList
$sel:bucketPolicy:BucketLevelPermissions' :: BucketLevelPermissions -> Maybe BucketPolicy
$sel:blockPublicAccess:BucketLevelPermissions' :: BucketLevelPermissions -> Maybe BlockPublicAccess
$sel:accessControlList:BucketLevelPermissions' :: BucketLevelPermissions -> Maybe AccessControlList
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AccessControlList
accessControlList
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe BlockPublicAccess
blockPublicAccess
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe BucketPolicy
bucketPolicy