network-api-support 0.3.0 → 0.3.1
raw patch · 3 files changed
+53/−8 lines, 3 filesdep ~aesondep ~http-clientdep ~http-client-tls
Dependency ranges changed: aeson, http-client, http-client-tls
Files
- network-api-support.cabal +4/−4
- src/Network/Api/Support/Core.hs +44/−4
- src/Network/Api/Support/Response.hs +5/−0
network-api-support.cabal view
@@ -1,5 +1,5 @@ Name: network-api-support-Version: 0.3.0+Version: 0.3.1 License: BSD3 License-File: LICENSE Author: Mark Hibberd <mark@hibberd.id.au>@@ -29,13 +29,13 @@ Library Build-Depends: base >= 3 && < 6- , aeson >= 0.5 && < 0.13+ , aeson >= 0.5 && < 1.1 , attoparsec >= 0.10 && < 0.14 , bytestring >= 0.9.1.5 && < 0.11 , case-insensitive >= 0.2 && < 1.3 , http-types >= 0.6 && < 0.10- , http-client >= 0.2.2.2 && < 0.5- , http-client-tls >= 0.2.1.1 && < 0.3+ , http-client >= 0.2.2.2 && < 0.6+ , http-client-tls >= 0.2.1.1 && < 0.4 , text >= 0.11 && < 1.3 , time == 1.* , tls >= 1.2.0 && < 1.4
src/Network/Api/Support/Core.hs view
@@ -1,7 +1,9 @@-{-# LANGUAGE OverloadedStrings, FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings, FlexibleContexts, CPP #-} module Network.Api.Support.Core ( runRequest , runRequest'+, runRequestWith+, runRequestWith' ) where import Network.Api.Support.Request@@ -28,6 +30,20 @@ runRequest settings stdmethod url transform = runRequest' settings url (transform <> setMethod (renderStdMethod stdmethod)) +-- | Run a request using the specified settings, method, url and request transformer.+--+-- Prefer this to runRequest as recreating the manager every time is very inefficient.+--+runRequestWith ::+ Manager+ -> StdMethod+ -> Text+ -> RequestTransformer+ -> Responder b+ -> IO b+runRequestWith manager stdmethod url transform =+ runRequestWith' manager url (transform <> setMethod (renderStdMethod stdmethod))+ -- | Run a request using the specified settings, url and request transformer. The method -- | can be set using the setMethod transformer. This is only useful if you require a -- | custom http method. Prefer runRequest where possible.@@ -37,9 +53,33 @@ -> RequestTransformer -> Responder b -> IO b-runRequest' settings url transform responder =- do url' <- parseRequest $ unpack url+runRequest' settings url transform responder = do+ manager <- newManager settings+ runRequestWith' manager url transform responder++-- | Run a request using the specified manager, url and request transformer. The method+-- can be set using the setMethod transformer. This is only useful if you require a+-- custom http method. Prefer runRequest where possible.+--+-- Prefer this to runRequest' as recreating the manager every time is very inefficient.+--+runRequestWith' ::+ Manager+ -> Text+ -> RequestTransformer+ -> Responder b+ -> IO b+runRequestWith' manager url transform responder =+-- To achieve backwards compatibility for http-client<0.4.30+-- parseURL needs to be used and the default `checkStatus` handler+-- overridden to disable the trapping of non-2xx HTTP response codes.+-- Thereafter `parseRequest` can be used which does not trap any+-- reponse codes (the required behaviour).+#if MIN_VERSION_http_client(0,4,30)+ do url'' <- parseRequest $ unpack url+#else+ do url' <- parseUrl $ unpack url let url'' = url' { checkStatus = const . const . const $ Nothing } -- handle all response codes.+#endif let req = appEndo transform url''- manager <- newManager settings liftM (responder req) $ httpLbs req manager
src/Network/Api/Support/Response.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE OverloadedStrings, FlexibleContexts, CPP #-} module Network.Api.Support.Response ( Responder , JsonResult (..)@@ -5,6 +6,10 @@ , parseBodyWith , basicResponder ) where++#if ! MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL