packages feed

launchdarkly-server-sdk-4.0.0: src/LaunchDarkly/Server/Config/HttpConfiguration.hs

module LaunchDarkly.Server.Config.HttpConfiguration
    ( HttpConfiguration (..)
    , prepareRequest
    )
where

import Control.Monad.Catch (MonadThrow)
import Network.HTTP.Client (Manager, Request, ResponseTimeout, parseRequest, requestHeaders, responseTimeout, setRequestIgnoreStatus)
import Network.HTTP.Types (Header)

data HttpConfiguration = HttpConfiguration
    { defaultRequestHeaders :: ![Header]
    , defaultRequestTimeout :: !ResponseTimeout
    , tlsManager :: !Manager
    }

prepareRequest :: (MonadThrow m) => HttpConfiguration -> String -> m Request
prepareRequest config uri = do
    baseReq <- parseRequest uri
    pure $
        setRequestIgnoreStatus $
            baseReq
                { requestHeaders = defaultRequestHeaders config <> requestHeaders baseReq
                , responseTimeout = defaultRequestTimeout config
                }