module Reddit.Types.Wiki where import Reddit.Parser import Reddit.Types.User import Reddit.Utilities import Control.Applicative import Data.Aeson import Data.Monoid import Data.Text (Text) import Data.Time.Clock import Data.Time.Clock.POSIX import Prelude newtype RevisionID = RevisionID Text deriving (Int -> RevisionID -> ShowS [RevisionID] -> ShowS RevisionID -> String (Int -> RevisionID -> ShowS) -> (RevisionID -> String) -> ([RevisionID] -> ShowS) -> Show RevisionID forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [RevisionID] -> ShowS $cshowList :: [RevisionID] -> ShowS show :: RevisionID -> String $cshow :: RevisionID -> String showsPrec :: Int -> RevisionID -> ShowS $cshowsPrec :: Int -> RevisionID -> ShowS Show, ReadPrec [RevisionID] ReadPrec RevisionID Int -> ReadS RevisionID ReadS [RevisionID] (Int -> ReadS RevisionID) -> ReadS [RevisionID] -> ReadPrec RevisionID -> ReadPrec [RevisionID] -> Read RevisionID forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [RevisionID] $creadListPrec :: ReadPrec [RevisionID] readPrec :: ReadPrec RevisionID $creadPrec :: ReadPrec RevisionID readList :: ReadS [RevisionID] $creadList :: ReadS [RevisionID] readsPrec :: Int -> ReadS RevisionID $creadsPrec :: Int -> ReadS RevisionID Read, RevisionID -> RevisionID -> Bool (RevisionID -> RevisionID -> Bool) -> (RevisionID -> RevisionID -> Bool) -> Eq RevisionID forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: RevisionID -> RevisionID -> Bool $c/= :: RevisionID -> RevisionID -> Bool == :: RevisionID -> RevisionID -> Bool $c== :: RevisionID -> RevisionID -> Bool Eq) data WikiPage = WikiPage { WikiPage -> Maybe Text contentHTML :: Maybe Text , WikiPage -> Text contentMarkdown :: Text , WikiPage -> UTCTime revisionDate :: UTCTime , WikiPage -> Username revisedBy :: Username , WikiPage -> Bool canRevise :: Bool } deriving (Int -> WikiPage -> ShowS [WikiPage] -> ShowS WikiPage -> String (Int -> WikiPage -> ShowS) -> (WikiPage -> String) -> ([WikiPage] -> ShowS) -> Show WikiPage forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [WikiPage] -> ShowS $cshowList :: [WikiPage] -> ShowS show :: WikiPage -> String $cshow :: WikiPage -> String showsPrec :: Int -> WikiPage -> ShowS $cshowsPrec :: Int -> WikiPage -> ShowS Show, ReadPrec [WikiPage] ReadPrec WikiPage Int -> ReadS WikiPage ReadS [WikiPage] (Int -> ReadS WikiPage) -> ReadS [WikiPage] -> ReadPrec WikiPage -> ReadPrec [WikiPage] -> Read WikiPage forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [WikiPage] $creadListPrec :: ReadPrec [WikiPage] readPrec :: ReadPrec WikiPage $creadPrec :: ReadPrec WikiPage readList :: ReadS [WikiPage] $creadList :: ReadS [WikiPage] readsPrec :: Int -> ReadS WikiPage $creadsPrec :: Int -> ReadS WikiPage Read, WikiPage -> WikiPage -> Bool (WikiPage -> WikiPage -> Bool) -> (WikiPage -> WikiPage -> Bool) -> Eq WikiPage forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: WikiPage -> WikiPage -> Bool $c/= :: WikiPage -> WikiPage -> Bool == :: WikiPage -> WikiPage -> Bool $c== :: WikiPage -> WikiPage -> Bool Eq) instance FromJSON WikiPage where parseJSON :: Value -> Parser WikiPage parseJSON (Object Object o) = do Object o Object -> Text -> Parser () `ensureKind` Text "wikipage" Object d <- Object o Object -> Key -> Parser Object forall a. FromJSON a => Object -> Key -> Parser a .: Key "data" Maybe Text -> Text -> UTCTime -> Username -> Bool -> WikiPage WikiPage (Maybe Text -> Text -> UTCTime -> Username -> Bool -> WikiPage) -> Parser (Maybe Text) -> Parser (Text -> UTCTime -> Username -> Bool -> WikiPage) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ((Text -> Text) -> Maybe Text -> Maybe Text forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Text -> Text unescape (Maybe Text -> Maybe Text) -> Parser (Maybe Text) -> Parser (Maybe Text) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Object d Object -> Key -> Parser (Maybe Text) forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "content_html") Parser (Text -> UTCTime -> Username -> Bool -> WikiPage) -> Parser Text -> Parser (UTCTime -> Username -> Bool -> WikiPage) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> (Text -> Text unescape (Text -> Text) -> Parser Text -> Parser Text forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Object d Object -> Key -> Parser Text forall a. FromJSON a => Object -> Key -> Parser a .: Key "content_md") Parser (UTCTime -> Username -> Bool -> WikiPage) -> Parser UTCTime -> Parser (Username -> Bool -> WikiPage) 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 d Object -> Key -> Parser Integer forall a. FromJSON a => Object -> Key -> Parser a .: Key "revision_date") Parser (Username -> Bool -> WikiPage) -> Parser Username -> Parser (Bool -> WikiPage) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> ((Object d Object -> Key -> Parser Object forall a. FromJSON a => Object -> Key -> Parser a .: Key "revision_by") Parser Object -> (Object -> Parser Object) -> Parser Object forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= (Object -> Key -> Parser Object forall a. FromJSON a => Object -> Key -> Parser a .: Key "data") Parser Object -> (Object -> Parser Username) -> Parser Username forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= (Object -> Key -> Parser Username forall a. FromJSON a => Object -> Key -> Parser a .: Key "name")) Parser (Bool -> WikiPage) -> Parser Bool -> Parser WikiPage forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Object d Object -> Key -> Parser Bool forall a. FromJSON a => Object -> Key -> Parser a .: Key "may_revise" parseJSON Value _ = Parser WikiPage forall a. Monoid a => a mempty