github-tools-0.1.2: src/GitHub/Types/Events/MilestoneEvent.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Events.MilestoneEvent 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 MilestoneEvent = MilestoneEvent
{ milestoneEventInstallation :: Maybe Installation
, milestoneEventOrganization :: Organization
, milestoneEventRepository :: Repository
, milestoneEventSender :: User
, milestoneEventAction :: Text
, milestoneEventMilestone :: Milestone
} deriving (Eq, Show, Read)
instance Event MilestoneEvent where
typeName = TypeName "MilestoneEvent"
eventName = EventName "milestone"
instance FromJSON MilestoneEvent where
parseJSON (Object x) = MilestoneEvent
<$> x .:? "installation"
<*> x .: "organization"
<*> x .: "repository"
<*> x .: "sender"
<*> x .: "action"
<*> x .: "milestone"
parseJSON _ = fail "MilestoneEvent"
instance ToJSON MilestoneEvent where
toJSON MilestoneEvent{..} = object
[ "installation" .= milestoneEventInstallation
, "organization" .= milestoneEventOrganization
, "repository" .= milestoneEventRepository
, "sender" .= milestoneEventSender
, "action" .= milestoneEventAction
, "milestone" .= milestoneEventMilestone
]
instance Arbitrary MilestoneEvent where
arbitrary = MilestoneEvent
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary