module Web.HackerNews.User where
import Control.Applicative ((<*>), (<$>))
import Control.Monad (MonadPlus (mzero))
import Data.Aeson (FromJSON (parseJSON), Value (Object),
(.:))
import Data.Text (Text)
import Data.Time (UTCTime)
import Web.HackerNews.Util (fromSeconds)
data User = User {
userAbout :: Text
, userCreated :: UTCTime
, userDelay :: Int
, userId :: UserId
, userKarma :: Int
, userSubmitted :: [Int]
} deriving (Show)
newtype UserId
= UserId Text
deriving (Show, Eq)
instance FromJSON User where
parseJSON (Object o) =
User <$> o .: "about"
<*> (fromSeconds <$> o .: "created")
<*> o .: "delay"
<*> (UserId <$> o .: "id")
<*> o .: "karma"
<*> o .: "submitted"
parseJSON _ = mzero