module Network.Api.Support.Core (
runRequest
, runRequest'
) where
import Network.Api.Support.Request
import Network.Api.Support.Response
import Control.Failure
import Control.Monad
import Control.Monad.IO.Class
import Control.Monad.Trans.Resource
import Data.Text
import Data.Monoid
import Network.HTTP.Conduit
import Network.HTTP.Types
runRequest ::
(MonadIO m, MonadBaseControl IO m, MonadThrow m, MonadUnsafeIO m, Failure HttpException m) =>
ManagerSettings
-> StdMethod
-> Text
-> RequestTransformer
-> Responder b
-> m b
runRequest settings stdmethod url transform =
runRequest' settings url (transform <> setMethod (renderStdMethod stdmethod))
runRequest' ::
(MonadIO m, MonadBaseControl IO m, MonadThrow m, MonadUnsafeIO m, Failure HttpException m) =>
ManagerSettings
-> Text
-> RequestTransformer
-> Responder b
-> m b
runRequest' settings url transform responder =
do url' <- parseUrl $ unpack url
let url'' = url' { checkStatus = const . const . const $ Nothing }
let req = appEndo transform url''
liftM (responder req) . withManagerSettings settings . httpLbs $ req