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)