github-tools-0.1.2: src/GitHub/Types/Base/User.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module GitHub.Types.Base.User where
import Data.Aeson (FromJSON (..), ToJSON (..), object)
import Data.Aeson.Types (Value (..), (.:), (.:?), (.=))
import Data.Text (Text)
import Data.Text.Arbitrary ()
import Test.QuickCheck.Arbitrary (Arbitrary (..))
------------------------------------------------------------------------------
-- User
data User = User
{ userAvatarUrl :: Text
, userEmail :: Maybe Text
, userEventsUrl :: Text
, userFollowersUrl :: Text
, userFollowingUrl :: Text
, userGistsUrl :: Text
, userGravatarId :: Text
, userHtmlUrl :: Text
, userId :: Int
, userLogin :: Text
, userName :: Maybe Text
, userNodeId :: Text
, userOrganizationsUrl :: Text
, userReceivedEventsUrl :: Text
, userReposUrl :: Text
, userSiteAdmin :: Bool
, userStarredUrl :: Text
, userSubscriptionsUrl :: Text
, userType :: Text
, userUrl :: Text
} deriving (Eq, Show, Read)
instance FromJSON User where
parseJSON (Object x) = User
<$> x .: "avatar_url"
<*> x .:? "email"
<*> x .: "events_url"
<*> x .: "followers_url"
<*> x .: "following_url"
<*> x .: "gists_url"
<*> x .: "gravatar_id"
<*> x .: "html_url"
<*> x .: "id"
<*> x .: "login"
<*> x .:? "name"
<*> x .: "node_id"
<*> x .: "organizations_url"
<*> x .: "received_events_url"
<*> x .: "repos_url"
<*> x .: "site_admin"
<*> x .: "starred_url"
<*> x .: "subscriptions_url"
<*> x .: "type"
<*> x .: "url"
parseJSON _ = fail "User"
instance ToJSON User where
toJSON User{..} = object
[ "avatar_url" .= userAvatarUrl
, "email" .= userEmail
, "events_url" .= userEventsUrl
, "followers_url" .= userFollowersUrl
, "following_url" .= userFollowingUrl
, "gists_url" .= userGistsUrl
, "gravatar_id" .= userGravatarId
, "html_url" .= userHtmlUrl
, "id" .= userId
, "login" .= userLogin
, "name" .= userName
, "node_id" .= userNodeId
, "organizations_url" .= userOrganizationsUrl
, "received_events_url" .= userReceivedEventsUrl
, "repos_url" .= userReposUrl
, "site_admin" .= userSiteAdmin
, "starred_url" .= userStarredUrl
, "subscriptions_url" .= userSubscriptionsUrl
, "type" .= userType
, "url" .= userUrl
]
instance Arbitrary User where
arbitrary = User
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary