{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
module AWSLambda.Events where
import Control.Applicative ((<|>))
import Control.Lens.TH
import Data.Aeson (FromJSON (..), Value)
import Network.AWS.Data.Text (FromText)
import AWSLambda.Events.KinesisEvent
import AWSLambda.Events.S3Event
import AWSLambda.Events.SNSEvent
import AWSLambda.Events.SQSEvent
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 message
= S3 !S3Event
| DynamoDB !DynamoDBEvent
| KinesisStream !KinesisEvent
| SNS !(SNSEvent message)
| SQS !(SQSEvent message)
| 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 FromText message =>
FromJSON (LambdaEvent message) where
parseJSON v =
try S3 v <|> try KinesisStream v <|> try SNS v <|> try SQS v <|> pure (Custom v)
where
try f = fmap f . parseJSON
$(makePrisms ''LambdaEvent)