{-# LANGUAGE NoImplicitPrelude #-}
module Network.HTTP.Client.Context
(
modifyRequestsWithContext
, modifyResponsesWithContext
) where
import Network.HTTP.Client (BodyReader, ManagerSettings, Request, Response)
import Prelude
import qualified Context
import qualified Network.HTTP.Client as HTTP.Client
modifyRequestsWithContext
:: Context.Store ctx
-> (Maybe ctx -> Request -> IO Request)
-> ManagerSettings
-> ManagerSettings
modifyRequestsWithContext :: forall ctx.
Store ctx
-> (Maybe ctx -> Request -> IO Request)
-> ManagerSettings
-> ManagerSettings
modifyRequestsWithContext Store ctx
contextStore Maybe ctx -> Request -> IO Request
updateRequest ManagerSettings
managerSettings =
ManagerSettings
managerSettings
{ managerModifyRequest :: Request -> IO Request
HTTP.Client.managerModifyRequest = \Request
initRequest -> do
Request
request <- Request -> IO Request
originalRequestModifier Request
initRequest
Maybe ctx
mContext <- forall (m :: * -> *) ctx. MonadIO m => Store ctx -> m (Maybe ctx)
Context.mineMay Store ctx
contextStore
Maybe ctx -> Request -> IO Request
updateRequest Maybe ctx
mContext Request
request
}
where
originalRequestModifier :: Request -> IO Request
originalRequestModifier = ManagerSettings -> Request -> IO Request
HTTP.Client.managerModifyRequest ManagerSettings
managerSettings
modifyResponsesWithContext
:: Context.Store ctx
-> (Maybe ctx -> Response BodyReader -> IO (Response BodyReader))
-> ManagerSettings
-> ManagerSettings
modifyResponsesWithContext :: forall ctx.
Store ctx
-> (Maybe ctx -> Response BodyReader -> IO (Response BodyReader))
-> ManagerSettings
-> ManagerSettings
modifyResponsesWithContext Store ctx
contextStore Maybe ctx -> Response BodyReader -> IO (Response BodyReader)
updateResponse ManagerSettings
managerSettings =
ManagerSettings
managerSettings
{ managerModifyResponse :: Response BodyReader -> IO (Response BodyReader)
HTTP.Client.managerModifyResponse = \Response BodyReader
initResponse -> do
Response BodyReader
response <- Response BodyReader -> IO (Response BodyReader)
originalResponseModifier Response BodyReader
initResponse
Maybe ctx
mContext <- forall (m :: * -> *) ctx. MonadIO m => Store ctx -> m (Maybe ctx)
Context.mineMay Store ctx
contextStore
Maybe ctx -> Response BodyReader -> IO (Response BodyReader)
updateResponse Maybe ctx
mContext Response BodyReader
response
}
where
originalResponseModifier :: Response BodyReader -> IO (Response BodyReader)
originalResponseModifier = ManagerSettings -> Response BodyReader -> IO (Response BodyReader)
HTTP.Client.managerModifyResponse ManagerSettings
managerSettings