github-tools-0.1.2: src/GitHub/Types/Base/Membership.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Base.Membership 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.User
------------------------------------------------------------------------------
-- Membership
data Membership = Membership
{ membershipOrganizationUrl :: Text
, membershipRole :: Text
, membershipState :: Text
, membershipUrl :: Text
, membershipUser :: User
} deriving (Eq, Show, Read)
instance FromJSON Membership where
parseJSON (Object x) = Membership
<$> x .: "organization_url"
<*> x .: "role"
<*> x .: "state"
<*> x .: "url"
<*> x .: "user"
parseJSON _ = fail "Membership"
instance ToJSON Membership where
toJSON Membership{..} = object
[ "organization_url" .= membershipOrganizationUrl
, "role" .= membershipRole
, "state" .= membershipState
, "url" .= membershipUrl
, "user" .= membershipUser
]
instance Arbitrary Membership where
arbitrary = Membership
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary