packages feed

stratosphere-0.6.0: library-gen/Stratosphere/ResourceProperties/S3BucketLambdaConfiguration.hs

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

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

module Stratosphere.ResourceProperties.S3BucketLambdaConfiguration where

import Control.Lens hiding ((.=))
import Data.Aeson
import Data.Maybe (catMaybes)
import Data.Monoid (mempty)
import Data.Text

import Stratosphere.Values
import Stratosphere.ResourceProperties.S3BucketNotificationFilter

-- | Full data type definition for S3BucketLambdaConfiguration. See
-- 's3BucketLambdaConfiguration' for a more convenient constructor.
data S3BucketLambdaConfiguration =
  S3BucketLambdaConfiguration
  { _s3BucketLambdaConfigurationEvent :: Val Text
  , _s3BucketLambdaConfigurationFilter :: Maybe S3BucketNotificationFilter
  , _s3BucketLambdaConfigurationFunction :: Val Text
  } deriving (Show, Eq)

instance ToJSON S3BucketLambdaConfiguration where
  toJSON S3BucketLambdaConfiguration{..} =
    object $
    catMaybes
    [ (Just . ("Event",) . toJSON) _s3BucketLambdaConfigurationEvent
    , fmap (("Filter",) . toJSON) _s3BucketLambdaConfigurationFilter
    , (Just . ("Function",) . toJSON) _s3BucketLambdaConfigurationFunction
    ]

instance FromJSON S3BucketLambdaConfiguration where
  parseJSON (Object obj) =
    S3BucketLambdaConfiguration <$>
      (obj .: "Event") <*>
      (obj .:? "Filter") <*>
      (obj .: "Function")
  parseJSON _ = mempty

-- | Constructor for 'S3BucketLambdaConfiguration' containing required fields
-- as arguments.
s3BucketLambdaConfiguration
  :: Val Text -- ^ 'sblcEvent'
  -> Val Text -- ^ 'sblcFunction'
  -> S3BucketLambdaConfiguration
s3BucketLambdaConfiguration eventarg functionarg =
  S3BucketLambdaConfiguration
  { _s3BucketLambdaConfigurationEvent = eventarg
  , _s3BucketLambdaConfigurationFilter = Nothing
  , _s3BucketLambdaConfigurationFunction = functionarg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig-event
sblcEvent :: Lens' S3BucketLambdaConfiguration (Val Text)
sblcEvent = lens _s3BucketLambdaConfigurationEvent (\s a -> s { _s3BucketLambdaConfigurationEvent = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig-filter
sblcFilter :: Lens' S3BucketLambdaConfiguration (Maybe S3BucketNotificationFilter)
sblcFilter = lens _s3BucketLambdaConfigurationFilter (\s a -> s { _s3BucketLambdaConfigurationFilter = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig-function
sblcFunction :: Lens' S3BucketLambdaConfiguration (Val Text)
sblcFunction = lens _s3BucketLambdaConfigurationFunction (\s a -> s { _s3BucketLambdaConfigurationFunction = a })