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