packages feed

stratosphere-0.15.2: library-gen/Stratosphere/ResourceProperties/S3BucketNotificationConfiguration.hs

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

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

module Stratosphere.ResourceProperties.S3BucketNotificationConfiguration where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.S3BucketLambdaConfiguration
import Stratosphere.ResourceProperties.S3BucketQueueConfiguration
import Stratosphere.ResourceProperties.S3BucketTopicConfiguration

-- | Full data type definition for S3BucketNotificationConfiguration. See
-- 's3BucketNotificationConfiguration' for a more convenient constructor.
data S3BucketNotificationConfiguration =
  S3BucketNotificationConfiguration
  { _s3BucketNotificationConfigurationLambdaConfigurations :: Maybe [S3BucketLambdaConfiguration]
  , _s3BucketNotificationConfigurationQueueConfigurations :: Maybe [S3BucketQueueConfiguration]
  , _s3BucketNotificationConfigurationTopicConfigurations :: Maybe [S3BucketTopicConfiguration]
  } deriving (Show, Eq)

instance ToJSON S3BucketNotificationConfiguration where
  toJSON S3BucketNotificationConfiguration{..} =
    object $
    catMaybes
    [ fmap (("LambdaConfigurations",) . toJSON) _s3BucketNotificationConfigurationLambdaConfigurations
    , fmap (("QueueConfigurations",) . toJSON) _s3BucketNotificationConfigurationQueueConfigurations
    , fmap (("TopicConfigurations",) . toJSON) _s3BucketNotificationConfigurationTopicConfigurations
    ]

instance FromJSON S3BucketNotificationConfiguration where
  parseJSON (Object obj) =
    S3BucketNotificationConfiguration <$>
      (obj .:? "LambdaConfigurations") <*>
      (obj .:? "QueueConfigurations") <*>
      (obj .:? "TopicConfigurations")
  parseJSON _ = mempty

-- | Constructor for 'S3BucketNotificationConfiguration' containing required
-- fields as arguments.
s3BucketNotificationConfiguration
  :: S3BucketNotificationConfiguration
s3BucketNotificationConfiguration  =
  S3BucketNotificationConfiguration
  { _s3BucketNotificationConfigurationLambdaConfigurations = Nothing
  , _s3BucketNotificationConfigurationQueueConfigurations = Nothing
  , _s3BucketNotificationConfigurationTopicConfigurations = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig
sbncLambdaConfigurations :: Lens' S3BucketNotificationConfiguration (Maybe [S3BucketLambdaConfiguration])
sbncLambdaConfigurations = lens _s3BucketNotificationConfigurationLambdaConfigurations (\s a -> s { _s3BucketNotificationConfigurationLambdaConfigurations = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html#cfn-s3-bucket-notificationconfig-queueconfig
sbncQueueConfigurations :: Lens' S3BucketNotificationConfiguration (Maybe [S3BucketQueueConfiguration])
sbncQueueConfigurations = lens _s3BucketNotificationConfigurationQueueConfigurations (\s a -> s { _s3BucketNotificationConfigurationQueueConfigurations = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html#cfn-s3-bucket-notificationconfig-topicconfig
sbncTopicConfigurations :: Lens' S3BucketNotificationConfiguration (Maybe [S3BucketTopicConfiguration])
sbncTopicConfigurations = lens _s3BucketNotificationConfigurationTopicConfigurations (\s a -> s { _s3BucketNotificationConfigurationTopicConfigurations = a })