github-tools-0.1.2: src/GitHub/Types/Events/MembershipEvent.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Events.MembershipEvent 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 MembershipEvent = MembershipEvent
{ membershipEventInstallation :: Maybe Installation
, membershipEventOrganization :: Organization
, membershipEventSender :: User
, membershipEventAction :: Text
, membershipEventMember :: User
, membershipEventScope :: Text
, membershipEventTeam :: Team
} deriving (Eq, Show, Read)
instance Event MembershipEvent where
typeName = TypeName "MembershipEvent"
eventName = EventName "membership"
instance FromJSON MembershipEvent where
parseJSON (Object x) = MembershipEvent
<$> x .:? "installation"
<*> x .: "organization"
<*> x .: "sender"
<*> x .: "action"
<*> x .: "member"
<*> x .: "scope"
<*> x .: "team"
parseJSON _ = fail "MembershipEvent"
instance ToJSON MembershipEvent where
toJSON MembershipEvent{..} = object
[ "installation" .= membershipEventInstallation
, "organization" .= membershipEventOrganization
, "sender" .= membershipEventSender
, "action" .= membershipEventAction
, "member" .= membershipEventMember
, "scope" .= membershipEventScope
, "team" .= membershipEventTeam
]
instance Arbitrary MembershipEvent where
arbitrary = MembershipEvent
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary