hackernews-0.3.0.0: src/Web/HackerNews/Update.hs
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module : Web.HackerNews.Update
-- Copyright : (c) David Johnson, Konstantin Zudov, 2014
-- Maintainer : djohnson.m@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Web.HackerNews.Update where
import Control.Applicative ((<$>), (<*>))
import Control.Monad (MonadPlus (mzero))
import Data.Aeson (FromJSON (parseJSON), Value (Object),
(.!=), (.:), (.:?))
import Data.Text (Text)
import Web.HackerNews.Endpoint (Endpoint (endpoint))
------------------------------------------------------------------------------
-- | Update Object
data Update = Update {
updateItems :: [Int]
, updateProfiles :: [Text]
, updateDeleted :: Bool
, updateDead :: Bool
} deriving (Show, Eq)
------------------------------------------------------------------------------
-- | Update ID for an `Updated` Object
data UpdateId = UpdateId deriving (Show, Eq)
------------------------------------------------------------------------------
-- | Endpoint Instances
instance Endpoint UpdateId Update where
endpoint _ = "updates"
------------------------------------------------------------------------------
-- | JSON Instances
instance FromJSON Update where
parseJSON (Object o) =
Update <$> o .: "items"
<*> o .: "profiles"
<*> o .:? "deleted" .!= False
<*> o .:? "dead" .!= False
parseJSON _ = mzero