module Reddit.Routes.Post where
import Reddit.Types.Options
import Reddit.Types.Comment (CommentID(..))
import Reddit.Types.Post (PostID(..))
import Reddit.Types.Subreddit (SubredditName(..))
import Reddit.Types.Thing
import Data.Text (Text)
import Network.API.Builder.Query
import Network.API.Builder.Routes
postsListing :: Options PostID -> Maybe SubredditName -> Text -> Route
postsListing :: Options PostID -> Maybe SubredditName -> Text -> Route
postsListing Options PostID
opts Maybe SubredditName
r Text
t =
[Text] -> [URLParam] -> Method -> Route
Route (Maybe SubredditName -> [Text]
endpoint Maybe SubredditName
r)
[ Text
"before" Text -> Maybe PostID -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Options PostID -> Maybe PostID
forall a. Options a -> Maybe a
before Options PostID
opts
, Text
"after" Text -> Maybe PostID -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Options PostID -> Maybe PostID
forall a. Options a -> Maybe a
after Options PostID
opts
, Text
"limit" Text -> Maybe Int -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Options PostID -> Maybe Int
forall a. Options a -> Maybe Int
limit Options PostID
opts ]
Method
"GET"
where endpoint :: Maybe SubredditName -> [Text]
endpoint Maybe SubredditName
Nothing = [ Text
t ]
endpoint (Just (R Text
name)) = [ Text
"r", Text
name, Text
t ]
aboutPosts :: [PostID] -> Route
aboutPosts :: [PostID] -> Route
aboutPosts [PostID]
ps =
[Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"info" ]
[ Text
"id" Text -> [PostID] -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. [PostID]
ps ]
Method
"GET"
savePost :: PostID -> Route
savePost :: PostID -> Route
savePost PostID
p = [Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"save" ]
[ Text
"id" Text -> PostID -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. PostID
p ]
Method
"POST"
unsavePost :: PostID -> Route
unsavePost :: PostID -> Route
unsavePost PostID
p = [Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"unsave" ]
[ Text
"id" Text -> PostID -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. PostID
p ]
Method
"POST"
submitLink :: SubredditName -> Text -> Text -> Route
submitLink :: SubredditName -> Text -> Text -> Route
submitLink (R Text
name) Text
title Text
url =
[Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"submit" ]
[ Text
"extension" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. (Text
"json" :: Text)
, Text
"kind" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. (Text
"link" :: Text)
, Text
"save" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
True
, Text
"resubmit" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
False
, Text
"sendreplies" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
True
, Text
"then" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. (Text
"tb" :: Text)
, Text
"title" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
title
, Text
"url" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
url
, Text
"sr" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
name]
Method
"POST"
submitSelfPost :: SubredditName -> Text -> Text -> Route
submitSelfPost :: SubredditName -> Text -> Text -> Route
submitSelfPost (R Text
name) Text
title Text
text =
[Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"submit" ]
[ Text
"extension" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. (Text
"json" :: Text)
, Text
"kind" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. (Text
"self" :: Text)
, Text
"save" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
True
, Text
"resubmit" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
False
, Text
"sendreplies" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
True
, Text
"then" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. (Text
"tb" :: Text)
, Text
"title" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
title
, Text
"text" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
text
, Text
"sr" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
name]
Method
"POST"
getComments :: PostID -> Maybe CommentID -> Route
(PostID Text
p) Maybe CommentID
c = [Text] -> [URLParam] -> Method -> Route
Route [ Text
"comments", Text
p ]
[ Text
"comment" Text -> Maybe Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. (CommentID -> Text) -> Maybe CommentID -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CommentID -> Text
f Maybe CommentID
c ]
Method
"GET"
where f :: CommentID -> Text
f (CommentID Text
x) = Text
x
sendReplies :: Bool -> PostID -> Route
sendReplies :: Bool -> PostID -> Route
sendReplies Bool
setting PostID
p = [Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"sendreplies" ]
[ Text
"id" Text -> PostID -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. PostID
p
, Text
"state" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
setting ]
Method
"POST"
removePost :: (ToQuery a, Thing a) => Bool -> a -> Route
removePost :: Bool -> a -> Route
removePost Bool
isSpam a
p = [Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"remove" ]
[ Text
"id" Text -> a -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. a
p
, Text
"spam" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
isSpam ]
Method
"POST"
stickyPost :: Bool -> PostID -> Maybe Integer -> Route
stickyPost :: Bool -> PostID -> Maybe Integer -> Route
stickyPost Bool
on PostID
p Maybe Integer
n =
[Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"set_subreddit_sticky" ]
[ Text
"id" Text -> PostID -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. PostID
p
, Text
"state" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
on
, Text
"num" Text -> Maybe Integer -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Maybe Integer
n ]
Method
"POST"
setContestMode :: Bool -> PostID -> Route
setContestMode :: Bool -> PostID -> Route
setContestMode Bool
on PostID
p = [Text] -> [URLParam] -> Method -> Route
Route [ Text
"api", Text
"set_contest_mode" ]
[ Text
"id" Text -> PostID -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. PostID
p
, Text
"state" Text -> Bool -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Bool
on ]
Method
"POST"
postFlair :: SubredditName -> PostID -> Text -> Text -> Route
postFlair :: SubredditName -> PostID -> Text -> Text -> Route
postFlair (R Text
sub) PostID
p Text
text Text
css =
[Text] -> [URLParam] -> Method -> Route
Route [ Text
"r", Text
sub, Text
"api", Text
"flair" ]
[ Text
"link" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. PostID -> Text
forall a. Thing a => a -> Text
fullName PostID
p
, Text
"text" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
text
, Text
"css_class" Text -> Text -> URLParam
forall a. ToQuery a => Text -> a -> URLParam
=. Text
css ]
Method
"POST"