{-# 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
{ HTTP.Client.managerModifyRequest = \Request
initRequest -> do
request <- Request -> IO Request
originalRequestModifier Request
initRequest
mContext <- Context.mineMay contextStore
updateRequest mContext 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
{ HTTP.Client.managerModifyResponse = \Response BodyReader
initResponse -> do
response <- Response BodyReader -> IO (Response BodyReader)
originalResponseModifier Response BodyReader
initResponse
mContext <- Context.mineMay contextStore
updateResponse mContext response
}
where
originalResponseModifier :: Response BodyReader -> IO (Response BodyReader)
originalResponseModifier = ManagerSettings -> Response BodyReader -> IO (Response BodyReader)
HTTP.Client.managerModifyResponse ManagerSettings
managerSettings