module Reddit.Types.Flair where import Reddit.Types.Listing import Reddit.Types.User import Control.Applicative import Data.Aeson import Data.Monoid import Data.Text (Text) import Prelude data Flair = Flair { Flair -> Username user :: Username , Flair -> Maybe Text text :: Maybe Text , Flair -> Maybe Text cssClass :: Maybe Text } deriving (Int -> Flair -> ShowS [Flair] -> ShowS Flair -> String (Int -> Flair -> ShowS) -> (Flair -> String) -> ([Flair] -> ShowS) -> Show Flair forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Flair] -> ShowS $cshowList :: [Flair] -> ShowS show :: Flair -> String $cshow :: Flair -> String showsPrec :: Int -> Flair -> ShowS $cshowsPrec :: Int -> Flair -> ShowS Show, ReadPrec [Flair] ReadPrec Flair Int -> ReadS Flair ReadS [Flair] (Int -> ReadS Flair) -> ReadS [Flair] -> ReadPrec Flair -> ReadPrec [Flair] -> Read Flair forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [Flair] $creadListPrec :: ReadPrec [Flair] readPrec :: ReadPrec Flair $creadPrec :: ReadPrec Flair readList :: ReadS [Flair] $creadList :: ReadS [Flair] readsPrec :: Int -> ReadS Flair $creadsPrec :: Int -> ReadS Flair Read, Flair -> Flair -> Bool (Flair -> Flair -> Bool) -> (Flair -> Flair -> Bool) -> Eq Flair forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Flair -> Flair -> Bool $c/= :: Flair -> Flair -> Bool == :: Flair -> Flair -> Bool $c== :: Flair -> Flair -> Bool Eq) instance FromJSON Flair where parseJSON :: Value -> Parser Flair parseJSON (Object Object o) = Username -> Maybe Text -> Maybe Text -> Flair Flair (Username -> Maybe Text -> Maybe Text -> Flair) -> Parser Username -> Parser (Maybe Text -> Maybe Text -> Flair) 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 "user" Parser (Maybe Text -> Maybe Text -> Flair) -> Parser (Maybe Text) -> Parser (Maybe Text -> Flair) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Object o Object -> Key -> Parser (Maybe Text) forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "flair_text" Parser (Maybe Text -> Flair) -> Parser (Maybe Text) -> Parser Flair forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Object o Object -> Key -> Parser (Maybe Text) forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "flair_css_class" parseJSON Value _ = Parser Flair forall a. Monoid a => a mempty data FList = FList [Flair] (Maybe UserID) (Maybe UserID) deriving (Int -> FList -> ShowS [FList] -> ShowS FList -> String (Int -> FList -> ShowS) -> (FList -> String) -> ([FList] -> ShowS) -> Show FList forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [FList] -> ShowS $cshowList :: [FList] -> ShowS show :: FList -> String $cshow :: FList -> String showsPrec :: Int -> FList -> ShowS $cshowsPrec :: Int -> FList -> ShowS Show, ReadPrec [FList] ReadPrec FList Int -> ReadS FList ReadS [FList] (Int -> ReadS FList) -> ReadS [FList] -> ReadPrec FList -> ReadPrec [FList] -> Read FList forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [FList] $creadListPrec :: ReadPrec [FList] readPrec :: ReadPrec FList $creadPrec :: ReadPrec FList readList :: ReadS [FList] $creadList :: ReadS [FList] readsPrec :: Int -> ReadS FList $creadsPrec :: Int -> ReadS FList Read, FList -> FList -> Bool (FList -> FList -> Bool) -> (FList -> FList -> Bool) -> Eq FList forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: FList -> FList -> Bool $c/= :: FList -> FList -> Bool == :: FList -> FList -> Bool $c== :: FList -> FList -> Bool Eq) instance FromJSON FList where parseJSON :: Value -> Parser FList parseJSON (Object Object o) = [Flair] -> Maybe UserID -> Maybe UserID -> FList FList ([Flair] -> Maybe UserID -> Maybe UserID -> FList) -> Parser [Flair] -> Parser (Maybe UserID -> Maybe UserID -> FList) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Object o Object -> Key -> Parser [Flair] forall a. FromJSON a => Object -> Key -> Parser a .: Key "users" Parser (Maybe UserID -> Maybe UserID -> FList) -> Parser (Maybe UserID) -> Parser (Maybe UserID -> FList) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Object o Object -> Key -> Parser (Maybe UserID) forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "next" Parser (Maybe UserID -> FList) -> Parser (Maybe UserID) -> Parser FList forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Object o Object -> Key -> Parser (Maybe UserID) forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "prev" parseJSON Value _ = Parser FList forall a. Monoid a => a mempty type FlairListing = Listing UserID Flair flistToListing :: FList -> FlairListing flistToListing :: FList -> FlairListing flistToListing (FList [Flair] f Maybe UserID b Maybe UserID a) = Maybe UserID -> Maybe UserID -> [Flair] -> FlairListing forall t a. Maybe t -> Maybe t -> [a] -> Listing t a Listing Maybe UserID b Maybe UserID a [Flair] f