github-tools-0.1.2: src/GitHub/Types/Events/StatusEvent.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Events.StatusEvent 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 StatusEvent = StatusEvent
{ statusEventInstallation :: Maybe Installation
, statusEventOrganization :: Organization
, statusEventRepository :: Repository
, statusEventSender :: User
, statusEventAvatarUrl :: Maybe Text
, statusEventBranches :: [Branch]
, statusEventCommit :: StatusCommit
, statusEventContext :: Text
, statusEventCreatedAt :: DateTime
, statusEventDescription :: Text
, statusEventId :: Int
, statusEventName :: Text
, statusEventSha :: Text
, statusEventState :: Text
, statusEventTargetUrl :: Maybe Text
, statusEventUpdatedAt :: DateTime
} deriving (Eq, Show, Read)
instance Event StatusEvent where
typeName = TypeName "StatusEvent"
eventName = EventName "status"
instance FromJSON StatusEvent where
parseJSON (Object x) = StatusEvent
<$> x .:? "installation"
<*> x .: "organization"
<*> x .: "repository"
<*> x .: "sender"
<*> x .: "avatar_url"
<*> x .: "branches"
<*> x .: "commit"
<*> x .: "context"
<*> x .: "created_at"
<*> x .: "description"
<*> x .: "id"
<*> x .: "name"
<*> x .: "sha"
<*> x .: "state"
<*> x .: "target_url"
<*> x .: "updated_at"
parseJSON _ = fail "StatusEvent"
instance ToJSON StatusEvent where
toJSON StatusEvent{..} = object
[ "installation" .= statusEventInstallation
, "organization" .= statusEventOrganization
, "repository" .= statusEventRepository
, "sender" .= statusEventSender
, "avatar_url" .= statusEventAvatarUrl
, "branches" .= statusEventBranches
, "commit" .= statusEventCommit
, "context" .= statusEventContext
, "created_at" .= statusEventCreatedAt
, "description" .= statusEventDescription
, "id" .= statusEventId
, "name" .= statusEventName
, "sha" .= statusEventSha
, "state" .= statusEventState
, "target_url" .= statusEventTargetUrl
, "updated_at" .= statusEventUpdatedAt
]
instance Arbitrary StatusEvent where
arbitrary = StatusEvent
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary