11{-# LANGUAGE DeriveDataTypeable, FlexibleContexts, OverloadedStrings #-}
22module Facebook.Object.User
3- ( User (.. )
3+ ( Picture (.. )
4+ , User (.. )
45 , Gender (.. )
56 , getUser
67 , searchUsers
@@ -19,7 +20,6 @@ import Data.Typeable (Typeable)
1920import qualified Control.Monad.Trans.Resource as R
2021import qualified Data.Aeson as A
2122
22-
2323import Facebook.Types
2424import Facebook.Monad
2525import Facebook.Graph
@@ -33,6 +33,14 @@ import Facebook.Object.Checkin
3333-- /NOTE:/ We still don't support all fields supported by
3434-- Facebook. Please fill an issue if you need access to any other
3535-- fields.
36+ data Picture =
37+ Picture { pictureHeight :: Maybe Int
38+ , pictureIs_silhouette :: Bool
39+ , pictureUrl :: Text
40+ , pictureWidth :: Maybe Int
41+ }
42+ deriving (Eq , Ord , Show , Read , Typeable )
43+
3644data User =
3745 User { userId :: UserId
3846 , userName :: Maybe Text
@@ -42,14 +50,24 @@ data User =
4250 , userGender :: Maybe Gender
4351 , userLocale :: Maybe Text
4452 , userUsername :: Maybe Text
53+ , userPicture :: Maybe Picture
4554 , userVerified :: Maybe Bool
4655 , userEmail :: Maybe Text
4756 , userLocation :: Maybe Place
4857 }
4958 deriving (Eq , Ord , Show , Read , Typeable )
5059
60+ instance A. FromJSON Picture where
61+ parseJSON (A. Object o) = do
62+ v <- o .: " data"
63+ Picture <$> v .:? " height"
64+ <*> v .: " is_silhouette"
65+ <*> v .: " url"
66+ <*> v .:? " width"
67+ parseJSON _ = mzero
68+
5169instance A. FromJSON User where
52- parseJSON (A. Object v) =
70+ parseJSON (A. Object v) = do
5371 User <$> v .: " id"
5472 <*> v .:? " name"
5573 <*> v .:? " first_name"
@@ -58,6 +76,7 @@ instance A.FromJSON User where
5876 <*> v .:? " gender"
5977 <*> v .:? " locale"
6078 <*> v .:? " username"
79+ <*> v .:? " picture"
6180 <*> v .:? " verified"
6281 <*> v .:? " email"
6382 <*> v .:? " location"
0 commit comments