{-# LANGUAGE TemplateHaskell #-} module AWSLambda.Events where import Control.Applicative ((<|>)) import Control.Lens.TH import Data.Aeson (FromJSON (..), Value) import AWSLambda.Events.KinesisEvent import AWSLambda.Events.S3Event import AWSLambda.Events.SNSEvent data DynamoDBEvent data SESEvent data CognitoEvent data CloudFormationEvent data CloudWatchLogsEvent data CloudWatchEventsEvent data CodeCommitEvent data ConfigEvent data AlexaEvent data LexEvent data APIGatewayEvent data IoTButtonEvent data CloudFrontEvent data FirehoseEvent data InvokeEvent data LambdaEvent = S3 !S3Event | DynamoDB !DynamoDBEvent | KinesisStream !KinesisEvent | SNS !SNSEvent | SES !SESEvent | Cognito !CognitoEvent | CloudFormation !CloudFormationEvent | CloudWatchLogs !CloudWatchLogsEvent | CloudWatchEvents !CloudWatchEventsEvent | CodeCommit !CodeCommitEvent | Config !ConfigEvent | Alexa !AlexaEvent | Lex !LexEvent | APIGateway !APIGatewayEvent | IoTButton !IoTButtonEvent | CloudFront !CloudFrontEvent | Firehose !FirehoseEvent | Invoke !InvokeEvent | Custom !Value instance FromJSON LambdaEvent where parseJSON v = S3 <$> parseJSON v <|> pure (Custom v) $(makePrisms ''LambdaEvent)