github-tools-0.1.2: src/GitHub/Types/Events/PushEvent.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Events.PushEvent where
import Data.Aeson (FromJSON (..), ToJSON (..), object)
import Data.Aeson.Types (Value (..), (.:), (.:?), (.=))
import Data.Text (Text)
import Test.QuickCheck.Arbitrary (Arbitrary (..))
import GitHub.Types.Base
import GitHub.Types.Event
data PushEvent = PushEvent
{ pushEventInstallation :: Maybe Installation
, pushEventOrganization :: Organization
, pushEventRepository :: Repository
, pushEventSender :: User
, pushEventAfter :: Text
, pushEventBaseRef :: Maybe Text
, pushEventBefore :: Text
, pushEventCommits :: [PushCommit]
, pushEventCompare :: Text
, pushEventCreated :: Bool
, pushEventDeleted :: Bool
, pushEventDistinctCommits :: Maybe [PushCommit]
, pushEventForced :: Bool
, pushEventHeadCommit :: Maybe PushCommit
, pushEventPusher :: UserRef
, pushEventRef :: Text
, pushEventRefName :: Maybe Text
} deriving (Eq, Show, Read)
instance Event PushEvent where
typeName = TypeName "PushEvent"
eventName = EventName "push"
instance FromJSON PushEvent where
parseJSON (Object x) = PushEvent
<$> x .:? "installation"
<*> x .: "organization"
<*> x .: "repository"
<*> x .: "sender"
<*> x .: "after"
<*> x .: "base_ref"
<*> x .: "before"
<*> x .: "commits"
<*> x .: "compare"
<*> x .: "created"
<*> x .: "deleted"
<*> x .:? "distinct_commits"
<*> x .: "forced"
<*> x .: "head_commit"
<*> x .: "pusher"
<*> x .: "ref"
<*> x .:? "ref_name"
parseJSON _ = fail "PushEvent"
instance ToJSON PushEvent where
toJSON PushEvent{..} = object
[ "installation" .= pushEventInstallation
, "organization" .= pushEventOrganization
, "repository" .= pushEventRepository
, "sender" .= pushEventSender
, "after" .= pushEventAfter
, "base_ref" .= pushEventBaseRef
, "before" .= pushEventBefore
, "commits" .= pushEventCommits
, "compare" .= pushEventCompare
, "created" .= pushEventCreated
, "deleted" .= pushEventDeleted
, "distinct_commits" .= pushEventDistinctCommits
, "forced" .= pushEventForced
, "head_commit" .= pushEventHeadCommit
, "pusher" .= pushEventPusher
, "ref" .= pushEventRef
, "ref_name" .= pushEventRefName
]
instance Arbitrary PushEvent where
arbitrary = PushEvent
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary