module Network.Pushbullet.Types.User where
import Network.Pushbullet.Types.Misc
import Network.Pushbullet.Types.Time
import Data.Aeson
import Data.Text ( Text )
import Lens.Micro.TH
newtype UserId = UserId Text
deriving (Eq, FromJSON, Show, ToJSON)
data User
= User
{ _userCreated :: PushbulletTime
, _userEmail :: EmailAddress
, _userEmailNormalized :: EmailAddress
, _userId :: UserId
, _userImageUrl :: Url
, _userMaxUploadSize :: Double
, _userModified :: PushbulletTime
, _userName :: Name
}
deriving (Eq, Show)
makeLenses ''User
instance FromJSON User where
parseJSON (Object o) = pure User
<*> o .: "created"
<*> o .: "email"
<*> o .: "email_normalized"
<*> o .: "iden"
<*> o .: "image_url"
<*> o .: "max_upload_size"
<*> o .: "modified"
<*> o .: "name"
parseJSON _ = fail "cannot parse user from non-object"