{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
module AWSLambda.Events.KinesisEvent where
import Control.Lens.TH
import Data.Aeson (FromJSON (..), withObject, (.:))
import Data.Aeson.Casing (aesonDrop, camelCase)
import Data.Aeson.TH (deriveFromJSON)
import Data.Text (Text)
import Network.AWS.Data.Base64 (Base64 (..))
import qualified Network.AWS.Kinesis.Types as Kinesis
import qualified Network.AWS.Types as AWS
import AWSLambda.Events.Records
data KinesisRecord = KinesisRecord
{ KinesisRecord -> Record
_krRecord :: !Kinesis.Record
, KinesisRecord -> Text
_krKinesisSchemaVersion :: !Text
} deriving (KinesisRecord -> KinesisRecord -> Bool
(KinesisRecord -> KinesisRecord -> Bool)
-> (KinesisRecord -> KinesisRecord -> Bool) -> Eq KinesisRecord
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: KinesisRecord -> KinesisRecord -> Bool
$c/= :: KinesisRecord -> KinesisRecord -> Bool
== :: KinesisRecord -> KinesisRecord -> Bool
$c== :: KinesisRecord -> KinesisRecord -> Bool
Eq, Int -> KinesisRecord -> ShowS
[KinesisRecord] -> ShowS
KinesisRecord -> String
(Int -> KinesisRecord -> ShowS)
-> (KinesisRecord -> String)
-> ([KinesisRecord] -> ShowS)
-> Show KinesisRecord
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [KinesisRecord] -> ShowS
$cshowList :: [KinesisRecord] -> ShowS
show :: KinesisRecord -> String
$cshow :: KinesisRecord -> String
showsPrec :: Int -> KinesisRecord -> ShowS
$cshowsPrec :: Int -> KinesisRecord -> ShowS
Show)
instance FromJSON KinesisRecord where
parseJSON :: Value -> Parser KinesisRecord
parseJSON =
String
-> (Object -> Parser KinesisRecord)
-> Value
-> Parser KinesisRecord
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"KinesisRecord" ((Object -> Parser KinesisRecord) -> Value -> Parser KinesisRecord)
-> (Object -> Parser KinesisRecord)
-> Value
-> Parser KinesisRecord
forall a b. (a -> b) -> a -> b
$
\Object
o -> do
Text
_krKinesisSchemaVersion <- Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"kinesisSchemaVersion"
Base64
dataBase64 <- Object
o Object -> Text -> Parser Base64
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"data"
Record
_krRecord <-
Text -> ByteString -> Text -> Record
Kinesis.record (Text -> ByteString -> Text -> Record)
-> Parser Text -> Parser (ByteString -> Text -> Record)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"sequenceNumber") Parser (ByteString -> Text -> Record)
-> Parser ByteString -> Parser (Text -> Record)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ByteString -> Parser ByteString
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Base64 -> ByteString
unBase64 Base64
dataBase64) Parser (Text -> Record) -> Parser Text -> Parser Record
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
(Object
o Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"partitionKey")
KinesisRecord -> Parser KinesisRecord
forall (m :: * -> *) a. Monad m => a -> m a
return KinesisRecord :: Record -> Text -> KinesisRecord
KinesisRecord {Text
Record
_krRecord :: Record
_krKinesisSchemaVersion :: Text
_krKinesisSchemaVersion :: Text
_krRecord :: Record
..}
$(makeLenses ''KinesisRecord)
data KinesisEventRecord = KinesisEventRecord
{ KinesisEventRecord -> KinesisRecord
_kerKinesis :: !KinesisRecord
, KinesisEventRecord -> Text
_kerEventSource :: !Text
, KinesisEventRecord -> Text
_kerEventID :: !Text
, KinesisEventRecord -> Text
_kerInvokeIdentityArn :: !Text
, KinesisEventRecord -> Text
_kerEventVersion :: !Text
, KinesisEventRecord -> Text
_kerEventName :: !Text
, KinesisEventRecord -> Text
_kerEventSourceARN :: !Text
, KinesisEventRecord -> Region
_kerAwsRegion :: !AWS.Region
} deriving (KinesisEventRecord -> KinesisEventRecord -> Bool
(KinesisEventRecord -> KinesisEventRecord -> Bool)
-> (KinesisEventRecord -> KinesisEventRecord -> Bool)
-> Eq KinesisEventRecord
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: KinesisEventRecord -> KinesisEventRecord -> Bool
$c/= :: KinesisEventRecord -> KinesisEventRecord -> Bool
== :: KinesisEventRecord -> KinesisEventRecord -> Bool
$c== :: KinesisEventRecord -> KinesisEventRecord -> Bool
Eq, Int -> KinesisEventRecord -> ShowS
[KinesisEventRecord] -> ShowS
KinesisEventRecord -> String
(Int -> KinesisEventRecord -> ShowS)
-> (KinesisEventRecord -> String)
-> ([KinesisEventRecord] -> ShowS)
-> Show KinesisEventRecord
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [KinesisEventRecord] -> ShowS
$cshowList :: [KinesisEventRecord] -> ShowS
show :: KinesisEventRecord -> String
$cshow :: KinesisEventRecord -> String
showsPrec :: Int -> KinesisEventRecord -> ShowS
$cshowsPrec :: Int -> KinesisEventRecord -> ShowS
Show)
$(deriveFromJSON (aesonDrop 4 camelCase) ''KinesisEventRecord)
$(makeLenses ''KinesisEventRecord)
type KinesisEvent = RecordsEvent KinesisEventRecord