hal-0.4.0: src/AWS/Lambda/Events/SQS.hs
{-|
Module : AWS.Lambda.Events.SQS
Description : Data types for working with SQS events.
Copyright : (c) Nike, Inc., 2019
License : BSD3
Maintainer : nathan.fairhurst@nike.com, fernando.freire@nike.com
Stability : stable
-}
module AWS.Lambda.Events.SQS (
Records (..),
Attributes (..),
SQSEvent (..)
) where
import Data.Aeson (FromJSON (..), withObject, (.:))
import Data.Map (Map)
import Data.Text (Text)
import GHC.Generics (Generic)
newtype Records = Records {
records :: [SQSEvent]
} deriving (Show, Eq)
instance FromJSON Records where
parseJSON = withObject "Records" $ \v -> Records <$> v .: "Records"
data Attributes = Attributes {
approximateReceiveCount :: Text,
sentTimestamp :: Text,
senderId :: Text,
approximateFirstReceiveTimestamp :: Text
} deriving (Show, Eq)
instance FromJSON Attributes where
parseJSON = withObject "Attributes" $ \v ->
Attributes
<$> v .: "ApproximateReceiveCount"
<*> v .: "SentTimestamp"
<*> v .: "SenderId"
<*> v .: "ApproximateFirstReceiveTimestamp"
data SQSEvent = SQSEvent {
messageId :: Text,
receiptHandle :: Text,
body :: Text,
attributes :: Attributes,
messageAttributes :: Map Text Text,
md5OfBody :: Text,
eventSource :: Text,
eventSourceARN :: Text,
awsRegion :: Text
} deriving (Show, Eq, Generic)
instance FromJSON SQSEvent