github-tools-0.1.2: src/GitHub/Types/Events/IssuesEvent.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Events.IssuesEvent 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 IssuesEvent = IssuesEvent
{ issuesEventInstallation :: Maybe Installation
, issuesEventOrganization :: Organization
, issuesEventRepository :: Repository
, issuesEventSender :: User
, issuesEventAction :: Text
, issuesEventAssignee :: Maybe User
, issuesEventChanges :: Maybe Changes
, issuesEventIssue :: Issue
, issuesEventLabel :: Maybe Label
, issuesEventMilestone :: Maybe Milestone
} deriving (Eq, Show, Read)
instance Event IssuesEvent where
typeName = TypeName "IssuesEvent"
eventName = EventName "issues"
instance FromJSON IssuesEvent where
parseJSON (Object x) = IssuesEvent
<$> x .:? "installation"
<*> x .: "organization"
<*> x .: "repository"
<*> x .: "sender"
<*> x .: "action"
<*> x .:? "assignee"
<*> x .:? "changes"
<*> x .: "issue"
<*> x .:? "label"
<*> x .:? "milestone"
parseJSON _ = fail "IssuesEvent"
instance ToJSON IssuesEvent where
toJSON IssuesEvent{..} = object
[ "installation" .= issuesEventInstallation
, "organization" .= issuesEventOrganization
, "repository" .= issuesEventRepository
, "sender" .= issuesEventSender
, "action" .= issuesEventAction
, "assignee" .= issuesEventAssignee
, "changes" .= issuesEventChanges
, "issue" .= issuesEventIssue
, "label" .= issuesEventLabel
, "milestone" .= issuesEventMilestone
]
instance Arbitrary IssuesEvent where
arbitrary = IssuesEvent
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary