{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

-- | Gerrit stream event data type
module Gerrit.Event
  ( -- * Main event data types
    EventType (..),
    Event (..),

    -- * Common data types
    User (..),
    PatchSet (..),
    Change (..),
    Ref (..),

    -- * Individual event data types
    AssigneeChanged (..),
    ChangeAbandoned (..),
    ChangeDeleted (..),
    ChangeMerged (..),
    ChangeRestored (..),
    CommentAdded (..),
    HashtagsChanged (..),
    ProjectCreated (..),
    PatchsetCreated (..),
    RefUpdated (..),
    ReviewerAdded (..),
    ReviewerDeleted (..),
    TopicChanged (..),
    WorkInProgressStateChanged (..),
    PrivateStateChanged (..),
    VoteDeleted (..),

    -- * Convenient functions
    getChange,
    getUser,
    getEventType,
    eventName,
  )
where

import Control.Monad (mzero)
import Data.Aeson
  ( FromJSON (..),
    Options (fieldLabelModifier),
    Value (Object, String),
    defaultOptions,
    genericParseJSON,
    (.:),
  )
import Data.Char (toLower)
import Data.Text (Text)
import qualified Data.Text as Text
import GHC.Generics (Generic)

aesonOption :: Text -> Options
aesonOption :: Text -> Options
aesonOption Text
prefix = Options
defaultOptions {fieldLabelModifier :: String -> String
fieldLabelModifier = String -> String
recordToJson}
  where
    recordToJson :: String -> String
recordToJson = String -> String
updateCase (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
forall a. Int -> [a] -> [a]
drop (Text -> Int
Text.length Text
prefix)
    updateCase :: String -> String
updateCase [] = []
    updateCase (Char
x : String
xs) = Char -> Char
toLower Char
x Char -> String -> String
forall a. a -> [a] -> [a]
: String
xs

-------------------------------------------------------------------------------
-- Shared types
-------------------------------------------------------------------------------
data User = User
  { User -> Maybe Text
userName :: Maybe Text,
    User -> Maybe Text
userEmail :: Maybe Text,
    User -> Maybe Text
userUsername :: Maybe Text
  }
  deriving (Int -> User -> String -> String
[User] -> String -> String
User -> String
(Int -> User -> String -> String)
-> (User -> String) -> ([User] -> String -> String) -> Show User
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [User] -> String -> String
$cshowList :: [User] -> String -> String
show :: User -> String
$cshow :: User -> String
showsPrec :: Int -> User -> String -> String
$cshowsPrec :: Int -> User -> String -> String
Show, User -> User -> Bool
(User -> User -> Bool) -> (User -> User -> Bool) -> Eq User
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: User -> User -> Bool
$c/= :: User -> User -> Bool
== :: User -> User -> Bool
$c== :: User -> User -> Bool
Eq, (forall x. User -> Rep User x)
-> (forall x. Rep User x -> User) -> Generic User
forall x. Rep User x -> User
forall x. User -> Rep User x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep User x -> User
$cfrom :: forall x. User -> Rep User x
Generic)

instance FromJSON User where
  parseJSON :: Value -> Parser User
parseJSON = Options -> Value -> Parser User
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser User)
-> Options -> Value -> Parser User
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"user"

data PatchSet = PatchSet
  { PatchSet -> Int
patchSetNumber :: Int,
    PatchSet -> Text
patchSetRef :: Text,
    PatchSet -> User
patchSetUploader :: User,
    PatchSet -> User
patchsetAuthor :: User
  }
  deriving (Int -> PatchSet -> String -> String
[PatchSet] -> String -> String
PatchSet -> String
(Int -> PatchSet -> String -> String)
-> (PatchSet -> String)
-> ([PatchSet] -> String -> String)
-> Show PatchSet
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PatchSet] -> String -> String
$cshowList :: [PatchSet] -> String -> String
show :: PatchSet -> String
$cshow :: PatchSet -> String
showsPrec :: Int -> PatchSet -> String -> String
$cshowsPrec :: Int -> PatchSet -> String -> String
Show, PatchSet -> PatchSet -> Bool
(PatchSet -> PatchSet -> Bool)
-> (PatchSet -> PatchSet -> Bool) -> Eq PatchSet
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PatchSet -> PatchSet -> Bool
$c/= :: PatchSet -> PatchSet -> Bool
== :: PatchSet -> PatchSet -> Bool
$c== :: PatchSet -> PatchSet -> Bool
Eq, (forall x. PatchSet -> Rep PatchSet x)
-> (forall x. Rep PatchSet x -> PatchSet) -> Generic PatchSet
forall x. Rep PatchSet x -> PatchSet
forall x. PatchSet -> Rep PatchSet x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PatchSet x -> PatchSet
$cfrom :: forall x. PatchSet -> Rep PatchSet x
Generic)

instance FromJSON PatchSet where
  parseJSON :: Value -> Parser PatchSet
parseJSON = Options -> Value -> Parser PatchSet
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser PatchSet)
-> Options -> Value -> Parser PatchSet
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"patchSet"

data Change = Change
  { Change -> Text
changeProject :: Text,
    Change -> Text
changeBranch :: Text,
    Change -> Text
changeSubject :: Text,
    Change -> Text
changeUrl :: Text,
    Change -> User
changeOwner :: User
  }
  deriving (Int -> Change -> String -> String
[Change] -> String -> String
Change -> String
(Int -> Change -> String -> String)
-> (Change -> String)
-> ([Change] -> String -> String)
-> Show Change
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [Change] -> String -> String
$cshowList :: [Change] -> String -> String
show :: Change -> String
$cshow :: Change -> String
showsPrec :: Int -> Change -> String -> String
$cshowsPrec :: Int -> Change -> String -> String
Show, Change -> Change -> Bool
(Change -> Change -> Bool)
-> (Change -> Change -> Bool) -> Eq Change
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Change -> Change -> Bool
$c/= :: Change -> Change -> Bool
== :: Change -> Change -> Bool
$c== :: Change -> Change -> Bool
Eq, (forall x. Change -> Rep Change x)
-> (forall x. Rep Change x -> Change) -> Generic Change
forall x. Rep Change x -> Change
forall x. Change -> Rep Change x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Change x -> Change
$cfrom :: forall x. Change -> Rep Change x
Generic)

instance FromJSON Change where
  parseJSON :: Value -> Parser Change
parseJSON = Options -> Value -> Parser Change
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser Change)
-> Options -> Value -> Parser Change
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"change"

data Ref = Ref
  { Ref -> Text
refOldRev :: Text,
    Ref -> Text
refNewRev :: Text,
    Ref -> Text
refRefName :: Text,
    Ref -> Text
refProject :: Text
  }
  deriving (Int -> Ref -> String -> String
[Ref] -> String -> String
Ref -> String
(Int -> Ref -> String -> String)
-> (Ref -> String) -> ([Ref] -> String -> String) -> Show Ref
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [Ref] -> String -> String
$cshowList :: [Ref] -> String -> String
show :: Ref -> String
$cshow :: Ref -> String
showsPrec :: Int -> Ref -> String -> String
$cshowsPrec :: Int -> Ref -> String -> String
Show, Ref -> Ref -> Bool
(Ref -> Ref -> Bool) -> (Ref -> Ref -> Bool) -> Eq Ref
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Ref -> Ref -> Bool
$c/= :: Ref -> Ref -> Bool
== :: Ref -> Ref -> Bool
$c== :: Ref -> Ref -> Bool
Eq, (forall x. Ref -> Rep Ref x)
-> (forall x. Rep Ref x -> Ref) -> Generic Ref
forall x. Rep Ref x -> Ref
forall x. Ref -> Rep Ref x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Ref x -> Ref
$cfrom :: forall x. Ref -> Rep Ref x
Generic)

instance FromJSON Ref where
  parseJSON :: Value -> Parser Ref
parseJSON = Options -> Value -> Parser Ref
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser Ref) -> Options -> Value -> Parser Ref
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"ref"

-------------------------------------------------------------------------------
-- Individual Event data types
-------------------------------------------------------------------------------
data AssigneeChanged = AssigneeChanged
  { AssigneeChanged -> Change
assigneeChangedChange :: Change,
    AssigneeChanged -> User
assigneeChangedChanger :: User
  }
  deriving (Int -> AssigneeChanged -> String -> String
[AssigneeChanged] -> String -> String
AssigneeChanged -> String
(Int -> AssigneeChanged -> String -> String)
-> (AssigneeChanged -> String)
-> ([AssigneeChanged] -> String -> String)
-> Show AssigneeChanged
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [AssigneeChanged] -> String -> String
$cshowList :: [AssigneeChanged] -> String -> String
show :: AssigneeChanged -> String
$cshow :: AssigneeChanged -> String
showsPrec :: Int -> AssigneeChanged -> String -> String
$cshowsPrec :: Int -> AssigneeChanged -> String -> String
Show, AssigneeChanged -> AssigneeChanged -> Bool
(AssigneeChanged -> AssigneeChanged -> Bool)
-> (AssigneeChanged -> AssigneeChanged -> Bool)
-> Eq AssigneeChanged
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssigneeChanged -> AssigneeChanged -> Bool
$c/= :: AssigneeChanged -> AssigneeChanged -> Bool
== :: AssigneeChanged -> AssigneeChanged -> Bool
$c== :: AssigneeChanged -> AssigneeChanged -> Bool
Eq, (forall x. AssigneeChanged -> Rep AssigneeChanged x)
-> (forall x. Rep AssigneeChanged x -> AssigneeChanged)
-> Generic AssigneeChanged
forall x. Rep AssigneeChanged x -> AssigneeChanged
forall x. AssigneeChanged -> Rep AssigneeChanged x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AssigneeChanged x -> AssigneeChanged
$cfrom :: forall x. AssigneeChanged -> Rep AssigneeChanged x
Generic)

data ChangeAbandoned = ChangeAbandoned
  { ChangeAbandoned -> Text
changeAbandonedProject :: Text,
    ChangeAbandoned -> User
changeAbandonedAbandoner :: User,
    ChangeAbandoned -> Change
changeAbandonedChange :: Change,
    ChangeAbandoned -> PatchSet
changeAbandonedPatchSet :: PatchSet
  }
  deriving (Int -> ChangeAbandoned -> String -> String
[ChangeAbandoned] -> String -> String
ChangeAbandoned -> String
(Int -> ChangeAbandoned -> String -> String)
-> (ChangeAbandoned -> String)
-> ([ChangeAbandoned] -> String -> String)
-> Show ChangeAbandoned
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [ChangeAbandoned] -> String -> String
$cshowList :: [ChangeAbandoned] -> String -> String
show :: ChangeAbandoned -> String
$cshow :: ChangeAbandoned -> String
showsPrec :: Int -> ChangeAbandoned -> String -> String
$cshowsPrec :: Int -> ChangeAbandoned -> String -> String
Show, ChangeAbandoned -> ChangeAbandoned -> Bool
(ChangeAbandoned -> ChangeAbandoned -> Bool)
-> (ChangeAbandoned -> ChangeAbandoned -> Bool)
-> Eq ChangeAbandoned
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ChangeAbandoned -> ChangeAbandoned -> Bool
$c/= :: ChangeAbandoned -> ChangeAbandoned -> Bool
== :: ChangeAbandoned -> ChangeAbandoned -> Bool
$c== :: ChangeAbandoned -> ChangeAbandoned -> Bool
Eq, (forall x. ChangeAbandoned -> Rep ChangeAbandoned x)
-> (forall x. Rep ChangeAbandoned x -> ChangeAbandoned)
-> Generic ChangeAbandoned
forall x. Rep ChangeAbandoned x -> ChangeAbandoned
forall x. ChangeAbandoned -> Rep ChangeAbandoned x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ChangeAbandoned x -> ChangeAbandoned
$cfrom :: forall x. ChangeAbandoned -> Rep ChangeAbandoned x
Generic)

data ChangeDeleted = ChangeDeleted
  { ChangeDeleted -> Change
changeDeletedChange :: Change,
    ChangeDeleted -> User
changeDeletedDeleter :: User
  }
  deriving (Int -> ChangeDeleted -> String -> String
[ChangeDeleted] -> String -> String
ChangeDeleted -> String
(Int -> ChangeDeleted -> String -> String)
-> (ChangeDeleted -> String)
-> ([ChangeDeleted] -> String -> String)
-> Show ChangeDeleted
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [ChangeDeleted] -> String -> String
$cshowList :: [ChangeDeleted] -> String -> String
show :: ChangeDeleted -> String
$cshow :: ChangeDeleted -> String
showsPrec :: Int -> ChangeDeleted -> String -> String
$cshowsPrec :: Int -> ChangeDeleted -> String -> String
Show, ChangeDeleted -> ChangeDeleted -> Bool
(ChangeDeleted -> ChangeDeleted -> Bool)
-> (ChangeDeleted -> ChangeDeleted -> Bool) -> Eq ChangeDeleted
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ChangeDeleted -> ChangeDeleted -> Bool
$c/= :: ChangeDeleted -> ChangeDeleted -> Bool
== :: ChangeDeleted -> ChangeDeleted -> Bool
$c== :: ChangeDeleted -> ChangeDeleted -> Bool
Eq, (forall x. ChangeDeleted -> Rep ChangeDeleted x)
-> (forall x. Rep ChangeDeleted x -> ChangeDeleted)
-> Generic ChangeDeleted
forall x. Rep ChangeDeleted x -> ChangeDeleted
forall x. ChangeDeleted -> Rep ChangeDeleted x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ChangeDeleted x -> ChangeDeleted
$cfrom :: forall x. ChangeDeleted -> Rep ChangeDeleted x
Generic)

data ChangeMerged = ChangeMerged
  { ChangeMerged -> Text
changeMergedProject :: Text,
    ChangeMerged -> User
changeMergedSubmitter :: User,
    ChangeMerged -> Change
changeMergedChange :: Change,
    ChangeMerged -> PatchSet
changeMergedPatchSet :: PatchSet
  }
  deriving (Int -> ChangeMerged -> String -> String
[ChangeMerged] -> String -> String
ChangeMerged -> String
(Int -> ChangeMerged -> String -> String)
-> (ChangeMerged -> String)
-> ([ChangeMerged] -> String -> String)
-> Show ChangeMerged
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [ChangeMerged] -> String -> String
$cshowList :: [ChangeMerged] -> String -> String
show :: ChangeMerged -> String
$cshow :: ChangeMerged -> String
showsPrec :: Int -> ChangeMerged -> String -> String
$cshowsPrec :: Int -> ChangeMerged -> String -> String
Show, ChangeMerged -> ChangeMerged -> Bool
(ChangeMerged -> ChangeMerged -> Bool)
-> (ChangeMerged -> ChangeMerged -> Bool) -> Eq ChangeMerged
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ChangeMerged -> ChangeMerged -> Bool
$c/= :: ChangeMerged -> ChangeMerged -> Bool
== :: ChangeMerged -> ChangeMerged -> Bool
$c== :: ChangeMerged -> ChangeMerged -> Bool
Eq, (forall x. ChangeMerged -> Rep ChangeMerged x)
-> (forall x. Rep ChangeMerged x -> ChangeMerged)
-> Generic ChangeMerged
forall x. Rep ChangeMerged x -> ChangeMerged
forall x. ChangeMerged -> Rep ChangeMerged x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ChangeMerged x -> ChangeMerged
$cfrom :: forall x. ChangeMerged -> Rep ChangeMerged x
Generic)

data ChangeRestored = ChangeRestored
  { ChangeRestored -> Change
changeRestoredChange :: Change,
    ChangeRestored -> PatchSet
changeRestoredPatchSet :: PatchSet,
    ChangeRestored -> User
changeRestoredRestorer :: User,
    ChangeRestored -> Text
changeRestoredReason :: Text
  }
  deriving (Int -> ChangeRestored -> String -> String
[ChangeRestored] -> String -> String
ChangeRestored -> String
(Int -> ChangeRestored -> String -> String)
-> (ChangeRestored -> String)
-> ([ChangeRestored] -> String -> String)
-> Show ChangeRestored
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [ChangeRestored] -> String -> String
$cshowList :: [ChangeRestored] -> String -> String
show :: ChangeRestored -> String
$cshow :: ChangeRestored -> String
showsPrec :: Int -> ChangeRestored -> String -> String
$cshowsPrec :: Int -> ChangeRestored -> String -> String
Show, ChangeRestored -> ChangeRestored -> Bool
(ChangeRestored -> ChangeRestored -> Bool)
-> (ChangeRestored -> ChangeRestored -> Bool) -> Eq ChangeRestored
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ChangeRestored -> ChangeRestored -> Bool
$c/= :: ChangeRestored -> ChangeRestored -> Bool
== :: ChangeRestored -> ChangeRestored -> Bool
$c== :: ChangeRestored -> ChangeRestored -> Bool
Eq, (forall x. ChangeRestored -> Rep ChangeRestored x)
-> (forall x. Rep ChangeRestored x -> ChangeRestored)
-> Generic ChangeRestored
forall x. Rep ChangeRestored x -> ChangeRestored
forall x. ChangeRestored -> Rep ChangeRestored x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ChangeRestored x -> ChangeRestored
$cfrom :: forall x. ChangeRestored -> Rep ChangeRestored x
Generic)

data CommentAdded = CommentAdded
  { CommentAdded -> Change
commentAddedChange :: Change,
    CommentAdded -> PatchSet
commentAddedPatchSet :: PatchSet,
    CommentAdded -> User
commentAddedAuthor :: User
  }
  deriving (Int -> CommentAdded -> String -> String
[CommentAdded] -> String -> String
CommentAdded -> String
(Int -> CommentAdded -> String -> String)
-> (CommentAdded -> String)
-> ([CommentAdded] -> String -> String)
-> Show CommentAdded
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [CommentAdded] -> String -> String
$cshowList :: [CommentAdded] -> String -> String
show :: CommentAdded -> String
$cshow :: CommentAdded -> String
showsPrec :: Int -> CommentAdded -> String -> String
$cshowsPrec :: Int -> CommentAdded -> String -> String
Show, CommentAdded -> CommentAdded -> Bool
(CommentAdded -> CommentAdded -> Bool)
-> (CommentAdded -> CommentAdded -> Bool) -> Eq CommentAdded
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CommentAdded -> CommentAdded -> Bool
$c/= :: CommentAdded -> CommentAdded -> Bool
== :: CommentAdded -> CommentAdded -> Bool
$c== :: CommentAdded -> CommentAdded -> Bool
Eq, (forall x. CommentAdded -> Rep CommentAdded x)
-> (forall x. Rep CommentAdded x -> CommentAdded)
-> Generic CommentAdded
forall x. Rep CommentAdded x -> CommentAdded
forall x. CommentAdded -> Rep CommentAdded x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CommentAdded x -> CommentAdded
$cfrom :: forall x. CommentAdded -> Rep CommentAdded x
Generic)

data HashtagsChanged = HashtagsChanged
  { HashtagsChanged -> Change
hashtagsChangedChange :: Change,
    HashtagsChanged -> User
hashtagsChangedEditor :: User
  }
  deriving (Int -> HashtagsChanged -> String -> String
[HashtagsChanged] -> String -> String
HashtagsChanged -> String
(Int -> HashtagsChanged -> String -> String)
-> (HashtagsChanged -> String)
-> ([HashtagsChanged] -> String -> String)
-> Show HashtagsChanged
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [HashtagsChanged] -> String -> String
$cshowList :: [HashtagsChanged] -> String -> String
show :: HashtagsChanged -> String
$cshow :: HashtagsChanged -> String
showsPrec :: Int -> HashtagsChanged -> String -> String
$cshowsPrec :: Int -> HashtagsChanged -> String -> String
Show, HashtagsChanged -> HashtagsChanged -> Bool
(HashtagsChanged -> HashtagsChanged -> Bool)
-> (HashtagsChanged -> HashtagsChanged -> Bool)
-> Eq HashtagsChanged
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HashtagsChanged -> HashtagsChanged -> Bool
$c/= :: HashtagsChanged -> HashtagsChanged -> Bool
== :: HashtagsChanged -> HashtagsChanged -> Bool
$c== :: HashtagsChanged -> HashtagsChanged -> Bool
Eq, (forall x. HashtagsChanged -> Rep HashtagsChanged x)
-> (forall x. Rep HashtagsChanged x -> HashtagsChanged)
-> Generic HashtagsChanged
forall x. Rep HashtagsChanged x -> HashtagsChanged
forall x. HashtagsChanged -> Rep HashtagsChanged x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep HashtagsChanged x -> HashtagsChanged
$cfrom :: forall x. HashtagsChanged -> Rep HashtagsChanged x
Generic)

data ProjectCreated = ProjectCreated
  { ProjectCreated -> Text
projectCreatedProjectName :: Text,
    ProjectCreated -> Text
projectCreatedHeadName :: Text
  }
  deriving (Int -> ProjectCreated -> String -> String
[ProjectCreated] -> String -> String
ProjectCreated -> String
(Int -> ProjectCreated -> String -> String)
-> (ProjectCreated -> String)
-> ([ProjectCreated] -> String -> String)
-> Show ProjectCreated
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [ProjectCreated] -> String -> String
$cshowList :: [ProjectCreated] -> String -> String
show :: ProjectCreated -> String
$cshow :: ProjectCreated -> String
showsPrec :: Int -> ProjectCreated -> String -> String
$cshowsPrec :: Int -> ProjectCreated -> String -> String
Show, ProjectCreated -> ProjectCreated -> Bool
(ProjectCreated -> ProjectCreated -> Bool)
-> (ProjectCreated -> ProjectCreated -> Bool) -> Eq ProjectCreated
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ProjectCreated -> ProjectCreated -> Bool
$c/= :: ProjectCreated -> ProjectCreated -> Bool
== :: ProjectCreated -> ProjectCreated -> Bool
$c== :: ProjectCreated -> ProjectCreated -> Bool
Eq, (forall x. ProjectCreated -> Rep ProjectCreated x)
-> (forall x. Rep ProjectCreated x -> ProjectCreated)
-> Generic ProjectCreated
forall x. Rep ProjectCreated x -> ProjectCreated
forall x. ProjectCreated -> Rep ProjectCreated x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ProjectCreated x -> ProjectCreated
$cfrom :: forall x. ProjectCreated -> Rep ProjectCreated x
Generic)

data PatchsetCreated = PatchsetCreated
  { PatchsetCreated -> User
patchsetCreatedUploader :: User,
    PatchsetCreated -> Change
patchsetCreatedChange :: Change,
    PatchsetCreated -> PatchSet
patchsetCreatedPatchSet :: PatchSet
  }
  deriving (Int -> PatchsetCreated -> String -> String
[PatchsetCreated] -> String -> String
PatchsetCreated -> String
(Int -> PatchsetCreated -> String -> String)
-> (PatchsetCreated -> String)
-> ([PatchsetCreated] -> String -> String)
-> Show PatchsetCreated
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PatchsetCreated] -> String -> String
$cshowList :: [PatchsetCreated] -> String -> String
show :: PatchsetCreated -> String
$cshow :: PatchsetCreated -> String
showsPrec :: Int -> PatchsetCreated -> String -> String
$cshowsPrec :: Int -> PatchsetCreated -> String -> String
Show, PatchsetCreated -> PatchsetCreated -> Bool
(PatchsetCreated -> PatchsetCreated -> Bool)
-> (PatchsetCreated -> PatchsetCreated -> Bool)
-> Eq PatchsetCreated
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PatchsetCreated -> PatchsetCreated -> Bool
$c/= :: PatchsetCreated -> PatchsetCreated -> Bool
== :: PatchsetCreated -> PatchsetCreated -> Bool
$c== :: PatchsetCreated -> PatchsetCreated -> Bool
Eq, (forall x. PatchsetCreated -> Rep PatchsetCreated x)
-> (forall x. Rep PatchsetCreated x -> PatchsetCreated)
-> Generic PatchsetCreated
forall x. Rep PatchsetCreated x -> PatchsetCreated
forall x. PatchsetCreated -> Rep PatchsetCreated x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PatchsetCreated x -> PatchsetCreated
$cfrom :: forall x. PatchsetCreated -> Rep PatchsetCreated x
Generic)

data RefUpdated = RefUpdated
  { RefUpdated -> User
refUpdatedSubmitter :: User,
    RefUpdated -> Ref
refUpdatedRefUpdate :: Ref
  }
  deriving (Int -> RefUpdated -> String -> String
[RefUpdated] -> String -> String
RefUpdated -> String
(Int -> RefUpdated -> String -> String)
-> (RefUpdated -> String)
-> ([RefUpdated] -> String -> String)
-> Show RefUpdated
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [RefUpdated] -> String -> String
$cshowList :: [RefUpdated] -> String -> String
show :: RefUpdated -> String
$cshow :: RefUpdated -> String
showsPrec :: Int -> RefUpdated -> String -> String
$cshowsPrec :: Int -> RefUpdated -> String -> String
Show, RefUpdated -> RefUpdated -> Bool
(RefUpdated -> RefUpdated -> Bool)
-> (RefUpdated -> RefUpdated -> Bool) -> Eq RefUpdated
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RefUpdated -> RefUpdated -> Bool
$c/= :: RefUpdated -> RefUpdated -> Bool
== :: RefUpdated -> RefUpdated -> Bool
$c== :: RefUpdated -> RefUpdated -> Bool
Eq, (forall x. RefUpdated -> Rep RefUpdated x)
-> (forall x. Rep RefUpdated x -> RefUpdated) -> Generic RefUpdated
forall x. Rep RefUpdated x -> RefUpdated
forall x. RefUpdated -> Rep RefUpdated x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep RefUpdated x -> RefUpdated
$cfrom :: forall x. RefUpdated -> Rep RefUpdated x
Generic)

data ReviewerAdded = ReviewerAdded
  { ReviewerAdded -> Change
reviewerAddedChange :: Change,
    ReviewerAdded -> PatchSet
reviewerAddedPatchSet :: PatchSet,
    ReviewerAdded -> User
reviewerAddedAdder :: User
  }
  deriving (Int -> ReviewerAdded -> String -> String
[ReviewerAdded] -> String -> String
ReviewerAdded -> String
(Int -> ReviewerAdded -> String -> String)
-> (ReviewerAdded -> String)
-> ([ReviewerAdded] -> String -> String)
-> Show ReviewerAdded
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [ReviewerAdded] -> String -> String
$cshowList :: [ReviewerAdded] -> String -> String
show :: ReviewerAdded -> String
$cshow :: ReviewerAdded -> String
showsPrec :: Int -> ReviewerAdded -> String -> String
$cshowsPrec :: Int -> ReviewerAdded -> String -> String
Show, ReviewerAdded -> ReviewerAdded -> Bool
(ReviewerAdded -> ReviewerAdded -> Bool)
-> (ReviewerAdded -> ReviewerAdded -> Bool) -> Eq ReviewerAdded
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReviewerAdded -> ReviewerAdded -> Bool
$c/= :: ReviewerAdded -> ReviewerAdded -> Bool
== :: ReviewerAdded -> ReviewerAdded -> Bool
$c== :: ReviewerAdded -> ReviewerAdded -> Bool
Eq, (forall x. ReviewerAdded -> Rep ReviewerAdded x)
-> (forall x. Rep ReviewerAdded x -> ReviewerAdded)
-> Generic ReviewerAdded
forall x. Rep ReviewerAdded x -> ReviewerAdded
forall x. ReviewerAdded -> Rep ReviewerAdded x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ReviewerAdded x -> ReviewerAdded
$cfrom :: forall x. ReviewerAdded -> Rep ReviewerAdded x
Generic)

data ReviewerDeleted = ReviewerDeleted
  { ReviewerDeleted -> Change
reviewerDeletedChange :: Change,
    ReviewerDeleted -> PatchSet
reviewerDeletedPatchSet :: PatchSet,
    ReviewerDeleted -> User
reviewerDeletedRemover :: User
  }
  deriving (Int -> ReviewerDeleted -> String -> String
[ReviewerDeleted] -> String -> String
ReviewerDeleted -> String
(Int -> ReviewerDeleted -> String -> String)
-> (ReviewerDeleted -> String)
-> ([ReviewerDeleted] -> String -> String)
-> Show ReviewerDeleted
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [ReviewerDeleted] -> String -> String
$cshowList :: [ReviewerDeleted] -> String -> String
show :: ReviewerDeleted -> String
$cshow :: ReviewerDeleted -> String
showsPrec :: Int -> ReviewerDeleted -> String -> String
$cshowsPrec :: Int -> ReviewerDeleted -> String -> String
Show, ReviewerDeleted -> ReviewerDeleted -> Bool
(ReviewerDeleted -> ReviewerDeleted -> Bool)
-> (ReviewerDeleted -> ReviewerDeleted -> Bool)
-> Eq ReviewerDeleted
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReviewerDeleted -> ReviewerDeleted -> Bool
$c/= :: ReviewerDeleted -> ReviewerDeleted -> Bool
== :: ReviewerDeleted -> ReviewerDeleted -> Bool
$c== :: ReviewerDeleted -> ReviewerDeleted -> Bool
Eq, (forall x. ReviewerDeleted -> Rep ReviewerDeleted x)
-> (forall x. Rep ReviewerDeleted x -> ReviewerDeleted)
-> Generic ReviewerDeleted
forall x. Rep ReviewerDeleted x -> ReviewerDeleted
forall x. ReviewerDeleted -> Rep ReviewerDeleted x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ReviewerDeleted x -> ReviewerDeleted
$cfrom :: forall x. ReviewerDeleted -> Rep ReviewerDeleted x
Generic)

data TopicChanged = TopicChanged
  { TopicChanged -> Change
topicChangedChange :: Change,
    TopicChanged -> User
topicChangedChanger :: User,
    TopicChanged -> Text
topicChangedOldTopic :: Text
  }
  deriving (Int -> TopicChanged -> String -> String
[TopicChanged] -> String -> String
TopicChanged -> String
(Int -> TopicChanged -> String -> String)
-> (TopicChanged -> String)
-> ([TopicChanged] -> String -> String)
-> Show TopicChanged
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [TopicChanged] -> String -> String
$cshowList :: [TopicChanged] -> String -> String
show :: TopicChanged -> String
$cshow :: TopicChanged -> String
showsPrec :: Int -> TopicChanged -> String -> String
$cshowsPrec :: Int -> TopicChanged -> String -> String
Show, TopicChanged -> TopicChanged -> Bool
(TopicChanged -> TopicChanged -> Bool)
-> (TopicChanged -> TopicChanged -> Bool) -> Eq TopicChanged
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TopicChanged -> TopicChanged -> Bool
$c/= :: TopicChanged -> TopicChanged -> Bool
== :: TopicChanged -> TopicChanged -> Bool
$c== :: TopicChanged -> TopicChanged -> Bool
Eq, (forall x. TopicChanged -> Rep TopicChanged x)
-> (forall x. Rep TopicChanged x -> TopicChanged)
-> Generic TopicChanged
forall x. Rep TopicChanged x -> TopicChanged
forall x. TopicChanged -> Rep TopicChanged x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TopicChanged x -> TopicChanged
$cfrom :: forall x. TopicChanged -> Rep TopicChanged x
Generic)

data WorkInProgressStateChanged = WorkInProgressStateChanged
  { WorkInProgressStateChanged -> Change
workInProgressStateChangedChange :: Change,
    WorkInProgressStateChanged -> PatchSet
workInProgressStateChangedPatchSet :: PatchSet,
    WorkInProgressStateChanged -> User
workInProgressStateChangedChanger :: User
  }
  deriving (Int -> WorkInProgressStateChanged -> String -> String
[WorkInProgressStateChanged] -> String -> String
WorkInProgressStateChanged -> String
(Int -> WorkInProgressStateChanged -> String -> String)
-> (WorkInProgressStateChanged -> String)
-> ([WorkInProgressStateChanged] -> String -> String)
-> Show WorkInProgressStateChanged
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [WorkInProgressStateChanged] -> String -> String
$cshowList :: [WorkInProgressStateChanged] -> String -> String
show :: WorkInProgressStateChanged -> String
$cshow :: WorkInProgressStateChanged -> String
showsPrec :: Int -> WorkInProgressStateChanged -> String -> String
$cshowsPrec :: Int -> WorkInProgressStateChanged -> String -> String
Show, WorkInProgressStateChanged -> WorkInProgressStateChanged -> Bool
(WorkInProgressStateChanged -> WorkInProgressStateChanged -> Bool)
-> (WorkInProgressStateChanged
    -> WorkInProgressStateChanged -> Bool)
-> Eq WorkInProgressStateChanged
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: WorkInProgressStateChanged -> WorkInProgressStateChanged -> Bool
$c/= :: WorkInProgressStateChanged -> WorkInProgressStateChanged -> Bool
== :: WorkInProgressStateChanged -> WorkInProgressStateChanged -> Bool
$c== :: WorkInProgressStateChanged -> WorkInProgressStateChanged -> Bool
Eq, (forall x.
 WorkInProgressStateChanged -> Rep WorkInProgressStateChanged x)
-> (forall x.
    Rep WorkInProgressStateChanged x -> WorkInProgressStateChanged)
-> Generic WorkInProgressStateChanged
forall x.
Rep WorkInProgressStateChanged x -> WorkInProgressStateChanged
forall x.
WorkInProgressStateChanged -> Rep WorkInProgressStateChanged x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep WorkInProgressStateChanged x -> WorkInProgressStateChanged
$cfrom :: forall x.
WorkInProgressStateChanged -> Rep WorkInProgressStateChanged x
Generic)

data PrivateStateChanged = PrivateStateChanged
  { PrivateStateChanged -> Change
privateStateChangedChange :: Change,
    PrivateStateChanged -> PatchSet
privateStateChangedPatchSet :: PatchSet,
    PrivateStateChanged -> User
privateStateChangedChanger :: User
  }
  deriving (Int -> PrivateStateChanged -> String -> String
[PrivateStateChanged] -> String -> String
PrivateStateChanged -> String
(Int -> PrivateStateChanged -> String -> String)
-> (PrivateStateChanged -> String)
-> ([PrivateStateChanged] -> String -> String)
-> Show PrivateStateChanged
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [PrivateStateChanged] -> String -> String
$cshowList :: [PrivateStateChanged] -> String -> String
show :: PrivateStateChanged -> String
$cshow :: PrivateStateChanged -> String
showsPrec :: Int -> PrivateStateChanged -> String -> String
$cshowsPrec :: Int -> PrivateStateChanged -> String -> String
Show, PrivateStateChanged -> PrivateStateChanged -> Bool
(PrivateStateChanged -> PrivateStateChanged -> Bool)
-> (PrivateStateChanged -> PrivateStateChanged -> Bool)
-> Eq PrivateStateChanged
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PrivateStateChanged -> PrivateStateChanged -> Bool
$c/= :: PrivateStateChanged -> PrivateStateChanged -> Bool
== :: PrivateStateChanged -> PrivateStateChanged -> Bool
$c== :: PrivateStateChanged -> PrivateStateChanged -> Bool
Eq, (forall x. PrivateStateChanged -> Rep PrivateStateChanged x)
-> (forall x. Rep PrivateStateChanged x -> PrivateStateChanged)
-> Generic PrivateStateChanged
forall x. Rep PrivateStateChanged x -> PrivateStateChanged
forall x. PrivateStateChanged -> Rep PrivateStateChanged x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PrivateStateChanged x -> PrivateStateChanged
$cfrom :: forall x. PrivateStateChanged -> Rep PrivateStateChanged x
Generic)

data VoteDeleted = VoteDeleted
  { VoteDeleted -> Change
voteDeletedChange :: Change,
    VoteDeleted -> PatchSet
voteDeletedPatchSet :: PatchSet,
    VoteDeleted -> User
voteDeletedRemover :: User
  }
  deriving (Int -> VoteDeleted -> String -> String
[VoteDeleted] -> String -> String
VoteDeleted -> String
(Int -> VoteDeleted -> String -> String)
-> (VoteDeleted -> String)
-> ([VoteDeleted] -> String -> String)
-> Show VoteDeleted
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [VoteDeleted] -> String -> String
$cshowList :: [VoteDeleted] -> String -> String
show :: VoteDeleted -> String
$cshow :: VoteDeleted -> String
showsPrec :: Int -> VoteDeleted -> String -> String
$cshowsPrec :: Int -> VoteDeleted -> String -> String
Show, VoteDeleted -> VoteDeleted -> Bool
(VoteDeleted -> VoteDeleted -> Bool)
-> (VoteDeleted -> VoteDeleted -> Bool) -> Eq VoteDeleted
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VoteDeleted -> VoteDeleted -> Bool
$c/= :: VoteDeleted -> VoteDeleted -> Bool
== :: VoteDeleted -> VoteDeleted -> Bool
$c== :: VoteDeleted -> VoteDeleted -> Bool
Eq, (forall x. VoteDeleted -> Rep VoteDeleted x)
-> (forall x. Rep VoteDeleted x -> VoteDeleted)
-> Generic VoteDeleted
forall x. Rep VoteDeleted x -> VoteDeleted
forall x. VoteDeleted -> Rep VoteDeleted x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep VoteDeleted x -> VoteDeleted
$cfrom :: forall x. VoteDeleted -> Rep VoteDeleted x
Generic)

-------------------------------------------------------------------------------
-- Events FromJSON instances
-------------------------------------------------------------------------------
instance FromJSON AssigneeChanged where
  parseJSON :: Value -> Parser AssigneeChanged
parseJSON = Options -> Value -> Parser AssigneeChanged
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser AssigneeChanged)
-> Options -> Value -> Parser AssigneeChanged
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"assigneeChanged"

instance FromJSON ChangeAbandoned where
  parseJSON :: Value -> Parser ChangeAbandoned
parseJSON = Options -> Value -> Parser ChangeAbandoned
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser ChangeAbandoned)
-> Options -> Value -> Parser ChangeAbandoned
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"changeAbandoned"

instance FromJSON ChangeDeleted where
  parseJSON :: Value -> Parser ChangeDeleted
parseJSON = Options -> Value -> Parser ChangeDeleted
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser ChangeDeleted)
-> Options -> Value -> Parser ChangeDeleted
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"changeDeleted"

instance FromJSON ChangeMerged where
  parseJSON :: Value -> Parser ChangeMerged
parseJSON = Options -> Value -> Parser ChangeMerged
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser ChangeMerged)
-> Options -> Value -> Parser ChangeMerged
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"changeMerged"

instance FromJSON ChangeRestored where
  parseJSON :: Value -> Parser ChangeRestored
parseJSON = Options -> Value -> Parser ChangeRestored
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser ChangeRestored)
-> Options -> Value -> Parser ChangeRestored
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"changeRestored"

instance FromJSON CommentAdded where
  parseJSON :: Value -> Parser CommentAdded
parseJSON = Options -> Value -> Parser CommentAdded
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser CommentAdded)
-> Options -> Value -> Parser CommentAdded
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"commentAdded"

instance FromJSON HashtagsChanged where
  parseJSON :: Value -> Parser HashtagsChanged
parseJSON = Options -> Value -> Parser HashtagsChanged
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser HashtagsChanged)
-> Options -> Value -> Parser HashtagsChanged
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"hashtagsChanged"

instance FromJSON ProjectCreated where
  parseJSON :: Value -> Parser ProjectCreated
parseJSON = Options -> Value -> Parser ProjectCreated
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser ProjectCreated)
-> Options -> Value -> Parser ProjectCreated
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"projectCreated"

instance FromJSON PatchsetCreated where
  parseJSON :: Value -> Parser PatchsetCreated
parseJSON = Options -> Value -> Parser PatchsetCreated
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser PatchsetCreated)
-> Options -> Value -> Parser PatchsetCreated
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"patchsetCreated"

instance FromJSON RefUpdated where
  parseJSON :: Value -> Parser RefUpdated
parseJSON = Options -> Value -> Parser RefUpdated
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser RefUpdated)
-> Options -> Value -> Parser RefUpdated
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"refUpdated"

instance FromJSON ReviewerAdded where
  parseJSON :: Value -> Parser ReviewerAdded
parseJSON = Options -> Value -> Parser ReviewerAdded
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser ReviewerAdded)
-> Options -> Value -> Parser ReviewerAdded
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"reviewerAdded"

instance FromJSON ReviewerDeleted where
  parseJSON :: Value -> Parser ReviewerDeleted
parseJSON = Options -> Value -> Parser ReviewerDeleted
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser ReviewerDeleted)
-> Options -> Value -> Parser ReviewerDeleted
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"reviewerDeleted"

instance FromJSON TopicChanged where
  parseJSON :: Value -> Parser TopicChanged
parseJSON = Options -> Value -> Parser TopicChanged
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser TopicChanged)
-> Options -> Value -> Parser TopicChanged
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"topicChanged"

instance FromJSON WorkInProgressStateChanged where
  parseJSON :: Value -> Parser WorkInProgressStateChanged
parseJSON = Options -> Value -> Parser WorkInProgressStateChanged
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser WorkInProgressStateChanged)
-> Options -> Value -> Parser WorkInProgressStateChanged
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"workInProgressStateChanged"

instance FromJSON PrivateStateChanged where
  parseJSON :: Value -> Parser PrivateStateChanged
parseJSON = Options -> Value -> Parser PrivateStateChanged
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser PrivateStateChanged)
-> Options -> Value -> Parser PrivateStateChanged
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"privateStateChanged"

instance FromJSON VoteDeleted where
  parseJSON :: Value -> Parser VoteDeleted
parseJSON = Options -> Value -> Parser VoteDeleted
forall a.
(Generic a, GFromJSON Zero (Rep a)) =>
Options -> Value -> Parser a
genericParseJSON (Options -> Value -> Parser VoteDeleted)
-> Options -> Value -> Parser VoteDeleted
forall a b. (a -> b) -> a -> b
$ Text -> Options
aesonOption Text
"voteDeleted"

-- | The event "type" data type
data EventType
  = AssigneeChangedEvent
  | ChangeAbandonedEvent
  | ChangeDeletedEvent
  | ChangeMergedEvent
  | ChangeRestoredEvent
  | CommentAddedEvent
  | DroppedOutputEvent
  | HashtagsChangedEvent
  | ProjectCreatedEvent
  | PatchsetCreatedEvent
  | RefUpdatedEvent
  | ReviewerAddedEvent
  | ReviewerDeletedEvent
  | TopicChangedEvent
  | WorkInProgressStateChangedEvent
  | PrivateStateChangedEvent
  | VoteDeletedEvent
  deriving (Int -> EventType -> String -> String
[EventType] -> String -> String
EventType -> String
(Int -> EventType -> String -> String)
-> (EventType -> String)
-> ([EventType] -> String -> String)
-> Show EventType
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [EventType] -> String -> String
$cshowList :: [EventType] -> String -> String
show :: EventType -> String
$cshow :: EventType -> String
showsPrec :: Int -> EventType -> String -> String
$cshowsPrec :: Int -> EventType -> String -> String
Show, EventType -> EventType -> Bool
(EventType -> EventType -> Bool)
-> (EventType -> EventType -> Bool) -> Eq EventType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EventType -> EventType -> Bool
$c/= :: EventType -> EventType -> Bool
== :: EventType -> EventType -> Bool
$c== :: EventType -> EventType -> Bool
Eq)

instance FromJSON EventType where
  parseJSON :: Value -> Parser EventType
parseJSON (String Text
v) = case Text
v of
    Text
"assignee-changed" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
AssigneeChangedEvent
    Text
"change-abandoned" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
ChangeAbandonedEvent
    Text
"change-deleted" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
ChangeDeletedEvent
    Text
"change-merged" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
ChangeMergedEvent
    Text
"change-restored" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
ChangeRestoredEvent
    Text
"comment-added" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
CommentAddedEvent
    Text
"dropped-output" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
DroppedOutputEvent
    Text
"hashtags-changed" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
HashtagsChangedEvent
    Text
"project-created" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
ProjectCreatedEvent
    Text
"patchset-created" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
PatchsetCreatedEvent
    Text
"ref-updated" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
RefUpdatedEvent
    Text
"reviewer-added" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
ReviewerAddedEvent
    Text
"reviewer-deleted" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
ReviewerDeletedEvent
    Text
"topic-changed" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
TopicChangedEvent
    Text
"wip-state-changed" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
WorkInProgressStateChangedEvent
    Text
"private-state-changed" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
PrivateStateChangedEvent
    Text
"vote-deleted" -> EventType -> Parser EventType
forall (f :: * -> *) a. Applicative f => a -> f a
pure EventType
VoteDeletedEvent
    Text
_ -> Parser EventType
forall (m :: * -> *) a. MonadPlus m => m a
mzero
  parseJSON Value
_ = Parser EventType
forall (m :: * -> *) a. MonadPlus m => m a
mzero

-- | The main event union data type
data Event
  = EventAssigneeChanged AssigneeChanged
  | EventChangeAbandoned ChangeAbandoned
  | EventChangeDeleted ChangeDeleted
  | EventChangeMerged ChangeMerged
  | EventChangeRestored ChangeRestored
  | EventCommentAdded CommentAdded
  | EventDroppedOutput
  | EventHashtagsChanged HashtagsChanged
  | EventProjectCreated ProjectCreated
  | EventPatchsetCreated PatchsetCreated
  | EventRefUpdated RefUpdated
  | EventReviewerAdded ReviewerAdded
  | EventReviewerDeleted ReviewerDeleted
  | EventTopicChanged TopicChanged
  | EventWorkInProgressStateChanged WorkInProgressStateChanged
  | EventPrivateStateChanged PrivateStateChanged
  | EventVoteDeleted VoteDeleted
  deriving (Int -> Event -> String -> String
[Event] -> String -> String
Event -> String
(Int -> Event -> String -> String)
-> (Event -> String) -> ([Event] -> String -> String) -> Show Event
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
showList :: [Event] -> String -> String
$cshowList :: [Event] -> String -> String
show :: Event -> String
$cshow :: Event -> String
showsPrec :: Int -> Event -> String -> String
$cshowsPrec :: Int -> Event -> String -> String
Show, Event -> Event -> Bool
(Event -> Event -> Bool) -> (Event -> Event -> Bool) -> Eq Event
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Event -> Event -> Bool
$c/= :: Event -> Event -> Bool
== :: Event -> Event -> Bool
$c== :: Event -> Event -> Bool
Eq)

instance FromJSON Event where
  parseJSON :: Value -> Parser Event
parseJSON o :: Value
o@(Object Object
v) = do
    EventType
eType <- Object
v Object -> Text -> Parser EventType
forall a. FromJSON a => Object -> Text -> Parser a
.: Text
"type"
    case EventType
eType of
      EventType
AssigneeChangedEvent -> AssigneeChanged -> Event
EventAssigneeChanged (AssigneeChanged -> Event)
-> Parser AssigneeChanged -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser AssigneeChanged
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
ChangeAbandonedEvent -> ChangeAbandoned -> Event
EventChangeAbandoned (ChangeAbandoned -> Event)
-> Parser ChangeAbandoned -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser ChangeAbandoned
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
ChangeDeletedEvent -> ChangeDeleted -> Event
EventChangeDeleted (ChangeDeleted -> Event) -> Parser ChangeDeleted -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser ChangeDeleted
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
ChangeMergedEvent -> ChangeMerged -> Event
EventChangeMerged (ChangeMerged -> Event) -> Parser ChangeMerged -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser ChangeMerged
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
ChangeRestoredEvent -> ChangeRestored -> Event
EventChangeRestored (ChangeRestored -> Event) -> Parser ChangeRestored -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser ChangeRestored
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
CommentAddedEvent -> CommentAdded -> Event
EventCommentAdded (CommentAdded -> Event) -> Parser CommentAdded -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser CommentAdded
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
DroppedOutputEvent -> Event -> Parser Event
forall (f :: * -> *) a. Applicative f => a -> f a
pure Event
EventDroppedOutput
      EventType
HashtagsChangedEvent -> HashtagsChanged -> Event
EventHashtagsChanged (HashtagsChanged -> Event)
-> Parser HashtagsChanged -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser HashtagsChanged
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
ProjectCreatedEvent -> ProjectCreated -> Event
EventProjectCreated (ProjectCreated -> Event) -> Parser ProjectCreated -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser ProjectCreated
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
PatchsetCreatedEvent -> PatchsetCreated -> Event
EventPatchsetCreated (PatchsetCreated -> Event)
-> Parser PatchsetCreated -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser PatchsetCreated
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
RefUpdatedEvent -> RefUpdated -> Event
EventRefUpdated (RefUpdated -> Event) -> Parser RefUpdated -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser RefUpdated
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
ReviewerAddedEvent -> ReviewerAdded -> Event
EventReviewerAdded (ReviewerAdded -> Event) -> Parser ReviewerAdded -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser ReviewerAdded
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
ReviewerDeletedEvent -> ReviewerDeleted -> Event
EventReviewerDeleted (ReviewerDeleted -> Event)
-> Parser ReviewerDeleted -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser ReviewerDeleted
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
TopicChangedEvent -> TopicChanged -> Event
EventTopicChanged (TopicChanged -> Event) -> Parser TopicChanged -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser TopicChanged
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
WorkInProgressStateChangedEvent -> WorkInProgressStateChanged -> Event
EventWorkInProgressStateChanged (WorkInProgressStateChanged -> Event)
-> Parser WorkInProgressStateChanged -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser WorkInProgressStateChanged
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
PrivateStateChangedEvent -> PrivateStateChanged -> Event
EventPrivateStateChanged (PrivateStateChanged -> Event)
-> Parser PrivateStateChanged -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser PrivateStateChanged
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
      EventType
VoteDeletedEvent -> VoteDeleted -> Event
EventVoteDeleted (VoteDeleted -> Event) -> Parser VoteDeleted -> Parser Event
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Value -> Parser VoteDeleted
forall a. FromJSON a => Value -> Parser a
parseJSON Value
o
  parseJSON Value
_ = Parser Event
forall (m :: * -> *) a. MonadPlus m => m a
mzero

-------------------------------------------------------------------------------
-- Utilities function
-------------------------------------------------------------------------------

-- | Get the associated change
getChange :: Event -> Maybe Change
getChange :: Event -> Maybe Change
getChange Event
event = case Event
event of
  EventAssigneeChanged AssigneeChanged {Change
User
assigneeChangedChanger :: User
assigneeChangedChange :: Change
assigneeChangedChanger :: AssigneeChanged -> User
assigneeChangedChange :: AssigneeChanged -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
assigneeChangedChange
  EventChangeAbandoned ChangeAbandoned {Text
Change
PatchSet
User
changeAbandonedPatchSet :: PatchSet
changeAbandonedChange :: Change
changeAbandonedAbandoner :: User
changeAbandonedProject :: Text
changeAbandonedPatchSet :: ChangeAbandoned -> PatchSet
changeAbandonedChange :: ChangeAbandoned -> Change
changeAbandonedAbandoner :: ChangeAbandoned -> User
changeAbandonedProject :: ChangeAbandoned -> Text
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
changeAbandonedChange
  EventChangeDeleted ChangeDeleted {Change
User
changeDeletedDeleter :: User
changeDeletedChange :: Change
changeDeletedDeleter :: ChangeDeleted -> User
changeDeletedChange :: ChangeDeleted -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
changeDeletedChange
  EventChangeMerged ChangeMerged {Text
Change
PatchSet
User
changeMergedPatchSet :: PatchSet
changeMergedChange :: Change
changeMergedSubmitter :: User
changeMergedProject :: Text
changeMergedPatchSet :: ChangeMerged -> PatchSet
changeMergedChange :: ChangeMerged -> Change
changeMergedSubmitter :: ChangeMerged -> User
changeMergedProject :: ChangeMerged -> Text
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
changeMergedChange
  EventChangeRestored ChangeRestored {Text
Change
PatchSet
User
changeRestoredReason :: Text
changeRestoredRestorer :: User
changeRestoredPatchSet :: PatchSet
changeRestoredChange :: Change
changeRestoredReason :: ChangeRestored -> Text
changeRestoredRestorer :: ChangeRestored -> User
changeRestoredPatchSet :: ChangeRestored -> PatchSet
changeRestoredChange :: ChangeRestored -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
changeRestoredChange
  EventCommentAdded CommentAdded {Change
PatchSet
User
commentAddedAuthor :: User
commentAddedPatchSet :: PatchSet
commentAddedChange :: Change
commentAddedAuthor :: CommentAdded -> User
commentAddedPatchSet :: CommentAdded -> PatchSet
commentAddedChange :: CommentAdded -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
commentAddedChange
  Event
EventDroppedOutput -> Maybe Change
forall a. Maybe a
Nothing
  EventHashtagsChanged HashtagsChanged {Change
User
hashtagsChangedEditor :: User
hashtagsChangedChange :: Change
hashtagsChangedEditor :: HashtagsChanged -> User
hashtagsChangedChange :: HashtagsChanged -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
hashtagsChangedChange
  EventProjectCreated ProjectCreated
_ -> Maybe Change
forall a. Maybe a
Nothing
  EventPatchsetCreated PatchsetCreated {Change
PatchSet
User
patchsetCreatedPatchSet :: PatchSet
patchsetCreatedChange :: Change
patchsetCreatedUploader :: User
patchsetCreatedPatchSet :: PatchsetCreated -> PatchSet
patchsetCreatedChange :: PatchsetCreated -> Change
patchsetCreatedUploader :: PatchsetCreated -> User
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
patchsetCreatedChange
  EventRefUpdated RefUpdated
_ -> Maybe Change
forall a. Maybe a
Nothing
  EventReviewerAdded ReviewerAdded {Change
PatchSet
User
reviewerAddedAdder :: User
reviewerAddedPatchSet :: PatchSet
reviewerAddedChange :: Change
reviewerAddedAdder :: ReviewerAdded -> User
reviewerAddedPatchSet :: ReviewerAdded -> PatchSet
reviewerAddedChange :: ReviewerAdded -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
reviewerAddedChange
  EventReviewerDeleted ReviewerDeleted {Change
PatchSet
User
reviewerDeletedRemover :: User
reviewerDeletedPatchSet :: PatchSet
reviewerDeletedChange :: Change
reviewerDeletedRemover :: ReviewerDeleted -> User
reviewerDeletedPatchSet :: ReviewerDeleted -> PatchSet
reviewerDeletedChange :: ReviewerDeleted -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
reviewerDeletedChange
  EventTopicChanged TopicChanged {Text
Change
User
topicChangedOldTopic :: Text
topicChangedChanger :: User
topicChangedChange :: Change
topicChangedOldTopic :: TopicChanged -> Text
topicChangedChanger :: TopicChanged -> User
topicChangedChange :: TopicChanged -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
topicChangedChange
  EventWorkInProgressStateChanged WorkInProgressStateChanged {Change
PatchSet
User
workInProgressStateChangedChanger :: User
workInProgressStateChangedPatchSet :: PatchSet
workInProgressStateChangedChange :: Change
workInProgressStateChangedChanger :: WorkInProgressStateChanged -> User
workInProgressStateChangedPatchSet :: WorkInProgressStateChanged -> PatchSet
workInProgressStateChangedChange :: WorkInProgressStateChanged -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
workInProgressStateChangedChange
  EventPrivateStateChanged PrivateStateChanged {Change
PatchSet
User
privateStateChangedChanger :: User
privateStateChangedPatchSet :: PatchSet
privateStateChangedChange :: Change
privateStateChangedChanger :: PrivateStateChanged -> User
privateStateChangedPatchSet :: PrivateStateChanged -> PatchSet
privateStateChangedChange :: PrivateStateChanged -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
privateStateChangedChange
  EventVoteDeleted VoteDeleted {Change
PatchSet
User
voteDeletedRemover :: User
voteDeletedPatchSet :: PatchSet
voteDeletedChange :: Change
voteDeletedRemover :: VoteDeleted -> User
voteDeletedPatchSet :: VoteDeleted -> PatchSet
voteDeletedChange :: VoteDeleted -> Change
..} -> Change -> Maybe Change
forall a. a -> Maybe a
Just Change
voteDeletedChange

-- | Get the associated author
getUser :: Event -> Maybe User
getUser :: Event -> Maybe User
getUser Event
event = case Event
event of
  EventAssigneeChanged AssigneeChanged {Change
User
assigneeChangedChanger :: User
assigneeChangedChange :: Change
assigneeChangedChanger :: AssigneeChanged -> User
assigneeChangedChange :: AssigneeChanged -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
assigneeChangedChanger
  EventChangeAbandoned ChangeAbandoned {Text
Change
PatchSet
User
changeAbandonedPatchSet :: PatchSet
changeAbandonedChange :: Change
changeAbandonedAbandoner :: User
changeAbandonedProject :: Text
changeAbandonedPatchSet :: ChangeAbandoned -> PatchSet
changeAbandonedChange :: ChangeAbandoned -> Change
changeAbandonedAbandoner :: ChangeAbandoned -> User
changeAbandonedProject :: ChangeAbandoned -> Text
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
changeAbandonedAbandoner
  EventChangeDeleted ChangeDeleted {Change
User
changeDeletedDeleter :: User
changeDeletedChange :: Change
changeDeletedDeleter :: ChangeDeleted -> User
changeDeletedChange :: ChangeDeleted -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
changeDeletedDeleter
  EventChangeMerged ChangeMerged {Text
Change
PatchSet
User
changeMergedPatchSet :: PatchSet
changeMergedChange :: Change
changeMergedSubmitter :: User
changeMergedProject :: Text
changeMergedPatchSet :: ChangeMerged -> PatchSet
changeMergedChange :: ChangeMerged -> Change
changeMergedSubmitter :: ChangeMerged -> User
changeMergedProject :: ChangeMerged -> Text
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
changeMergedSubmitter
  EventChangeRestored ChangeRestored {Text
Change
PatchSet
User
changeRestoredReason :: Text
changeRestoredRestorer :: User
changeRestoredPatchSet :: PatchSet
changeRestoredChange :: Change
changeRestoredReason :: ChangeRestored -> Text
changeRestoredRestorer :: ChangeRestored -> User
changeRestoredPatchSet :: ChangeRestored -> PatchSet
changeRestoredChange :: ChangeRestored -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
changeRestoredRestorer
  EventCommentAdded CommentAdded {Change
PatchSet
User
commentAddedAuthor :: User
commentAddedPatchSet :: PatchSet
commentAddedChange :: Change
commentAddedAuthor :: CommentAdded -> User
commentAddedPatchSet :: CommentAdded -> PatchSet
commentAddedChange :: CommentAdded -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
commentAddedAuthor
  Event
EventDroppedOutput -> Maybe User
forall a. Maybe a
Nothing
  EventHashtagsChanged HashtagsChanged {Change
User
hashtagsChangedEditor :: User
hashtagsChangedChange :: Change
hashtagsChangedEditor :: HashtagsChanged -> User
hashtagsChangedChange :: HashtagsChanged -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
hashtagsChangedEditor
  EventProjectCreated ProjectCreated
_ -> Maybe User
forall a. Maybe a
Nothing
  EventPatchsetCreated PatchsetCreated {Change
PatchSet
User
patchsetCreatedPatchSet :: PatchSet
patchsetCreatedChange :: Change
patchsetCreatedUploader :: User
patchsetCreatedPatchSet :: PatchsetCreated -> PatchSet
patchsetCreatedChange :: PatchsetCreated -> Change
patchsetCreatedUploader :: PatchsetCreated -> User
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
patchsetCreatedUploader
  EventRefUpdated RefUpdated
_ -> Maybe User
forall a. Maybe a
Nothing
  EventReviewerAdded ReviewerAdded {Change
PatchSet
User
reviewerAddedAdder :: User
reviewerAddedPatchSet :: PatchSet
reviewerAddedChange :: Change
reviewerAddedAdder :: ReviewerAdded -> User
reviewerAddedPatchSet :: ReviewerAdded -> PatchSet
reviewerAddedChange :: ReviewerAdded -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
reviewerAddedAdder
  EventReviewerDeleted ReviewerDeleted {Change
PatchSet
User
reviewerDeletedRemover :: User
reviewerDeletedPatchSet :: PatchSet
reviewerDeletedChange :: Change
reviewerDeletedRemover :: ReviewerDeleted -> User
reviewerDeletedPatchSet :: ReviewerDeleted -> PatchSet
reviewerDeletedChange :: ReviewerDeleted -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
reviewerDeletedRemover
  EventTopicChanged TopicChanged {Text
Change
User
topicChangedOldTopic :: Text
topicChangedChanger :: User
topicChangedChange :: Change
topicChangedOldTopic :: TopicChanged -> Text
topicChangedChanger :: TopicChanged -> User
topicChangedChange :: TopicChanged -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
topicChangedChanger
  EventWorkInProgressStateChanged WorkInProgressStateChanged {Change
PatchSet
User
workInProgressStateChangedChanger :: User
workInProgressStateChangedPatchSet :: PatchSet
workInProgressStateChangedChange :: Change
workInProgressStateChangedChanger :: WorkInProgressStateChanged -> User
workInProgressStateChangedPatchSet :: WorkInProgressStateChanged -> PatchSet
workInProgressStateChangedChange :: WorkInProgressStateChanged -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
workInProgressStateChangedChanger
  EventPrivateStateChanged PrivateStateChanged {Change
PatchSet
User
privateStateChangedChanger :: User
privateStateChangedPatchSet :: PatchSet
privateStateChangedChange :: Change
privateStateChangedChanger :: PrivateStateChanged -> User
privateStateChangedPatchSet :: PrivateStateChanged -> PatchSet
privateStateChangedChange :: PrivateStateChanged -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
privateStateChangedChanger
  EventVoteDeleted VoteDeleted {Change
PatchSet
User
voteDeletedRemover :: User
voteDeletedPatchSet :: PatchSet
voteDeletedChange :: Change
voteDeletedRemover :: VoteDeleted -> User
voteDeletedPatchSet :: VoteDeleted -> PatchSet
voteDeletedChange :: VoteDeleted -> Change
..} -> User -> Maybe User
forall a. a -> Maybe a
Just User
voteDeletedRemover

-- | Get the 'EventType' back from an 'Event'
getEventType :: Event -> EventType
getEventType :: Event -> EventType
getEventType Event
event = case Event
event of
  EventAssigneeChanged AssigneeChanged
_ -> EventType
AssigneeChangedEvent
  EventChangeAbandoned ChangeAbandoned
_ -> EventType
ChangeAbandonedEvent
  EventChangeDeleted ChangeDeleted
_ -> EventType
ChangeDeletedEvent
  EventChangeMerged ChangeMerged
_ -> EventType
ChangeMergedEvent
  EventChangeRestored ChangeRestored
_ -> EventType
ChangeRestoredEvent
  EventCommentAdded CommentAdded
_ -> EventType
CommentAddedEvent
  Event
EventDroppedOutput -> EventType
DroppedOutputEvent
  EventHashtagsChanged HashtagsChanged
_ -> EventType
HashtagsChangedEvent
  EventProjectCreated ProjectCreated
_ -> EventType
ProjectCreatedEvent
  EventPatchsetCreated PatchsetCreated
_ -> EventType
PatchsetCreatedEvent
  EventRefUpdated RefUpdated
_ -> EventType
RefUpdatedEvent
  EventReviewerAdded ReviewerAdded
_ -> EventType
ReviewerAddedEvent
  EventReviewerDeleted ReviewerDeleted
_ -> EventType
ReviewerDeletedEvent
  EventTopicChanged TopicChanged
_ -> EventType
TopicChangedEvent
  EventWorkInProgressStateChanged WorkInProgressStateChanged
_ -> EventType
WorkInProgressStateChangedEvent
  EventPrivateStateChanged PrivateStateChanged
_ -> EventType
PrivateStateChangedEvent
  EventVoteDeleted VoteDeleted
_ -> EventType
VoteDeletedEvent

-- | Get the text representation suitable for event subscription.
eventName :: EventType -> Text
eventName :: EventType -> Text
eventName EventType
eventType = case EventType
eventType of
  EventType
AssigneeChangedEvent -> Text
"assignee-changed"
  EventType
ChangeAbandonedEvent -> Text
"change-abandoned"
  EventType
ChangeDeletedEvent -> Text
"change-deleted"
  EventType
ChangeMergedEvent -> Text
"change-merged"
  EventType
ChangeRestoredEvent -> Text
"change-restored"
  EventType
CommentAddedEvent -> Text
"comment-added"
  EventType
DroppedOutputEvent -> Text
"dropped-output"
  EventType
HashtagsChangedEvent -> Text
"hashtags-changed"
  EventType
ProjectCreatedEvent -> Text
"project-created"
  EventType
PatchsetCreatedEvent -> Text
"patchset-created"
  EventType
RefUpdatedEvent -> Text
"ref-updated"
  EventType
ReviewerAddedEvent -> Text
"reviewer-added"
  EventType
ReviewerDeletedEvent -> Text
"reviewer-deleted"
  EventType
TopicChangedEvent -> Text
"topic-changed"
  EventType
WorkInProgressStateChangedEvent -> Text
"wip-state-changed"
  EventType
PrivateStateChangedEvent -> Text
"private-state-changed"
  EventType
VoteDeletedEvent -> Text
"vote-deleted"