{-# 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) , _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 (("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 ] instance FromJSON LambdaFunction where parseJSON (Object obj) = LambdaFunction <$> (obj .: "Code") <*> (obj .:? "DeadLetterConfig") <*> (obj .:? "Description") <*> (obj .:? "Environment") <*> (obj .:? "FunctionName") <*> (obj .: "Handler") <*> (obj .:? "KmsKeyArn") <*> fmap (fmap (fmap unInteger')) (obj .:? "MemorySize") <*> fmap (fmap (fmap unInteger')) (obj .:? "ReservedConcurrentExecutions") <*> (obj .: "Role") <*> (obj .: "Runtime") <*> (obj .:? "Tags") <*> fmap (fmap (fmap unInteger')) (obj .:? "Timeout") <*> (obj .:? "TracingConfig") <*> (obj .:? "VpcConfig") parseJSON _ = mempty -- | 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 , _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-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 })