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 (Int -> BanID -> ShowS [BanID] -> ShowS BanID -> String (Int -> BanID -> ShowS) -> (BanID -> String) -> ([BanID] -> ShowS) -> Show BanID forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [BanID] -> ShowS $cshowList :: [BanID] -> ShowS show :: BanID -> String $cshow :: BanID -> String showsPrec :: Int -> BanID -> ShowS $cshowsPrec :: Int -> BanID -> ShowS Show, ReadPrec [BanID] ReadPrec BanID Int -> ReadS BanID ReadS [BanID] (Int -> ReadS BanID) -> ReadS [BanID] -> ReadPrec BanID -> ReadPrec [BanID] -> Read BanID forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [BanID] $creadListPrec :: ReadPrec [BanID] readPrec :: ReadPrec BanID $creadPrec :: ReadPrec BanID readList :: ReadS [BanID] $creadList :: ReadS [BanID] readsPrec :: Int -> ReadS BanID $creadsPrec :: Int -> ReadS BanID Read, BanID -> BanID -> Bool (BanID -> BanID -> Bool) -> (BanID -> BanID -> Bool) -> Eq BanID forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: BanID -> BanID -> Bool $c/= :: BanID -> BanID -> Bool == :: BanID -> BanID -> Bool $c== :: BanID -> BanID -> Bool Eq, Eq BanID Eq BanID -> (BanID -> BanID -> Ordering) -> (BanID -> BanID -> Bool) -> (BanID -> BanID -> Bool) -> (BanID -> BanID -> Bool) -> (BanID -> BanID -> Bool) -> (BanID -> BanID -> BanID) -> (BanID -> BanID -> BanID) -> Ord BanID BanID -> BanID -> Bool BanID -> BanID -> Ordering BanID -> BanID -> BanID forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: BanID -> BanID -> BanID $cmin :: BanID -> BanID -> BanID max :: BanID -> BanID -> BanID $cmax :: BanID -> BanID -> BanID >= :: BanID -> BanID -> Bool $c>= :: BanID -> BanID -> Bool > :: BanID -> BanID -> Bool $c> :: BanID -> BanID -> Bool <= :: BanID -> BanID -> Bool $c<= :: BanID -> BanID -> Bool < :: BanID -> BanID -> Bool $c< :: BanID -> BanID -> Bool compare :: BanID -> BanID -> Ordering $ccompare :: BanID -> BanID -> Ordering $cp1Ord :: Eq BanID Ord) instance FromJSON BanID where parseJSON :: Value -> Parser BanID parseJSON (String Text s) = Text -> BanID BanID (Text -> BanID) -> Parser Text -> Parser BanID forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Text -> Text -> Parser Text stripPrefix Text banPrefix Text s parseJSON Value _ = Parser BanID forall a. Monoid a => a mempty instance ToQuery BanID where toQuery :: Text -> BanID -> [(Text, Text)] toQuery Text k BanID v = [(Text k, BanID -> Text forall a. Thing a => a -> Text fullName BanID v)] instance Thing BanID where fullName :: BanID -> Text fullName (BanID Text b) = [Text] -> Text forall a. Monoid a => [a] -> a mconcat [Text banPrefix, Text "_", Text b] data Ban = Ban { Ban -> Username username :: Username , Ban -> UserID userID :: UserID , Ban -> Text note :: Text , Ban -> UTCTime since :: UTCTime } deriving (Int -> Ban -> ShowS [Ban] -> ShowS Ban -> String (Int -> Ban -> ShowS) -> (Ban -> String) -> ([Ban] -> ShowS) -> Show Ban forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Ban] -> ShowS $cshowList :: [Ban] -> ShowS show :: Ban -> String $cshow :: Ban -> String showsPrec :: Int -> Ban -> ShowS $cshowsPrec :: Int -> Ban -> ShowS Show, ReadPrec [Ban] ReadPrec Ban Int -> ReadS Ban ReadS [Ban] (Int -> ReadS Ban) -> ReadS [Ban] -> ReadPrec Ban -> ReadPrec [Ban] -> Read Ban forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [Ban] $creadListPrec :: ReadPrec [Ban] readPrec :: ReadPrec Ban $creadPrec :: ReadPrec Ban readList :: ReadS [Ban] $creadList :: ReadS [Ban] readsPrec :: Int -> ReadS Ban $creadsPrec :: Int -> ReadS Ban Read, Ban -> Ban -> Bool (Ban -> Ban -> Bool) -> (Ban -> Ban -> Bool) -> Eq Ban forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Ban -> Ban -> Bool $c/= :: Ban -> Ban -> Bool == :: Ban -> Ban -> Bool $c== :: Ban -> Ban -> Bool Eq) instance FromJSON Ban where parseJSON :: Value -> Parser Ban parseJSON (Object Object o) = Username -> UserID -> Text -> UTCTime -> Ban Ban (Username -> UserID -> Text -> UTCTime -> Ban) -> Parser Username -> Parser (UserID -> Text -> UTCTime -> Ban) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Object o Object -> Key -> Parser Username forall a. FromJSON a => Object -> Key -> Parser a .: Key "name" Parser (UserID -> Text -> UTCTime -> Ban) -> Parser UserID -> Parser (Text -> UTCTime -> Ban) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Object o Object -> Key -> Parser UserID forall a. FromJSON a => Object -> Key -> Parser a .: Key "id" Parser (Text -> UTCTime -> Ban) -> Parser Text -> Parser (UTCTime -> Ban) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Object o Object -> Key -> Parser Text forall a. FromJSON a => Object -> Key -> Parser a .: Key "note" Parser (UTCTime -> Ban) -> Parser UTCTime -> Parser Ban forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> (POSIXTime -> UTCTime posixSecondsToUTCTime (POSIXTime -> UTCTime) -> (Integer -> POSIXTime) -> Integer -> UTCTime forall b c a. (b -> c) -> (a -> b) -> a -> c . Integer -> POSIXTime forall a. Num a => Integer -> a fromInteger (Integer -> UTCTime) -> Parser Integer -> Parser UTCTime forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Object o Object -> Key -> Parser Integer forall a. FromJSON a => Object -> Key -> Parser a .: Key "date") parseJSON Value _ = Parser Ban forall a. Monoid a => a mempty banPrefix :: Text banPrefix :: Text banPrefix = Text "rb"