module Reddit.Types.Moderation where import Reddit.Parser import Reddit.Types.User import Reddit.Types.Thing import Control.Applicative import Data.Aeson import Data.Time.Clock import Data.Time.Clock.POSIX import Data.Monoid import Data.Text (Text) import Network.API.Builder.Query import Prelude newtype BanID = BanID Text deriving (Show, Read, Eq, Ord) instance FromJSON BanID where parseJSON (String s) = BanID <$> stripPrefix banPrefix s parseJSON _ = mempty instance ToQuery BanID where toQuery k v = [(k, fullName v)] instance Thing BanID where fullName (BanID b) = mconcat [banPrefix, "_", b] data Ban = Ban { username :: Username , userID :: UserID , note :: Text , since :: UTCTime } deriving (Show, Read, Eq) instance FromJSON Ban where parseJSON (Object o) = Ban <$> o .: "name" <*> o .: "id" <*> o .: "note" <*> (posixSecondsToUTCTime . fromInteger <$> o .: "date") parseJSON _ = mempty banPrefix :: Text banPrefix = "rb"