packages feed

stratosphere-0.32.0: library-gen/Stratosphere/Resources/LambdaFunction.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html

module Stratosphere.Resources.LambdaFunction where

import Stratosphere.ResourceImports
import Stratosphere.Types
import Stratosphere.ResourceProperties.LambdaFunctionCode
import Stratosphere.ResourceProperties.LambdaFunctionDeadLetterConfig
import Stratosphere.ResourceProperties.LambdaFunctionEnvironment
import Stratosphere.ResourceProperties.Tag
import Stratosphere.ResourceProperties.LambdaFunctionTracingConfig
import Stratosphere.ResourceProperties.LambdaFunctionVpcConfig

-- | Full data type definition for LambdaFunction. See 'lambdaFunction' for a
-- more convenient constructor.
data LambdaFunction =
  LambdaFunction
  { _lambdaFunctionCode :: LambdaFunctionCode
  , _lambdaFunctionDeadLetterConfig :: Maybe LambdaFunctionDeadLetterConfig
  , _lambdaFunctionDescription :: Maybe (Val Text)
  , _lambdaFunctionEnvironment :: Maybe LambdaFunctionEnvironment
  , _lambdaFunctionFunctionName :: Maybe (Val Text)
  , _lambdaFunctionHandler :: Val Text
  , _lambdaFunctionKmsKeyArn :: Maybe (Val Text)
  , _lambdaFunctionLayers :: Maybe (ValList Text)
  , _lambdaFunctionMemorySize :: Maybe (Val Integer)
  , _lambdaFunctionReservedConcurrentExecutions :: Maybe (Val Integer)
  , _lambdaFunctionRole :: Val Text
  , _lambdaFunctionRuntime :: Val Runtime
  , _lambdaFunctionTags :: Maybe [Tag]
  , _lambdaFunctionTimeout :: Maybe (Val Integer)
  , _lambdaFunctionTracingConfig :: Maybe LambdaFunctionTracingConfig
  , _lambdaFunctionVpcConfig :: Maybe LambdaFunctionVpcConfig
  } deriving (Show, Eq)

instance ToJSON LambdaFunction where
  toJSON LambdaFunction{..} =
    object $
    catMaybes
    [ (Just . ("Code",) . toJSON) _lambdaFunctionCode
    , fmap (("DeadLetterConfig",) . toJSON) _lambdaFunctionDeadLetterConfig
    , fmap (("Description",) . toJSON) _lambdaFunctionDescription
    , fmap (("Environment",) . toJSON) _lambdaFunctionEnvironment
    , fmap (("FunctionName",) . toJSON) _lambdaFunctionFunctionName
    , (Just . ("Handler",) . toJSON) _lambdaFunctionHandler
    , fmap (("KmsKeyArn",) . toJSON) _lambdaFunctionKmsKeyArn
    , fmap (("Layers",) . toJSON) _lambdaFunctionLayers
    , fmap (("MemorySize",) . toJSON . fmap Integer') _lambdaFunctionMemorySize
    , fmap (("ReservedConcurrentExecutions",) . toJSON . fmap Integer') _lambdaFunctionReservedConcurrentExecutions
    , (Just . ("Role",) . toJSON) _lambdaFunctionRole
    , (Just . ("Runtime",) . toJSON) _lambdaFunctionRuntime
    , fmap (("Tags",) . toJSON) _lambdaFunctionTags
    , fmap (("Timeout",) . toJSON . fmap Integer') _lambdaFunctionTimeout
    , fmap (("TracingConfig",) . toJSON) _lambdaFunctionTracingConfig
    , fmap (("VpcConfig",) . toJSON) _lambdaFunctionVpcConfig
    ]

-- | Constructor for 'LambdaFunction' containing required fields as arguments.
lambdaFunction
  :: LambdaFunctionCode -- ^ 'lfCode'
  -> Val Text -- ^ 'lfHandler'
  -> Val Text -- ^ 'lfRole'
  -> Val Runtime -- ^ 'lfRuntime'
  -> LambdaFunction
lambdaFunction codearg handlerarg rolearg runtimearg =
  LambdaFunction
  { _lambdaFunctionCode = codearg
  , _lambdaFunctionDeadLetterConfig = Nothing
  , _lambdaFunctionDescription = Nothing
  , _lambdaFunctionEnvironment = Nothing
  , _lambdaFunctionFunctionName = Nothing
  , _lambdaFunctionHandler = handlerarg
  , _lambdaFunctionKmsKeyArn = Nothing
  , _lambdaFunctionLayers = Nothing
  , _lambdaFunctionMemorySize = Nothing
  , _lambdaFunctionReservedConcurrentExecutions = Nothing
  , _lambdaFunctionRole = rolearg
  , _lambdaFunctionRuntime = runtimearg
  , _lambdaFunctionTags = Nothing
  , _lambdaFunctionTimeout = Nothing
  , _lambdaFunctionTracingConfig = Nothing
  , _lambdaFunctionVpcConfig = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-code
lfCode :: Lens' LambdaFunction LambdaFunctionCode
lfCode = lens _lambdaFunctionCode (\s a -> s { _lambdaFunctionCode = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-deadletterconfig
lfDeadLetterConfig :: Lens' LambdaFunction (Maybe LambdaFunctionDeadLetterConfig)
lfDeadLetterConfig = lens _lambdaFunctionDeadLetterConfig (\s a -> s { _lambdaFunctionDeadLetterConfig = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-description
lfDescription :: Lens' LambdaFunction (Maybe (Val Text))
lfDescription = lens _lambdaFunctionDescription (\s a -> s { _lambdaFunctionDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-environment
lfEnvironment :: Lens' LambdaFunction (Maybe LambdaFunctionEnvironment)
lfEnvironment = lens _lambdaFunctionEnvironment (\s a -> s { _lambdaFunctionEnvironment = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-functionname
lfFunctionName :: Lens' LambdaFunction (Maybe (Val Text))
lfFunctionName = lens _lambdaFunctionFunctionName (\s a -> s { _lambdaFunctionFunctionName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-handler
lfHandler :: Lens' LambdaFunction (Val Text)
lfHandler = lens _lambdaFunctionHandler (\s a -> s { _lambdaFunctionHandler = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-kmskeyarn
lfKmsKeyArn :: Lens' LambdaFunction (Maybe (Val Text))
lfKmsKeyArn = lens _lambdaFunctionKmsKeyArn (\s a -> s { _lambdaFunctionKmsKeyArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-layers
lfLayers :: Lens' LambdaFunction (Maybe (ValList Text))
lfLayers = lens _lambdaFunctionLayers (\s a -> s { _lambdaFunctionLayers = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-memorysize
lfMemorySize :: Lens' LambdaFunction (Maybe (Val Integer))
lfMemorySize = lens _lambdaFunctionMemorySize (\s a -> s { _lambdaFunctionMemorySize = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-reservedconcurrentexecutions
lfReservedConcurrentExecutions :: Lens' LambdaFunction (Maybe (Val Integer))
lfReservedConcurrentExecutions = lens _lambdaFunctionReservedConcurrentExecutions (\s a -> s { _lambdaFunctionReservedConcurrentExecutions = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-role
lfRole :: Lens' LambdaFunction (Val Text)
lfRole = lens _lambdaFunctionRole (\s a -> s { _lambdaFunctionRole = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-runtime
lfRuntime :: Lens' LambdaFunction (Val Runtime)
lfRuntime = lens _lambdaFunctionRuntime (\s a -> s { _lambdaFunctionRuntime = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-tags
lfTags :: Lens' LambdaFunction (Maybe [Tag])
lfTags = lens _lambdaFunctionTags (\s a -> s { _lambdaFunctionTags = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-timeout
lfTimeout :: Lens' LambdaFunction (Maybe (Val Integer))
lfTimeout = lens _lambdaFunctionTimeout (\s a -> s { _lambdaFunctionTimeout = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-tracingconfig
lfTracingConfig :: Lens' LambdaFunction (Maybe LambdaFunctionTracingConfig)
lfTracingConfig = lens _lambdaFunctionTracingConfig (\s a -> s { _lambdaFunctionTracingConfig = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-vpcconfig
lfVpcConfig :: Lens' LambdaFunction (Maybe LambdaFunctionVpcConfig)
lfVpcConfig = lens _lambdaFunctionVpcConfig (\s a -> s { _lambdaFunctionVpcConfig = a })