{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Pinboard.ApiRequest
(
getPostsRecentRequest
, getPostsForDateRequest
, getPostsAllRequest
, getPostsDatesRequest
, getPostsMRUTimeRequest
, getSuggestedTagsRequest
, addPostRequest
, addPostRecRequest
, deletePostRequest
, getTagsRequest
, renameTagRequest
, deleteTagRequest
, getUserSecretRssKeyRequest
, getUserApiTokenRequest
, getNoteListRequest
, getNoteRequest
) where
import Pinboard.Types
(PinboardRequest(..), Param(..), ResultFormatType(..))
import Pinboard.Util ((</>))
import Data.Text (unwords)
import Data.Maybe (catMaybes)
import Pinboard.ApiTypes
import Control.Applicative
import Prelude hiding (unwords)
getPostsRecentRequest
:: ResultFormatType
-> Maybe [Tag]
-> Maybe Count
-> PinboardRequest
getPostsRecentRequest :: ResultFormatType -> Maybe [Tag] -> Maybe Count -> PinboardRequest
getPostsRecentRequest ResultFormatType
fmt Maybe [Tag]
tags Maybe Count
count = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"posts/recent"
params :: [Param]
params =
[Maybe Param] -> [Param]
forall a. [Maybe a] -> [a]
catMaybes [Param -> Maybe Param
forall a. a -> Maybe a
Just (ResultFormatType -> Param
Format ResultFormatType
fmt), Tag -> Param
Tag (Tag -> Param) -> ([Tag] -> Tag) -> [Tag] -> Param
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Tag
unwords ([Tag] -> Param) -> Maybe [Tag] -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Tag]
tags, Count -> Param
Count (Count -> Param) -> Maybe Count -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Count
count]
getPostsAllRequest
:: ResultFormatType
-> Maybe [Tag]
-> Maybe StartOffset
-> Maybe NumResults
-> Maybe FromDateTime
-> Maybe ToDateTime
-> Maybe Meta
-> PinboardRequest
getPostsAllRequest :: ResultFormatType
-> Maybe [Tag]
-> Maybe Count
-> Maybe Count
-> Maybe FromDateTime
-> Maybe FromDateTime
-> Maybe Count
-> PinboardRequest
getPostsAllRequest ResultFormatType
fmt Maybe [Tag]
tags Maybe Count
start Maybe Count
results Maybe FromDateTime
fromdt Maybe FromDateTime
todt Maybe Count
meta =
Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"posts/all"
params :: [Param]
params =
[Maybe Param] -> [Param]
forall a. [Maybe a] -> [a]
catMaybes
[ Param -> Maybe Param
forall a. a -> Maybe a
Just (ResultFormatType -> Param
Format ResultFormatType
fmt)
, Tag -> Param
Tag (Tag -> Param) -> ([Tag] -> Tag) -> [Tag] -> Param
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Tag
unwords ([Tag] -> Param) -> Maybe [Tag] -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Tag]
tags
, Count -> Param
Start (Count -> Param) -> Maybe Count -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Count
start
, Count -> Param
Results (Count -> Param) -> Maybe Count -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Count
results
, FromDateTime -> Param
FromDateTime (FromDateTime -> Param) -> Maybe FromDateTime -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe FromDateTime
fromdt
, FromDateTime -> Param
ToDateTime (FromDateTime -> Param) -> Maybe FromDateTime -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe FromDateTime
todt
, Count -> Param
Meta (Count -> Param) -> Maybe Count -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Count
meta
]
getPostsForDateRequest
:: ResultFormatType
-> Maybe [Tag]
-> Maybe Date
-> Maybe Url
-> PinboardRequest
getPostsForDateRequest :: ResultFormatType
-> Maybe [Tag] -> Maybe Date -> Maybe Tag -> PinboardRequest
getPostsForDateRequest ResultFormatType
fmt Maybe [Tag]
tags Maybe Date
date Maybe Tag
url = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"posts/get"
params :: [Param]
params =
[Maybe Param] -> [Param]
forall a. [Maybe a] -> [a]
catMaybes
[Param -> Maybe Param
forall a. a -> Maybe a
Just (ResultFormatType -> Param
Format ResultFormatType
fmt), Tag -> Param
Tag (Tag -> Param) -> ([Tag] -> Tag) -> [Tag] -> Param
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Tag
unwords ([Tag] -> Param) -> Maybe [Tag] -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Tag]
tags, Date -> Param
Date (Date -> Param) -> Maybe Date -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Date
date, Tag -> Param
Url (Tag -> Param) -> Maybe Tag -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Tag
url]
getPostsDatesRequest
:: ResultFormatType
-> Maybe [Tag]
-> PinboardRequest
getPostsDatesRequest :: ResultFormatType -> Maybe [Tag] -> PinboardRequest
getPostsDatesRequest ResultFormatType
fmt Maybe [Tag]
tags = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"posts/dates"
params :: [Param]
params = [Maybe Param] -> [Param]
forall a. [Maybe a] -> [a]
catMaybes [Param -> Maybe Param
forall a. a -> Maybe a
Just (ResultFormatType -> Param
Format ResultFormatType
fmt), Tag -> Param
Tag (Tag -> Param) -> ([Tag] -> Tag) -> [Tag] -> Param
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Tag
unwords ([Tag] -> Param) -> Maybe [Tag] -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Tag]
tags]
getPostsMRUTimeRequest :: ResultFormatType -> PinboardRequest
getPostsMRUTimeRequest :: ResultFormatType -> PinboardRequest
getPostsMRUTimeRequest ResultFormatType
fmt = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"posts/update"
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt]
getSuggestedTagsRequest :: ResultFormatType -> Url -> PinboardRequest
getSuggestedTagsRequest :: ResultFormatType -> Tag -> PinboardRequest
getSuggestedTagsRequest ResultFormatType
fmt Tag
url = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"posts/suggest"
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt, Tag -> Param
Url Tag
url]
deletePostRequest :: ResultFormatType -> Url -> PinboardRequest
deletePostRequest :: ResultFormatType -> Tag -> PinboardRequest
deletePostRequest ResultFormatType
fmt Tag
url = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"posts/delete"
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt, Tag -> Param
Url Tag
url]
addPostRequest
:: ResultFormatType
-> Url
-> Description
-> Maybe Extended
-> Maybe [Tag]
-> Maybe DateTime
-> Maybe Replace
-> Maybe Shared
-> Maybe ToRead
-> PinboardRequest
addPostRequest :: ResultFormatType
-> Tag
-> Tag
-> Maybe Tag
-> Maybe [Tag]
-> Maybe FromDateTime
-> Maybe Replace
-> Maybe Replace
-> Maybe Replace
-> PinboardRequest
addPostRequest ResultFormatType
fmt Tag
url Tag
descr Maybe Tag
ext Maybe [Tag]
tags Maybe FromDateTime
ctime Maybe Replace
repl Maybe Replace
shared Maybe Replace
toread =
Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"posts/add"
params :: [Param]
params =
[Maybe Param] -> [Param]
forall a. [Maybe a] -> [a]
catMaybes
[ Param -> Maybe Param
forall a. a -> Maybe a
Just (ResultFormatType -> Param
Format ResultFormatType
fmt)
, Param -> Maybe Param
forall a. a -> Maybe a
Just (Param -> Maybe Param) -> Param -> Maybe Param
forall a b. (a -> b) -> a -> b
$ Tag -> Param
Url Tag
url
, Param -> Maybe Param
forall a. a -> Maybe a
Just (Param -> Maybe Param) -> Param -> Maybe Param
forall a b. (a -> b) -> a -> b
$ Tag -> Param
Description Tag
descr
, Tag -> Param
Extended (Tag -> Param) -> Maybe Tag -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Tag
ext
, Tag -> Param
Tags (Tag -> Param) -> ([Tag] -> Tag) -> [Tag] -> Param
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Tag
unwords ([Tag] -> Param) -> Maybe [Tag] -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe [Tag]
tags
, FromDateTime -> Param
DateTime (FromDateTime -> Param) -> Maybe FromDateTime -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe FromDateTime
ctime
, Replace -> Param
Replace (Replace -> Param) -> Maybe Replace -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Replace
repl
, Replace -> Param
Shared (Replace -> Param) -> Maybe Replace -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Replace
shared
, Replace -> Param
ToRead (Replace -> Param) -> Maybe Replace -> Maybe Param
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Replace
toread
]
addPostRecRequest
:: ResultFormatType
-> Post
-> Replace
-> PinboardRequest
addPostRecRequest :: ResultFormatType -> Post -> Replace -> PinboardRequest
addPostRecRequest ResultFormatType
fmt Post {Replace
[Tag]
Tag
FromDateTime
postTags :: Post -> [Tag]
postToRead :: Post -> Replace
postShared :: Post -> Replace
postTime :: Post -> FromDateTime
postHash :: Post -> Tag
postMeta :: Post -> Tag
postExtended :: Post -> Tag
postDescription :: Post -> Tag
postHref :: Post -> Tag
postTags :: [Tag]
postToRead :: Replace
postShared :: Replace
postTime :: FromDateTime
postHash :: Tag
postMeta :: Tag
postExtended :: Tag
postDescription :: Tag
postHref :: Tag
..} Replace
replace =
ResultFormatType
-> Tag
-> Tag
-> Maybe Tag
-> Maybe [Tag]
-> Maybe FromDateTime
-> Maybe Replace
-> Maybe Replace
-> Maybe Replace
-> PinboardRequest
addPostRequest
ResultFormatType
fmt
Tag
postHref
Tag
postDescription
(Tag -> Maybe Tag
forall a. a -> Maybe a
Just Tag
postExtended)
([Tag] -> Maybe [Tag]
forall a. a -> Maybe a
Just [Tag]
postTags)
(FromDateTime -> Maybe FromDateTime
forall a. a -> Maybe a
Just FromDateTime
postTime)
(Replace -> Maybe Replace
forall a. a -> Maybe a
Just Replace
replace)
(Replace -> Maybe Replace
forall a. a -> Maybe a
Just Replace
postShared)
(Replace -> Maybe Replace
forall a. a -> Maybe a
Just Replace
postToRead)
getTagsRequest :: ResultFormatType -> PinboardRequest
getTagsRequest :: ResultFormatType -> PinboardRequest
getTagsRequest ResultFormatType
fmt = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"tags/get"
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt]
deleteTagRequest :: ResultFormatType -> Tag -> PinboardRequest
deleteTagRequest :: ResultFormatType -> Tag -> PinboardRequest
deleteTagRequest ResultFormatType
fmt Tag
tag = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"tags/delete"
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt, Tag -> Param
Tag Tag
tag]
renameTagRequest
:: ResultFormatType
-> Old
-> New
-> PinboardRequest
renameTagRequest :: ResultFormatType -> Tag -> Tag -> PinboardRequest
renameTagRequest ResultFormatType
fmt Tag
old Tag
new = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"tags/rename"
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt, Tag -> Param
Old Tag
old, Tag -> Param
New Tag
new]
getUserSecretRssKeyRequest :: ResultFormatType -> PinboardRequest
ResultFormatType
fmt = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"user/secret"
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt]
getUserApiTokenRequest :: ResultFormatType -> PinboardRequest
getUserApiTokenRequest :: ResultFormatType -> PinboardRequest
getUserApiTokenRequest ResultFormatType
fmt = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"user/api_token"
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt]
getNoteListRequest :: ResultFormatType -> PinboardRequest
getNoteListRequest :: ResultFormatType -> PinboardRequest
getNoteListRequest ResultFormatType
fmt = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"notes/list"
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt]
getNoteRequest :: ResultFormatType -> NoteId -> PinboardRequest
getNoteRequest :: ResultFormatType -> Tag -> PinboardRequest
getNoteRequest ResultFormatType
fmt Tag
noteid = Tag -> [Param] -> PinboardRequest
PinboardRequest Tag
path [Param]
params
where
path :: Tag
path = Tag
"notes" Tag -> Tag -> Tag
forall m. (Monoid m, IsString m) => m -> m -> m
</> Tag
noteid
params :: [Param]
params = [ResultFormatType -> Param
Format ResultFormatType
fmt]