{-# LANGUAGE ApplicativeDo #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE NamedFieldPuns #-}
module AWS.Lambda.Events.EventBridge (
EventBridgeEvent,
EventBridgeEvent'(..)
) where
import Control.Monad (unless)
import Data.Aeson
import Data.Text (Text)
import Data.Time (UTCTime)
import GHC.Generics (Generic)
import Prelude hiding (id)
type EventBridgeEvent = EventBridgeEvent' Value
data EventBridgeEvent' a = EventBridgeEvent {
EventBridgeEvent' a -> Text
version :: Text,
EventBridgeEvent' a -> Text
id :: Text,
EventBridgeEvent' a -> Text
detailType :: Text,
EventBridgeEvent' a -> Text
source :: Text,
EventBridgeEvent' a -> Text
account :: Text,
EventBridgeEvent' a -> UTCTime
time :: UTCTime,
EventBridgeEvent' a -> Text
region :: Text,
EventBridgeEvent' a -> [Text]
resources :: [Text],
EventBridgeEvent' a -> a
detail :: a
} deriving (EventBridgeEvent' a -> EventBridgeEvent' a -> Bool
(EventBridgeEvent' a -> EventBridgeEvent' a -> Bool)
-> (EventBridgeEvent' a -> EventBridgeEvent' a -> Bool)
-> Eq (EventBridgeEvent' a)
forall a.
Eq a =>
EventBridgeEvent' a -> EventBridgeEvent' a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EventBridgeEvent' a -> EventBridgeEvent' a -> Bool
$c/= :: forall a.
Eq a =>
EventBridgeEvent' a -> EventBridgeEvent' a -> Bool
== :: EventBridgeEvent' a -> EventBridgeEvent' a -> Bool
$c== :: forall a.
Eq a =>
EventBridgeEvent' a -> EventBridgeEvent' a -> Bool
Eq, Int -> EventBridgeEvent' a -> ShowS
[EventBridgeEvent' a] -> ShowS
EventBridgeEvent' a -> String
(Int -> EventBridgeEvent' a -> ShowS)
-> (EventBridgeEvent' a -> String)
-> ([EventBridgeEvent' a] -> ShowS)
-> Show (EventBridgeEvent' a)
forall a. Show a => Int -> EventBridgeEvent' a -> ShowS
forall a. Show a => [EventBridgeEvent' a] -> ShowS
forall a. Show a => EventBridgeEvent' a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EventBridgeEvent' a] -> ShowS
$cshowList :: forall a. Show a => [EventBridgeEvent' a] -> ShowS
show :: EventBridgeEvent' a -> String
$cshow :: forall a. Show a => EventBridgeEvent' a -> String
showsPrec :: Int -> EventBridgeEvent' a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> EventBridgeEvent' a -> ShowS
Show, (forall x. EventBridgeEvent' a -> Rep (EventBridgeEvent' a) x)
-> (forall x. Rep (EventBridgeEvent' a) x -> EventBridgeEvent' a)
-> Generic (EventBridgeEvent' a)
forall x. Rep (EventBridgeEvent' a) x -> EventBridgeEvent' a
forall x. EventBridgeEvent' a -> Rep (EventBridgeEvent' a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (EventBridgeEvent' a) x -> EventBridgeEvent' a
forall a x. EventBridgeEvent' a -> Rep (EventBridgeEvent' a) x
$cto :: forall a x. Rep (EventBridgeEvent' a) x -> EventBridgeEvent' a
$cfrom :: forall a x. EventBridgeEvent' a -> Rep (EventBridgeEvent' a) x
Generic, a -> EventBridgeEvent' b -> EventBridgeEvent' a
(a -> b) -> EventBridgeEvent' a -> EventBridgeEvent' b
(forall a b.
(a -> b) -> EventBridgeEvent' a -> EventBridgeEvent' b)
-> (forall a b. a -> EventBridgeEvent' b -> EventBridgeEvent' a)
-> Functor EventBridgeEvent'
forall a b. a -> EventBridgeEvent' b -> EventBridgeEvent' a
forall a b. (a -> b) -> EventBridgeEvent' a -> EventBridgeEvent' b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> EventBridgeEvent' b -> EventBridgeEvent' a
$c<$ :: forall a b. a -> EventBridgeEvent' b -> EventBridgeEvent' a
fmap :: (a -> b) -> EventBridgeEvent' a -> EventBridgeEvent' b
$cfmap :: forall a b. (a -> b) -> EventBridgeEvent' a -> EventBridgeEvent' b
Functor, EventBridgeEvent' a -> Bool
(a -> m) -> EventBridgeEvent' a -> m
(a -> b -> b) -> b -> EventBridgeEvent' a -> b
(forall m. Monoid m => EventBridgeEvent' m -> m)
-> (forall m a. Monoid m => (a -> m) -> EventBridgeEvent' a -> m)
-> (forall m a. Monoid m => (a -> m) -> EventBridgeEvent' a -> m)
-> (forall a b. (a -> b -> b) -> b -> EventBridgeEvent' a -> b)
-> (forall a b. (a -> b -> b) -> b -> EventBridgeEvent' a -> b)
-> (forall b a. (b -> a -> b) -> b -> EventBridgeEvent' a -> b)
-> (forall b a. (b -> a -> b) -> b -> EventBridgeEvent' a -> b)
-> (forall a. (a -> a -> a) -> EventBridgeEvent' a -> a)
-> (forall a. (a -> a -> a) -> EventBridgeEvent' a -> a)
-> (forall a. EventBridgeEvent' a -> [a])
-> (forall a. EventBridgeEvent' a -> Bool)
-> (forall a. EventBridgeEvent' a -> Int)
-> (forall a. Eq a => a -> EventBridgeEvent' a -> Bool)
-> (forall a. Ord a => EventBridgeEvent' a -> a)
-> (forall a. Ord a => EventBridgeEvent' a -> a)
-> (forall a. Num a => EventBridgeEvent' a -> a)
-> (forall a. Num a => EventBridgeEvent' a -> a)
-> Foldable EventBridgeEvent'
forall a. Eq a => a -> EventBridgeEvent' a -> Bool
forall a. Num a => EventBridgeEvent' a -> a
forall a. Ord a => EventBridgeEvent' a -> a
forall m. Monoid m => EventBridgeEvent' m -> m
forall a. EventBridgeEvent' a -> Bool
forall a. EventBridgeEvent' a -> Int
forall a. EventBridgeEvent' a -> [a]
forall a. (a -> a -> a) -> EventBridgeEvent' a -> a
forall m a. Monoid m => (a -> m) -> EventBridgeEvent' a -> m
forall b a. (b -> a -> b) -> b -> EventBridgeEvent' a -> b
forall a b. (a -> b -> b) -> b -> EventBridgeEvent' a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
product :: EventBridgeEvent' a -> a
$cproduct :: forall a. Num a => EventBridgeEvent' a -> a
sum :: EventBridgeEvent' a -> a
$csum :: forall a. Num a => EventBridgeEvent' a -> a
minimum :: EventBridgeEvent' a -> a
$cminimum :: forall a. Ord a => EventBridgeEvent' a -> a
maximum :: EventBridgeEvent' a -> a
$cmaximum :: forall a. Ord a => EventBridgeEvent' a -> a
elem :: a -> EventBridgeEvent' a -> Bool
$celem :: forall a. Eq a => a -> EventBridgeEvent' a -> Bool
length :: EventBridgeEvent' a -> Int
$clength :: forall a. EventBridgeEvent' a -> Int
null :: EventBridgeEvent' a -> Bool
$cnull :: forall a. EventBridgeEvent' a -> Bool
toList :: EventBridgeEvent' a -> [a]
$ctoList :: forall a. EventBridgeEvent' a -> [a]
foldl1 :: (a -> a -> a) -> EventBridgeEvent' a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> EventBridgeEvent' a -> a
foldr1 :: (a -> a -> a) -> EventBridgeEvent' a -> a
$cfoldr1 :: forall a. (a -> a -> a) -> EventBridgeEvent' a -> a
foldl' :: (b -> a -> b) -> b -> EventBridgeEvent' a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> EventBridgeEvent' a -> b
foldl :: (b -> a -> b) -> b -> EventBridgeEvent' a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> EventBridgeEvent' a -> b
foldr' :: (a -> b -> b) -> b -> EventBridgeEvent' a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> EventBridgeEvent' a -> b
foldr :: (a -> b -> b) -> b -> EventBridgeEvent' a -> b
$cfoldr :: forall a b. (a -> b -> b) -> b -> EventBridgeEvent' a -> b
foldMap' :: (a -> m) -> EventBridgeEvent' a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> EventBridgeEvent' a -> m
foldMap :: (a -> m) -> EventBridgeEvent' a -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> EventBridgeEvent' a -> m
fold :: EventBridgeEvent' m -> m
$cfold :: forall m. Monoid m => EventBridgeEvent' m -> m
Foldable, Functor EventBridgeEvent'
Foldable EventBridgeEvent'
Functor EventBridgeEvent'
-> Foldable EventBridgeEvent'
-> (forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> EventBridgeEvent' a -> f (EventBridgeEvent' b))
-> (forall (f :: * -> *) a.
Applicative f =>
EventBridgeEvent' (f a) -> f (EventBridgeEvent' a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> EventBridgeEvent' a -> m (EventBridgeEvent' b))
-> (forall (m :: * -> *) a.
Monad m =>
EventBridgeEvent' (m a) -> m (EventBridgeEvent' a))
-> Traversable EventBridgeEvent'
(a -> f b) -> EventBridgeEvent' a -> f (EventBridgeEvent' b)
forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a.
Monad m =>
EventBridgeEvent' (m a) -> m (EventBridgeEvent' a)
forall (f :: * -> *) a.
Applicative f =>
EventBridgeEvent' (f a) -> f (EventBridgeEvent' a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> EventBridgeEvent' a -> m (EventBridgeEvent' b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> EventBridgeEvent' a -> f (EventBridgeEvent' b)
sequence :: EventBridgeEvent' (m a) -> m (EventBridgeEvent' a)
$csequence :: forall (m :: * -> *) a.
Monad m =>
EventBridgeEvent' (m a) -> m (EventBridgeEvent' a)
mapM :: (a -> m b) -> EventBridgeEvent' a -> m (EventBridgeEvent' b)
$cmapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> EventBridgeEvent' a -> m (EventBridgeEvent' b)
sequenceA :: EventBridgeEvent' (f a) -> f (EventBridgeEvent' a)
$csequenceA :: forall (f :: * -> *) a.
Applicative f =>
EventBridgeEvent' (f a) -> f (EventBridgeEvent' a)
traverse :: (a -> f b) -> EventBridgeEvent' a -> f (EventBridgeEvent' b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> EventBridgeEvent' a -> f (EventBridgeEvent' b)
$cp2Traversable :: Foldable EventBridgeEvent'
$cp1Traversable :: Functor EventBridgeEvent'
Traversable)
instance FromJSON a => FromJSON (EventBridgeEvent' a) where
parseJSON :: Value -> Parser (EventBridgeEvent' a)
parseJSON = String
-> (Object -> Parser (EventBridgeEvent' a))
-> Value
-> Parser (EventBridgeEvent' a)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"EventBridgeEvent" ((Object -> Parser (EventBridgeEvent' a))
-> Value -> Parser (EventBridgeEvent' a))
-> (Object -> Parser (EventBridgeEvent' a))
-> Value
-> Parser (EventBridgeEvent' a)
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
Text
version <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"version"
Bool -> Parser () -> Parser ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Text
version Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
"0") (Parser () -> Parser ()) -> Parser () -> Parser ()
forall a b. (a -> b) -> a -> b
$ String -> Parser ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"version != 0"
Text
id <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id"
Text
detailType <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"detail-type"
Text
source <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"source"
Text
account <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"account"
UTCTime
time <- Object
o Object -> Key -> Parser UTCTime
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"time"
Text
region <- Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"region"
[Text]
resources <- Object
o Object -> Key -> Parser [Text]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"resources"
a
detail <- Object
o Object -> Key -> Parser a
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"detail"
pure EventBridgeEvent :: forall a.
Text
-> Text
-> Text
-> Text
-> Text
-> UTCTime
-> Text
-> [Text]
-> a
-> EventBridgeEvent' a
EventBridgeEvent
{ Text
version :: Text
$sel:version:EventBridgeEvent :: Text
version
, Text
id :: Text
$sel:id:EventBridgeEvent :: Text
id
, Text
detailType :: Text
$sel:detailType:EventBridgeEvent :: Text
detailType
, Text
source :: Text
$sel:source:EventBridgeEvent :: Text
source
, Text
account :: Text
$sel:account:EventBridgeEvent :: Text
account
, UTCTime
time :: UTCTime
$sel:time:EventBridgeEvent :: UTCTime
time
, Text
region :: Text
$sel:region:EventBridgeEvent :: Text
region
, [Text]
resources :: [Text]
$sel:resources:EventBridgeEvent :: [Text]
resources
, a
detail :: a
$sel:detail:EventBridgeEvent :: a
detail
}
instance ToJSON a => ToJSON (EventBridgeEvent' a) where
toJSON :: EventBridgeEvent' a -> Value
toJSON EventBridgeEvent' a
event = [Pair] -> Value
object
[ Key
"version" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
version EventBridgeEvent' a
event
, Key
"id" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
id EventBridgeEvent' a
event
, Key
"detail-type" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
detailType EventBridgeEvent' a
event
, Key
"source" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
source EventBridgeEvent' a
event
, Key
"account" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
account EventBridgeEvent' a
event
, Key
"time" Key -> UTCTime -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> UTCTime
forall a. EventBridgeEvent' a -> UTCTime
time EventBridgeEvent' a
event
, Key
"region" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
region EventBridgeEvent' a
event
, Key
"resources" Key -> [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> [Text]
forall a. EventBridgeEvent' a -> [Text]
resources EventBridgeEvent' a
event
, Key
"detail" Key -> a -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> a
forall a. EventBridgeEvent' a -> a
detail EventBridgeEvent' a
event
]
toEncoding :: EventBridgeEvent' a -> Encoding
toEncoding EventBridgeEvent' a
event = Series -> Encoding
pairs (Series -> Encoding) -> Series -> Encoding
forall a b. (a -> b) -> a -> b
$ [Series] -> Series
forall a. Monoid a => [a] -> a
mconcat
[ Key
"version" Key -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
version EventBridgeEvent' a
event
, Key
"id" Key -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
id EventBridgeEvent' a
event
, Key
"detail-type" Key -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
detailType EventBridgeEvent' a
event
, Key
"source" Key -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
source EventBridgeEvent' a
event
, Key
"account" Key -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
account EventBridgeEvent' a
event
, Key
"time" Key -> UTCTime -> Series
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> UTCTime
forall a. EventBridgeEvent' a -> UTCTime
time EventBridgeEvent' a
event
, Key
"region" Key -> Text -> Series
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> Text
forall a. EventBridgeEvent' a -> Text
region EventBridgeEvent' a
event
, Key
"resources" Key -> [Text] -> Series
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> [Text]
forall a. EventBridgeEvent' a -> [Text]
resources EventBridgeEvent' a
event
, Key
"detail" Key -> a -> Series
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= EventBridgeEvent' a -> a
forall a. EventBridgeEvent' a -> a
detail EventBridgeEvent' a
event
]