packages feed

stratosphere-0.28.0: library-gen/Stratosphere/ResourceProperties/S3BucketPublicAccessBlockConfiguration.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TupleSections #-}

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html

module Stratosphere.ResourceProperties.S3BucketPublicAccessBlockConfiguration where

import Stratosphere.ResourceImports


-- | Full data type definition for S3BucketPublicAccessBlockConfiguration. See
-- 's3BucketPublicAccessBlockConfiguration' for a more convenient
-- constructor.
data S3BucketPublicAccessBlockConfiguration =
  S3BucketPublicAccessBlockConfiguration
  { _s3BucketPublicAccessBlockConfigurationBlockPublicAcls :: Maybe (Val Bool)
  , _s3BucketPublicAccessBlockConfigurationBlockPublicPolicy :: Maybe (Val Bool)
  , _s3BucketPublicAccessBlockConfigurationIgnorePublicAcls :: Maybe (Val Bool)
  , _s3BucketPublicAccessBlockConfigurationRestrictPublicBuckets :: Maybe (Val Bool)
  } deriving (Show, Eq)

instance ToJSON S3BucketPublicAccessBlockConfiguration where
  toJSON S3BucketPublicAccessBlockConfiguration{..} =
    object $
    catMaybes
    [ fmap (("BlockPublicAcls",) . toJSON . fmap Bool') _s3BucketPublicAccessBlockConfigurationBlockPublicAcls
    , fmap (("BlockPublicPolicy",) . toJSON . fmap Bool') _s3BucketPublicAccessBlockConfigurationBlockPublicPolicy
    , fmap (("IgnorePublicAcls",) . toJSON . fmap Bool') _s3BucketPublicAccessBlockConfigurationIgnorePublicAcls
    , fmap (("RestrictPublicBuckets",) . toJSON . fmap Bool') _s3BucketPublicAccessBlockConfigurationRestrictPublicBuckets
    ]

instance FromJSON S3BucketPublicAccessBlockConfiguration where
  parseJSON (Object obj) =
    S3BucketPublicAccessBlockConfiguration <$>
      fmap (fmap (fmap unBool')) (obj .:? "BlockPublicAcls") <*>
      fmap (fmap (fmap unBool')) (obj .:? "BlockPublicPolicy") <*>
      fmap (fmap (fmap unBool')) (obj .:? "IgnorePublicAcls") <*>
      fmap (fmap (fmap unBool')) (obj .:? "RestrictPublicBuckets")
  parseJSON _ = mempty

-- | Constructor for 'S3BucketPublicAccessBlockConfiguration' containing
-- required fields as arguments.
s3BucketPublicAccessBlockConfiguration
  :: S3BucketPublicAccessBlockConfiguration
s3BucketPublicAccessBlockConfiguration  =
  S3BucketPublicAccessBlockConfiguration
  { _s3BucketPublicAccessBlockConfigurationBlockPublicAcls = Nothing
  , _s3BucketPublicAccessBlockConfigurationBlockPublicPolicy = Nothing
  , _s3BucketPublicAccessBlockConfigurationIgnorePublicAcls = Nothing
  , _s3BucketPublicAccessBlockConfigurationRestrictPublicBuckets = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html#cfn-s3-bucket-publicaccessblockconfiguration-blockpublicacls
sbpabcBlockPublicAcls :: Lens' S3BucketPublicAccessBlockConfiguration (Maybe (Val Bool))
sbpabcBlockPublicAcls = lens _s3BucketPublicAccessBlockConfigurationBlockPublicAcls (\s a -> s { _s3BucketPublicAccessBlockConfigurationBlockPublicAcls = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html#cfn-s3-bucket-publicaccessblockconfiguration-blockpublicpolicy
sbpabcBlockPublicPolicy :: Lens' S3BucketPublicAccessBlockConfiguration (Maybe (Val Bool))
sbpabcBlockPublicPolicy = lens _s3BucketPublicAccessBlockConfigurationBlockPublicPolicy (\s a -> s { _s3BucketPublicAccessBlockConfigurationBlockPublicPolicy = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html#cfn-s3-bucket-publicaccessblockconfiguration-ignorepublicacls
sbpabcIgnorePublicAcls :: Lens' S3BucketPublicAccessBlockConfiguration (Maybe (Val Bool))
sbpabcIgnorePublicAcls = lens _s3BucketPublicAccessBlockConfigurationIgnorePublicAcls (\s a -> s { _s3BucketPublicAccessBlockConfigurationIgnorePublicAcls = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html#cfn-s3-bucket-publicaccessblockconfiguration-restrictpublicbuckets
sbpabcRestrictPublicBuckets :: Lens' S3BucketPublicAccessBlockConfiguration (Maybe (Val Bool))
sbpabcRestrictPublicBuckets = lens _s3BucketPublicAccessBlockConfigurationRestrictPublicBuckets (\s a -> s { _s3BucketPublicAccessBlockConfigurationRestrictPublicBuckets = a })