{-# 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
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 snsMessage
= S3 !S3Event
| DynamoDB !DynamoDBEvent
| KinesisStream !KinesisEvent
| SNS !(SNSEvent snsMessage)
| 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 snsMessage =>
FromJSON (LambdaEvent snsMessage) where
parseJSON v =
try S3 v <|> try KinesisStream v <|> try SNS v <|> pure (Custom v)
where
try f = fmap f . parseJSON
$(makePrisms ''LambdaEvent)