github-tools-0.1.2: src/GitHub/Types/Events/ReleaseEvent.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Events.ReleaseEvent 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 ReleaseEvent = ReleaseEvent
{ releaseEventInstallation :: Maybe Installation
, releaseEventOrganization :: Organization
, releaseEventRepository :: Repository
, releaseEventSender :: User
, releaseEventAction :: Text
, releaseEventChanges :: Maybe Changes
, releaseEventRelease :: Release
} deriving (Eq, Show, Read)
instance Event ReleaseEvent where
typeName = TypeName "ReleaseEvent"
eventName = EventName "release"
instance FromJSON ReleaseEvent where
parseJSON (Object x) = ReleaseEvent
<$> x .:? "installation"
<*> x .: "organization"
<*> x .: "repository"
<*> x .: "sender"
<*> x .: "action"
<*> x .:? "changes"
<*> x .: "release"
parseJSON _ = fail "ForkEvent"
instance ToJSON ReleaseEvent where
toJSON ReleaseEvent{..} = object
[ "installation" .= releaseEventInstallation
, "organization" .= releaseEventOrganization
, "repository" .= releaseEventRepository
, "sender" .= releaseEventSender
, "action" .= releaseEventAction
, "changes" .= releaseEventChanges
, "release" .= releaseEventRelease
]
instance Arbitrary ReleaseEvent where
arbitrary = ReleaseEvent
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary