module Network.HTTP.Dispatch.Request
( HTTPRequest(..)
, HTTPResponse(..)
, HTTPRequestMethod(..)
, runRequest
, rawRequest
, getRequest
, postRequest
, putRequest
, patchRequest
, deleteRequest
, headRequest
, optionsRequest
, withQueryParams
) where
import qualified Data.ByteString as S
import Data.Monoid (mconcat)
import Network.HTTP.Dispatch.Internal.Request
import Network.HTTP.Dispatch.Types
import Prelude hiding (head)
import Data.List (intersperse)
run :: HTTPRequest -> IO HTTPResponse
run req = runRequest req
rawRequest :: HTTPRequestMethod -> String -> [Header] -> Maybe S.ByteString -> HTTPRequest
rawRequest method url headers body = HTTPRequest method url headers body
getRequest :: String -> [Header] -> HTTPRequest
getRequest url headers = rawRequest GET url headers Nothing
postRequest :: Url -> Headers -> Maybe S.ByteString -> HTTPRequest
postRequest url headers body = rawRequest POST url headers body
putRequest :: Url -> Headers -> Maybe S.ByteString -> HTTPRequest
putRequest url headers body = rawRequest PUT url headers body
patchRequest :: Url -> Headers -> Maybe S.ByteString -> HTTPRequest
patchRequest url headers body = HTTPRequest PATCH url headers body
deleteRequest :: Url -> Headers -> HTTPRequest
deleteRequest url headers = rawRequest DELETE url headers Nothing
optionsRequest :: Url -> [Header] -> HTTPRequest
optionsRequest url headers = rawRequest OPTIONS url headers Nothing
headRequest :: Url -> [Header] -> HTTPRequest
headRequest url headers = rawRequest HEAD url headers Nothing
withQueryParams :: HTTPRequest -> [(String, String)] -> HTTPRequest
withQueryParams req params = req { reqUrl = u ++ p }
where u = reqUrl req
p = compileParams params
compileParams params = "?" ++ qParams :: String
where parts = map (\(k,v) -> mconcat [k, "=", v]) params
qParams = mconcat (intersperse "&" parts)