{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
module AWSLambda.Events
( module AWSLambda.Events.APIGateway
, module AWSLambda.Events.KinesisEvent
, module AWSLambda.Events.MessageAttribute
, module AWSLambda.Events.Records
, module AWSLambda.Events.S3Event
, module AWSLambda.Events.SNSEvent
, module AWSLambda.Events.SQSEvent
, traverseSnsInSqs
, snsInSqsMain
, traverseS3InSnsInSqs
, s3InSnsInSqsMain
) where
import Control.Exception.Safe (MonadCatch)
import Control.Monad.IO.Class
import Data.Aeson (FromJSON (..))
import AWSLambda.Events.APIGateway
import AWSLambda.Events.KinesisEvent
import AWSLambda.Events.MessageAttribute
import AWSLambda.Events.Records
import AWSLambda.Events.S3Event
import AWSLambda.Events.SNSEvent
import AWSLambda.Events.SQSEvent
import AWSLambda.Handler (lambdaMain)
import Data.Aeson.Embedded (Embedded)
traverseSnsInSqs :: (FromJSON a, Applicative m) => (a -> m ()) -> SQSEvent (Embedded (SNSMessage (Embedded a))) -> m ()
traverseSnsInSqs = traverseSqs . traverseSnsMessage
snsInSqsMain :: (FromJSON a, MonadCatch m, MonadIO m) => (a -> m ()) -> m ()
snsInSqsMain = lambdaMain . traverseSnsInSqs
traverseS3InSnsInSqs :: (Applicative m) => (S3EventNotification -> m ()) -> SQSEvent (Embedded (SNSMessage (Embedded S3Event))) -> m ()
traverseS3InSnsInSqs = traverseSnsInSqs . traverseRecords
s3InSnsInSqsMain :: (MonadCatch m, MonadIO m) => (S3EventNotification -> m ()) -> m ()
s3InSnsInSqsMain = lambdaMain . traverseS3InSnsInSqs