hreq-client-0.1.0.0: src/Hreq/Client/Internal/Config.hs
-- | 'HttpConfig' is used in the 'Hreq.Client.Internal.HTTP.Hreq' Monad for HTTP client configuration
--
module Hreq.Client.Internal.Config
( -- * HttpConfig
HttpConfig (..)
-- * Status Range
, StatusRange (..)
-- * Helper function
, createDefConfig
) where
import Control.Concurrent.STM.TVar (TVar)
import Control.Retry (RetryPolicy, retryPolicyDefault)
import qualified Network.HTTP.Client as C
import qualified Network.HTTP.Client.TLS as TLS
import Hreq.Core.API (StatusCode)
import Hreq.Core.Client
-- | Valid Response status code range
data StatusRange = StatusRange
{ statusUpper :: StatusCode
, statusLower :: StatusCode
}
data HttpConfig = HttpConfig
{ httpBaseUrl :: BaseUrl
, httpStatuses :: StatusRange
, httpCookieJar :: Maybe (TVar C.CookieJar)
, httpRetryPolicy :: RetryPolicy
, httpManager :: C.Manager
}
-- | Function for creating a default 'HttpConfig'
createDefConfig :: BaseUrl -> IO HttpConfig
createDefConfig baseUrl@(BaseUrl scheme _ _ _) =
HttpConfig baseUrl (StatusRange 200 300) Nothing retryPolicyDefault <$> manager
where
manager :: IO C.Manager
manager = case scheme of
Http -> C.newManager C.defaultManagerSettings
Https -> C.newManager TLS.tlsManagerSettings