serverless-haskell-0.12.0: src/AWSLambda/Events/Records.hs
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module AWSLambda.Events.Records where
import Control.Exception.Safe (MonadCatch)
import Control.Lens.TH (makeLenses)
import Control.Monad.IO.Class
import Data.Aeson (FromJSON(..), withObject, (.:))
import Data.Foldable (traverse_)
import AWSLambda.Handler (lambdaMain)
newtype RecordsEvent a = RecordsEvent { _reRecords :: [a] } deriving (Eq, Show, Functor, Foldable)
instance FromJSON a => FromJSON (RecordsEvent a) where
parseJSON = withObject "RecordsEvent" $ \o -> RecordsEvent <$> o .: "Records"
$(makeLenses ''RecordsEvent)
-- | Traverse all the records in a Lambda event
traverseRecords :: Applicative m => (a -> m ()) -> RecordsEvent a -> m ()
traverseRecords = traverse_
-- | A specialised version of the 'lambdaMain' entry-point
-- for handling individual records in a Lambda event
recordsMain :: (FromJSON a, MonadCatch m, MonadIO m) => (a -> m ()) -> m ()
recordsMain = lambdaMain . traverseRecords