module Web.Pocket
( AuthRequest (..)
, makeAuthRequest
, AuthorizeRequest (..)
, makeAuthorizeRequest
, authRequest
, authorize
, add
, AddRequest (..)
, makeAddRequest
, AddResponse (..)
, send
, Action (..)
, SendRequest (..)
, SendResponse (..)
, get
, GetRequest (..)
, makeGetRequest
, GetResponse (..)
, run
, makeManager
)
where
import Data.Proxy (Proxy (..))
import Network.HTTP.Client hiding (Proxy)
import Network.HTTP.Client.TLS
import Web.Pocket.Add
import Web.Pocket.Auth
import Web.Pocket.Get
import Web.Pocket.Send
import Servant.API
import Servant.Client hiding (Client)
import Control.Monad.IO.Class
type API =
"v3"
:>
( "oauth"
:>
( "request"
:> ReqBody '[JSON] AuthRequest
:> Post '[JSON] AuthResponse
:<|>
"authorize"
:> ReqBody '[JSON] AuthorizeRequest
:> Post '[JSON] AuthorizeResponse
)
:<|>
"add"
:> ReqBody '[JSON] AddRequest
:> Post '[JSON] AddResponse
:<|>
"send"
:> ReqBody '[JSON] SendRequest
:> Post '[JSON] SendResponse
:<|>
"get"
:> ReqBody '[JSON] GetRequest
:> Post '[JSON] GetResponse
)
authRequest
:: AuthRequest
-> ClientM AuthResponse
authorize
:: AuthorizeRequest
-> ClientM AuthorizeResponse
add
:: AddRequest
-> ClientM AddResponse
send
:: SendRequest
-> ClientM SendResponse
get
:: GetRequest
-> ClientM GetResponse
(authRequest :<|> authorize) :<|> add :<|> send :<|> get =
client (Proxy :: Proxy API)
run
:: MonadIO m
=> Manager
-> ClientM a
-> m (Either ServantError a)
run manager =
let
baseUrl =
BaseUrl
Https
"getpocket.com"
443
""
in
liftIO . flip runClientM (ClientEnv manager baseUrl)
makeManager :: IO Manager
makeManager =
let
managerSettings =
tlsManagerSettings
{ managerModifyRequest = \r ->
return
r
{ requestHeaders =
[ ("Content-Type", "application/json")
, ("X-Accept", "application/json")
]
}
}
in
newManager managerSettings