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
@@ -42,14 +42,15 @@ data User =
4242 , userGender :: Maybe Gender
4343 , userLocale :: Maybe Text
4444 , userUsername :: Maybe Text
45+ , userPicture :: Maybe Picture
4546 , userVerified :: Maybe Bool
4647 , userEmail :: Maybe Text
4748 , userLocation :: Maybe Place
4849 }
4950 deriving (Eq , Ord , Show , Read , Typeable )
5051
5152instance A. FromJSON User where
52- parseJSON (A. Object v) =
53+ parseJSON (A. Object v) = do
5354 User <$> v .: " id"
5455 <*> v .:? " name"
5556 <*> v .:? " first_name"
@@ -58,12 +59,32 @@ instance A.FromJSON User where
5859 <*> v .:? " gender"
5960 <*> v .:? " locale"
6061 <*> v .:? " username"
62+ <*> v .:? " picture"
6163 <*> v .:? " verified"
6264 <*> v .:? " email"
6365 <*> v .:? " location"
6466 parseJSON _ = mzero
6567
6668
69+ -- | General picture record
70+ data Picture =
71+ Picture { pictureHeight :: Maybe Int
72+ , pictureIs_silhouette :: Bool
73+ , pictureUrl :: Text
74+ , pictureWidth :: Maybe Int
75+ }
76+ deriving (Eq , Ord , Show , Read , Typeable )
77+
78+ instance A. FromJSON Picture where
79+ parseJSON (A. Object o) = do
80+ v <- o .: " data"
81+ Picture <$> v .:? " height"
82+ <*> v .: " is_silhouette"
83+ <*> v .: " url"
84+ <*> v .:? " width"
85+ parseJSON _ = mzero
86+
87+
6788-- | An user's gender.
6889data Gender = Male | Female deriving (Eq , Ord , Show , Read , Enum , Typeable )
6990
0 commit comments