content: -- | Contains actions for handling flair on a subreddit-wise basis.
  module Reddit.Actions.Flair
    ( getFlairList
    , getFlairList'
    , addLinkFlair
    , flairCSV ) where
  
  import Reddit.Routes.Flair
  import Reddit.Types.Empty
  import Reddit.Types.Flair
  import Reddit.Types.Options
  import Reddit.Types.Reddit
  import Reddit.Types.Subreddit
  import Reddit.Types.User
  
  import Control.Monad
  import Data.Aeson hiding (Options(..))
  import Data.Default.Class
  import Data.Text (Text)
  
  -- | Get the flair list for a subreddit. Requires moderator privileges on
  --   the subreddit.
  getFlairList :: Monad m => SubredditName -> RedditT m FlairListing
  getFlairList = getFlairList' def
  
  -- | Get the flair list for a subreddit (with 'Options'). Requires moderator
  --   privileges on the subreddit.
  getFlairList' :: Monad m => Options UserID -> SubredditName -> RedditT m FlairListing
  getFlairList' opts r = liftM flistToListing $ runRoute (flairList opts r)
  
  -- | Add link flair to the subreddit-wide template for a subreddit that you moderate.
  --   Requires moderator privileges on the subreddit.
  addLinkFlair :: Monad m
               => SubredditName -- ^ The subreddit whose template you want to modify
               -> Text -- ^ The intended CSS class of the new link flair
               -> Text -- ^ The intended text label of the new link flair
               -> Bool -- ^ Whether the flair should be editable by users
               -> RedditT m ()
  addLinkFlair r c l e =
    nothing $ runRoute $ addLinkFlairTemplate r c l e
  
  flairCSV :: Monad m => SubredditName -> [(Username, Text, Text)] -> RedditT m Value
  flairCSV r sets =
    runRoute $ flairCSVRoute r sets
  