module Reddit.Types.SubredditSettings
  ( SubredditSettings(..)
  , ContentOptions(..)
  , SpamFilterStrength(..)
  , SubredditType(..)
  , WikiEditMode(..) ) where

import Reddit.Parser
import Reddit.Utilities

import Control.Applicative
import Data.Aeson
import Data.Default.Class
import Data.Monoid hiding (Any(..))
import Data.Text (Text)
import Network.API.Builder.Query
import Prelude

data SubredditSettings = SubredditSettings { SubredditSettings -> Text
sidebarText :: Text
                                           , SubredditSettings -> Text
descriptionText :: Text
                                           , SubredditSettings -> Text
title :: Text
                                           , SubredditSettings -> ContentOptions
linkType :: ContentOptions
                                           , SubredditSettings -> Integer
hideScoreMins :: Integer
                                           , SubredditSettings -> Maybe Text
submitLinkLabel :: Maybe Text
                                           , SubredditSettings -> Maybe Text
submitTextLabel :: Maybe Text
                                           , SubredditSettings -> Maybe Bool
domainCSS :: Maybe Bool
                                           , SubredditSettings -> Maybe Bool
domainSidebar :: Maybe Bool
                                           , SubredditSettings -> Bool
showMedia :: Bool
                                           , SubredditSettings -> Bool
over18 :: Bool
                                           , SubredditSettings -> Text
language :: Text
                                           , SubredditSettings -> Integer
wikiEditKarma :: Integer
                                           , SubredditSettings -> Integer
wikiEditAge :: Integer
                                           , SubredditSettings -> WikiEditMode
wikiEditMode :: WikiEditMode
                                           , SubredditSettings -> SpamFilterStrength
spamComments :: SpamFilterStrength
                                           , SubredditSettings -> SpamFilterStrength
spamSelfposts :: SpamFilterStrength
                                           , SubredditSettings -> SpamFilterStrength
spamLinks :: SpamFilterStrength
                                           , SubredditSettings -> Bool
publicTrafficStats :: Bool
                                           , SubredditSettings -> SubredditType
subredditType :: SubredditType }
  deriving (Int -> SubredditSettings -> ShowS
[SubredditSettings] -> ShowS
SubredditSettings -> String
(Int -> SubredditSettings -> ShowS)
-> (SubredditSettings -> String)
-> ([SubredditSettings] -> ShowS)
-> Show SubredditSettings
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubredditSettings] -> ShowS
$cshowList :: [SubredditSettings] -> ShowS
show :: SubredditSettings -> String
$cshow :: SubredditSettings -> String
showsPrec :: Int -> SubredditSettings -> ShowS
$cshowsPrec :: Int -> SubredditSettings -> ShowS
Show, ReadPrec [SubredditSettings]
ReadPrec SubredditSettings
Int -> ReadS SubredditSettings
ReadS [SubredditSettings]
(Int -> ReadS SubredditSettings)
-> ReadS [SubredditSettings]
-> ReadPrec SubredditSettings
-> ReadPrec [SubredditSettings]
-> Read SubredditSettings
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SubredditSettings]
$creadListPrec :: ReadPrec [SubredditSettings]
readPrec :: ReadPrec SubredditSettings
$creadPrec :: ReadPrec SubredditSettings
readList :: ReadS [SubredditSettings]
$creadList :: ReadS [SubredditSettings]
readsPrec :: Int -> ReadS SubredditSettings
$creadsPrec :: Int -> ReadS SubredditSettings
Read, SubredditSettings -> SubredditSettings -> Bool
(SubredditSettings -> SubredditSettings -> Bool)
-> (SubredditSettings -> SubredditSettings -> Bool)
-> Eq SubredditSettings
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubredditSettings -> SubredditSettings -> Bool
$c/= :: SubredditSettings -> SubredditSettings -> Bool
== :: SubredditSettings -> SubredditSettings -> Bool
$c== :: SubredditSettings -> SubredditSettings -> Bool
Eq)

instance FromJSON SubredditSettings where
  parseJSON :: Value -> Parser SubredditSettings
parseJSON (Object Object
o) = do
    Object
o Object -> Text -> Parser ()
`ensureKind` Text
subredditSettingsPrefix
    Object
d <- Object
o Object -> Key -> Parser Object
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"data"
    Text
-> Text
-> Text
-> ContentOptions
-> Integer
-> Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe Bool
-> Bool
-> Bool
-> Text
-> Integer
-> Integer
-> WikiEditMode
-> SpamFilterStrength
-> SpamFilterStrength
-> SpamFilterStrength
-> Bool
-> SubredditType
-> SubredditSettings
SubredditSettings (Text
 -> Text
 -> Text
 -> ContentOptions
 -> Integer
 -> Maybe Text
 -> Maybe Text
 -> Maybe Bool
 -> Maybe Bool
 -> Bool
 -> Bool
 -> Text
 -> Integer
 -> Integer
 -> WikiEditMode
 -> SpamFilterStrength
 -> SpamFilterStrength
 -> SpamFilterStrength
 -> Bool
 -> SubredditType
 -> SubredditSettings)
-> Parser Text
-> Parser
     (Text
      -> Text
      -> ContentOptions
      -> Integer
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Bool
      -> Bool
      -> Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Functor 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
"description")
                      Parser
  (Text
   -> Text
   -> ContentOptions
   -> Integer
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Bool
   -> Bool
   -> Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser Text
-> Parser
     (Text
      -> ContentOptions
      -> Integer
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Bool
      -> Bool
      -> Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"public_description"
                      Parser
  (Text
   -> ContentOptions
   -> Integer
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Bool
   -> Bool
   -> Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser Text
-> Parser
     (ContentOptions
      -> Integer
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Bool
      -> Bool
      -> Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"title"
                      Parser
  (ContentOptions
   -> Integer
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Bool
   -> Bool
   -> Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser ContentOptions
-> Parser
     (Integer
      -> Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Bool
      -> Bool
      -> Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser ContentOptions
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"content_options"
                      Parser
  (Integer
   -> Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Bool
   -> Bool
   -> Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser Integer
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Bool
      -> Maybe Bool
      -> Bool
      -> Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser Integer
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"comment_score_hide_mins"
                      Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Bool
   -> Maybe Bool
   -> Bool
   -> Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Bool
      -> Maybe Bool
      -> Bool
      -> Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"submit_link_label"
                      Parser
  (Maybe Text
   -> Maybe Bool
   -> Maybe Bool
   -> Bool
   -> Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser (Maybe Text)
-> Parser
     (Maybe Bool
      -> Maybe Bool
      -> Bool
      -> Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"submit_text_label"
                      Parser
  (Maybe Bool
   -> Maybe Bool
   -> Bool
   -> Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser (Maybe Bool)
-> Parser
     (Maybe Bool
      -> Bool
      -> Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"domain_css"
                      Parser
  (Maybe Bool
   -> Bool
   -> Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser (Maybe Bool)
-> Parser
     (Bool
      -> Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser (Maybe Bool)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"domain_sidebar"
                      Parser
  (Bool
   -> Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser Bool
-> Parser
     (Bool
      -> Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
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
"show_media"
                      Parser
  (Bool
   -> Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser Bool
-> Parser
     (Text
      -> Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
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
"over_18"
                      Parser
  (Text
   -> Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser Text
-> Parser
     (Integer
      -> Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"language"
                      Parser
  (Integer
   -> Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser Integer
-> Parser
     (Integer
      -> WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser Integer
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"wiki_edit_karma"
                      Parser
  (Integer
   -> WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser Integer
-> Parser
     (WikiEditMode
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser Integer
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"wiki_edit_age"
                      Parser
  (WikiEditMode
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser WikiEditMode
-> Parser
     (SpamFilterStrength
      -> SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser WikiEditMode
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"wikimode"
                      Parser
  (SpamFilterStrength
   -> SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser SpamFilterStrength
-> Parser
     (SpamFilterStrength
      -> SpamFilterStrength
      -> Bool
      -> SubredditType
      -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser SpamFilterStrength
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"spam_comments"
                      Parser
  (SpamFilterStrength
   -> SpamFilterStrength
   -> Bool
   -> SubredditType
   -> SubredditSettings)
-> Parser SpamFilterStrength
-> Parser
     (SpamFilterStrength -> Bool -> SubredditType -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser SpamFilterStrength
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"spam_selfposts"
                      Parser
  (SpamFilterStrength -> Bool -> SubredditType -> SubredditSettings)
-> Parser SpamFilterStrength
-> Parser (Bool -> SubredditType -> SubredditSettings)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser SpamFilterStrength
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"spam_links"
                      Parser (Bool -> SubredditType -> SubredditSettings)
-> Parser Bool -> Parser (SubredditType -> SubredditSettings)
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
"public_traffic"
                      Parser (SubredditType -> SubredditSettings)
-> Parser SubredditType -> Parser SubredditSettings
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
d Object -> Key -> Parser SubredditType
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"subreddit_type"
  parseJSON Value
_ = Parser SubredditSettings
forall a. Monoid a => a
mempty

instance ToJSON SubredditSettings where
  toJSON :: SubredditSettings -> Value
toJSON SubredditSettings
settings = [Pair] -> Value
object
    [ Key
"description" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Text
sidebarText SubredditSettings
settings
    , Key
"public_description" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Text
descriptionText SubredditSettings
settings
    , Key
"title" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Text
title SubredditSettings
settings
    , Key
"content_options" Key -> ContentOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> ContentOptions
linkType SubredditSettings
settings
    , Key
"comment_score_hide_mins" Key -> Integer -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Integer
hideScoreMins SubredditSettings
settings
    , Key
"submit_link_label" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Maybe Text
submitLinkLabel SubredditSettings
settings
    , Key
"submit_text_label" Key -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Maybe Text
submitTextLabel SubredditSettings
settings
    , Key
"domain_css" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Maybe Bool
domainCSS SubredditSettings
settings
    , Key
"domain_sidebar" Key -> Maybe Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Maybe Bool
domainSidebar SubredditSettings
settings
    , Key
"show_media" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Bool
showMedia SubredditSettings
settings
    , Key
"over_18" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Bool
over18 SubredditSettings
settings
    , Key
"language" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Text
language SubredditSettings
settings
    , Key
"wiki_edit_karma" Key -> Integer -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Integer
wikiEditKarma SubredditSettings
settings
    , Key
"wiki_edit_age" Key -> Integer -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Integer
wikiEditAge SubredditSettings
settings
    , Key
"wikimode" Key -> WikiEditMode -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> WikiEditMode
wikiEditMode SubredditSettings
settings
    , Key
"spam_comments" Key -> SpamFilterStrength -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> SpamFilterStrength
spamComments SubredditSettings
settings
    , Key
"spam_selfposts" Key -> SpamFilterStrength -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> SpamFilterStrength
spamSelfposts SubredditSettings
settings
    , Key
"spam_links" Key -> SpamFilterStrength -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> SpamFilterStrength
spamLinks SubredditSettings
settings
    , Key
"public_traffic" Key -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> Bool
publicTrafficStats SubredditSettings
settings
    , Key
"subreddit_type" Key -> SubredditType -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= SubredditSettings -> SubredditType
subredditType SubredditSettings
settings ]

data SubredditType = Public
                   | Private
                   | Restricted
                   | GoldRestricted
                   | Archived
  deriving (Int -> SubredditType -> ShowS
[SubredditType] -> ShowS
SubredditType -> String
(Int -> SubredditType -> ShowS)
-> (SubredditType -> String)
-> ([SubredditType] -> ShowS)
-> Show SubredditType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubredditType] -> ShowS
$cshowList :: [SubredditType] -> ShowS
show :: SubredditType -> String
$cshow :: SubredditType -> String
showsPrec :: Int -> SubredditType -> ShowS
$cshowsPrec :: Int -> SubredditType -> ShowS
Show, ReadPrec [SubredditType]
ReadPrec SubredditType
Int -> ReadS SubredditType
ReadS [SubredditType]
(Int -> ReadS SubredditType)
-> ReadS [SubredditType]
-> ReadPrec SubredditType
-> ReadPrec [SubredditType]
-> Read SubredditType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SubredditType]
$creadListPrec :: ReadPrec [SubredditType]
readPrec :: ReadPrec SubredditType
$creadPrec :: ReadPrec SubredditType
readList :: ReadS [SubredditType]
$creadList :: ReadS [SubredditType]
readsPrec :: Int -> ReadS SubredditType
$creadsPrec :: Int -> ReadS SubredditType
Read, SubredditType -> SubredditType -> Bool
(SubredditType -> SubredditType -> Bool)
-> (SubredditType -> SubredditType -> Bool) -> Eq SubredditType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubredditType -> SubredditType -> Bool
$c/= :: SubredditType -> SubredditType -> Bool
== :: SubredditType -> SubredditType -> Bool
$c== :: SubredditType -> SubredditType -> Bool
Eq)

subredditTypeText :: SubredditType -> Text
subredditTypeText :: SubredditType -> Text
subredditTypeText SubredditType
Public = Text
"public"
subredditTypeText SubredditType
Private = Text
"private"
subredditTypeText SubredditType
Restricted = Text
"restricted"
subredditTypeText SubredditType
GoldRestricted = Text
"gold_restricted"
subredditTypeText SubredditType
Archived = Text
"archived"

instance FromJSON SubredditType where
  parseJSON :: Value -> Parser SubredditType
parseJSON (String Text
s) =
    case Text
s of
      Text
"public" -> SubredditType -> Parser SubredditType
forall (m :: * -> *) a. Monad m => a -> m a
return SubredditType
Public
      Text
"private" -> SubredditType -> Parser SubredditType
forall (m :: * -> *) a. Monad m => a -> m a
return SubredditType
Private
      Text
"restricted" -> SubredditType -> Parser SubredditType
forall (m :: * -> *) a. Monad m => a -> m a
return SubredditType
Restricted
      Text
"gold_restricted" -> SubredditType -> Parser SubredditType
forall (m :: * -> *) a. Monad m => a -> m a
return SubredditType
GoldRestricted
      Text
"archived" -> SubredditType -> Parser SubredditType
forall (m :: * -> *) a. Monad m => a -> m a
return SubredditType
Archived
      Text
_ -> Parser SubredditType
forall a. Monoid a => a
mempty
  parseJSON Value
_ = Parser SubredditType
forall a. Monoid a => a
mempty

instance ToJSON SubredditType where
  toJSON :: SubredditType -> Value
toJSON = Text -> Value
String (Text -> Value)
-> (SubredditType -> Text) -> SubredditType -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SubredditType -> Text
subredditTypeText

instance Default SubredditType where
  def :: SubredditType
def = SubredditType
Public

instance ToQuery SubredditType where
  toQuery :: Text -> SubredditType -> [(Text, Text)]
toQuery Text
k SubredditType
v = [(Text
k, SubredditType -> Text
subredditTypeText SubredditType
v)]

data ContentOptions = Any
                    | Link
                    | Self
  deriving (Int -> ContentOptions -> ShowS
[ContentOptions] -> ShowS
ContentOptions -> String
(Int -> ContentOptions -> ShowS)
-> (ContentOptions -> String)
-> ([ContentOptions] -> ShowS)
-> Show ContentOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ContentOptions] -> ShowS
$cshowList :: [ContentOptions] -> ShowS
show :: ContentOptions -> String
$cshow :: ContentOptions -> String
showsPrec :: Int -> ContentOptions -> ShowS
$cshowsPrec :: Int -> ContentOptions -> ShowS
Show, ReadPrec [ContentOptions]
ReadPrec ContentOptions
Int -> ReadS ContentOptions
ReadS [ContentOptions]
(Int -> ReadS ContentOptions)
-> ReadS [ContentOptions]
-> ReadPrec ContentOptions
-> ReadPrec [ContentOptions]
-> Read ContentOptions
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ContentOptions]
$creadListPrec :: ReadPrec [ContentOptions]
readPrec :: ReadPrec ContentOptions
$creadPrec :: ReadPrec ContentOptions
readList :: ReadS [ContentOptions]
$creadList :: ReadS [ContentOptions]
readsPrec :: Int -> ReadS ContentOptions
$creadsPrec :: Int -> ReadS ContentOptions
Read, ContentOptions -> ContentOptions -> Bool
(ContentOptions -> ContentOptions -> Bool)
-> (ContentOptions -> ContentOptions -> Bool) -> Eq ContentOptions
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ContentOptions -> ContentOptions -> Bool
$c/= :: ContentOptions -> ContentOptions -> Bool
== :: ContentOptions -> ContentOptions -> Bool
$c== :: ContentOptions -> ContentOptions -> Bool
Eq)

contentOptionsText :: ContentOptions -> Text
contentOptionsText :: ContentOptions -> Text
contentOptionsText ContentOptions
Any = Text
"any"
contentOptionsText ContentOptions
Link = Text
"link"
contentOptionsText ContentOptions
Self = Text
"self"

instance FromJSON ContentOptions where
  parseJSON :: Value -> Parser ContentOptions
parseJSON (String Text
s) =
    case Text
s of
      Text
"any" -> ContentOptions -> Parser ContentOptions
forall (m :: * -> *) a. Monad m => a -> m a
return ContentOptions
Any
      Text
"link" -> ContentOptions -> Parser ContentOptions
forall (m :: * -> *) a. Monad m => a -> m a
return ContentOptions
Link
      Text
"self" -> ContentOptions -> Parser ContentOptions
forall (m :: * -> *) a. Monad m => a -> m a
return ContentOptions
Self
      Text
_ -> Parser ContentOptions
forall a. Monoid a => a
mempty
  parseJSON Value
_ = Parser ContentOptions
forall a. Monoid a => a
mempty

instance ToJSON ContentOptions where
  toJSON :: ContentOptions -> Value
toJSON = Text -> Value
String (Text -> Value)
-> (ContentOptions -> Text) -> ContentOptions -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContentOptions -> Text
contentOptionsText

instance ToQuery ContentOptions where
  toQuery :: Text -> ContentOptions -> [(Text, Text)]
toQuery Text
k ContentOptions
v = [(Text
k, ContentOptions -> Text
contentOptionsText ContentOptions
v)]

instance Default ContentOptions where
  def :: ContentOptions
def = ContentOptions
Any

data SpamFilterStrength = FilterLow
                        | FilterHigh
                        | FilterAll
  deriving (Int -> SpamFilterStrength -> ShowS
[SpamFilterStrength] -> ShowS
SpamFilterStrength -> String
(Int -> SpamFilterStrength -> ShowS)
-> (SpamFilterStrength -> String)
-> ([SpamFilterStrength] -> ShowS)
-> Show SpamFilterStrength
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SpamFilterStrength] -> ShowS
$cshowList :: [SpamFilterStrength] -> ShowS
show :: SpamFilterStrength -> String
$cshow :: SpamFilterStrength -> String
showsPrec :: Int -> SpamFilterStrength -> ShowS
$cshowsPrec :: Int -> SpamFilterStrength -> ShowS
Show, ReadPrec [SpamFilterStrength]
ReadPrec SpamFilterStrength
Int -> ReadS SpamFilterStrength
ReadS [SpamFilterStrength]
(Int -> ReadS SpamFilterStrength)
-> ReadS [SpamFilterStrength]
-> ReadPrec SpamFilterStrength
-> ReadPrec [SpamFilterStrength]
-> Read SpamFilterStrength
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SpamFilterStrength]
$creadListPrec :: ReadPrec [SpamFilterStrength]
readPrec :: ReadPrec SpamFilterStrength
$creadPrec :: ReadPrec SpamFilterStrength
readList :: ReadS [SpamFilterStrength]
$creadList :: ReadS [SpamFilterStrength]
readsPrec :: Int -> ReadS SpamFilterStrength
$creadsPrec :: Int -> ReadS SpamFilterStrength
Read, SpamFilterStrength -> SpamFilterStrength -> Bool
(SpamFilterStrength -> SpamFilterStrength -> Bool)
-> (SpamFilterStrength -> SpamFilterStrength -> Bool)
-> Eq SpamFilterStrength
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SpamFilterStrength -> SpamFilterStrength -> Bool
$c/= :: SpamFilterStrength -> SpamFilterStrength -> Bool
== :: SpamFilterStrength -> SpamFilterStrength -> Bool
$c== :: SpamFilterStrength -> SpamFilterStrength -> Bool
Eq)

instance FromJSON SpamFilterStrength where
  parseJSON :: Value -> Parser SpamFilterStrength
parseJSON (String Text
s) =
    case Text
s of
      Text
"low" -> SpamFilterStrength -> Parser SpamFilterStrength
forall (m :: * -> *) a. Monad m => a -> m a
return SpamFilterStrength
FilterLow
      Text
"high" -> SpamFilterStrength -> Parser SpamFilterStrength
forall (m :: * -> *) a. Monad m => a -> m a
return SpamFilterStrength
FilterHigh
      Text
"all" -> SpamFilterStrength -> Parser SpamFilterStrength
forall (m :: * -> *) a. Monad m => a -> m a
return SpamFilterStrength
FilterAll
      Text
_ -> Parser SpamFilterStrength
forall a. Monoid a => a
mempty
  parseJSON Value
_ = Parser SpamFilterStrength
forall a. Monoid a => a
mempty

spamFilterStrengthText :: SpamFilterStrength -> Text
spamFilterStrengthText :: SpamFilterStrength -> Text
spamFilterStrengthText SpamFilterStrength
FilterLow = Text
"low"
spamFilterStrengthText SpamFilterStrength
FilterHigh = Text
"high"
spamFilterStrengthText SpamFilterStrength
FilterAll = Text
"all"

instance ToJSON SpamFilterStrength where
  toJSON :: SpamFilterStrength -> Value
toJSON = Text -> Value
String (Text -> Value)
-> (SpamFilterStrength -> Text) -> SpamFilterStrength -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SpamFilterStrength -> Text
spamFilterStrengthText

instance ToQuery SpamFilterStrength where
  toQuery :: Text -> SpamFilterStrength -> [(Text, Text)]
toQuery Text
k SpamFilterStrength
v = [(Text
k, SpamFilterStrength -> Text
spamFilterStrengthText SpamFilterStrength
v)]

data WikiEditMode = Anyone
                  | ApprovedOnly
                  | ModOnly
  deriving (Int -> WikiEditMode -> ShowS
[WikiEditMode] -> ShowS
WikiEditMode -> String
(Int -> WikiEditMode -> ShowS)
-> (WikiEditMode -> String)
-> ([WikiEditMode] -> ShowS)
-> Show WikiEditMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [WikiEditMode] -> ShowS
$cshowList :: [WikiEditMode] -> ShowS
show :: WikiEditMode -> String
$cshow :: WikiEditMode -> String
showsPrec :: Int -> WikiEditMode -> ShowS
$cshowsPrec :: Int -> WikiEditMode -> ShowS
Show, ReadPrec [WikiEditMode]
ReadPrec WikiEditMode
Int -> ReadS WikiEditMode
ReadS [WikiEditMode]
(Int -> ReadS WikiEditMode)
-> ReadS [WikiEditMode]
-> ReadPrec WikiEditMode
-> ReadPrec [WikiEditMode]
-> Read WikiEditMode
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [WikiEditMode]
$creadListPrec :: ReadPrec [WikiEditMode]
readPrec :: ReadPrec WikiEditMode
$creadPrec :: ReadPrec WikiEditMode
readList :: ReadS [WikiEditMode]
$creadList :: ReadS [WikiEditMode]
readsPrec :: Int -> ReadS WikiEditMode
$creadsPrec :: Int -> ReadS WikiEditMode
Read, WikiEditMode -> WikiEditMode -> Bool
(WikiEditMode -> WikiEditMode -> Bool)
-> (WikiEditMode -> WikiEditMode -> Bool) -> Eq WikiEditMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: WikiEditMode -> WikiEditMode -> Bool
$c/= :: WikiEditMode -> WikiEditMode -> Bool
== :: WikiEditMode -> WikiEditMode -> Bool
$c== :: WikiEditMode -> WikiEditMode -> Bool
Eq)

instance FromJSON WikiEditMode where
  parseJSON :: Value -> Parser WikiEditMode
parseJSON (String Text
s) =
    case Text
s of
      Text
"disabled" -> WikiEditMode -> Parser WikiEditMode
forall (m :: * -> *) a. Monad m => a -> m a
return WikiEditMode
ModOnly
      Text
"modonly" -> WikiEditMode -> Parser WikiEditMode
forall (m :: * -> *) a. Monad m => a -> m a
return WikiEditMode
ApprovedOnly
      Text
"anyone" -> WikiEditMode -> Parser WikiEditMode
forall (m :: * -> *) a. Monad m => a -> m a
return WikiEditMode
Anyone
      Text
_ -> Parser WikiEditMode
forall a. Monoid a => a
mempty
  parseJSON Value
_ = Parser WikiEditMode
forall a. Monoid a => a
mempty

wikiEditModeText :: WikiEditMode -> Text
wikiEditModeText :: WikiEditMode -> Text
wikiEditModeText WikiEditMode
ModOnly = Text
"disabled"
wikiEditModeText WikiEditMode
Anyone = Text
"anyone"
wikiEditModeText WikiEditMode
ApprovedOnly = Text
"modonly"

instance ToJSON WikiEditMode where
  toJSON :: WikiEditMode -> Value
toJSON = Text -> Value
String (Text -> Value) -> (WikiEditMode -> Text) -> WikiEditMode -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WikiEditMode -> Text
wikiEditModeText

instance ToQuery WikiEditMode where
  toQuery :: Text -> WikiEditMode -> [(Text, Text)]
toQuery Text
k WikiEditMode
v = [(Text
k, WikiEditMode -> Text
wikiEditModeText WikiEditMode
v)]

instance Default WikiEditMode where
  def :: WikiEditMode
def = WikiEditMode
Anyone

subredditSettingsPrefix :: Text
subredditSettingsPrefix :: Text
subredditSettingsPrefix = Text
"subreddit_settings"