packages feed

http-enumerator 0.3.0 → 0.3.1

raw patch · 3 files changed

+38/−17 lines, 3 filesdep +blaze-builder-enumeratorPVP ok

version bump matches the API change (PVP)

Dependencies added: blaze-builder-enumerator

API changes (from Hackage documentation)

+ Network.HTTP.Enumerator: streamingHttp :: MonadIO m => Request -> (Int64, Enumerator Builder m ()) -> (Status -> ResponseHeaders -> Iteratee ByteString m a) -> Iteratee ByteString m a

Files

Network/HTTP/Enumerator.hs view
@@ -57,6 +57,7 @@     , httpLbs     , httpLbsRedirect     , http+    , streamingHttp     , httpRedirect       -- * Datatypes     , Request (..)@@ -89,7 +90,7 @@ import Data.Enumerator     ( Iteratee (..), Stream (..), catchError, throwError, consume     , yield, Step (..), Enumeratee, ($$), joinI, Enumerator, run_-    , continue, enumList, returnI+    , continue, returnI, (>==>)     ) import qualified Data.Enumerator as E import Network.HTTP.Enumerator.HttpParser@@ -107,9 +108,11 @@ import Data.ByteString.Lazy.Internal (defaultChunkSize) import Codec.Binary.UTF8.String (encodeString) import qualified Blaze.ByteString.Builder as Blaze+import Blaze.ByteString.Builder.Enumerator (builderToByteString) import qualified Blaze.ByteString.Builder.Internal.Write as Blaze import Data.Monoid (Monoid (..)) import qualified Network.Wai as W+import Data.Int (Int64)  -- | The OpenSSL library requires some initialization of variables to be used, -- and therefore you must call 'withOpenSSL' before using any of its functions.@@ -139,11 +142,11 @@ withSocketConn :: MonadIO m                => String                -> Int-               -> Enumerator S.ByteString m ()+               -> Enumerator Blaze.Builder m ()                -> Enumerator S.ByteString m a withSocketConn host' port' req step0 = do     sock <- liftIO $ getSocket host' port'-    lift $ run_ $ req $$ writeToIter $ B.sendAll sock+    lift $ run_ $ req $$ joinI $ builderToByteString $$ writeToIter $ B.sendAll sock     a <- readToEnum (B.recv sock defaultChunkSize) step0     liftIO $ NS.sClose sock     return a@@ -172,7 +175,7 @@ withSslConn :: MonadIO m             => String -- ^ host             -> Int -- ^ port-            -> Enumerator S.ByteString m () -- ^ request+            -> Enumerator Blaze.Builder m () -- ^ request             -> Enumerator S.ByteString m a -- ^ response withSslConn host' port' req step0 = do @@ -238,22 +241,38 @@      => Request      -> (W.Status -> W.ResponseHeaders -> Iteratee S.ByteString m a)      -> Iteratee S.ByteString m a-http Request {..} bodyStep = do+http req bodyStep =+    streamingHttp req reqBody bodyStep+  where+    reqBody = (L.length $ requestBody req, toEnum $ requestBody req)+    toEnum = enumSingle . Blaze.fromLazyByteString++enumSingle x (Continue k) = k $ Chunks [x]+enumSingle _ step = returnI step++-- | Same as 'http', but allows you to specify a ('Int64', 'Enumerator') pair+-- for the request body. Note: this function ignores the 'requestBody' record+-- in the 'Request' argument.+streamingHttp+     :: MonadIO m+     => Request+     -> (Int64, Enumerator Blaze.Builder m ())+     -> (W.Status -> W.ResponseHeaders -> Iteratee S.ByteString m a)+     -> Iteratee S.ByteString m a+streamingHttp Request {..} (contentLength, bodyEnum) bodyStep = do     let h' = S8.unpack host     let withConn = if secure then withSslConn else withSocketConn-    withConn h' port req $$ go+    withConn h' port requestEnum $$ go   where-    req = enumList 8 $ L.toChunks request     hh         | port == 80 && not secure = host         | port == 443 && secure = host         | otherwise = host `S.append` S8.pack (':' : show port)     headers' = ("Host", hh)-                 : ("Content-Length", S8.pack $ show-                                              $ L.length requestBody)+                 : ("Content-Length", S8.pack $ show contentLength)                  : ("Accept-Encoding", "gzip")                  : requestHeaders-    request = Blaze.toLazyByteString $ mconcat+    requestHeaders' = mconcat             [ Blaze.fromByteString method             , Blaze.fromByteString " "             , Blaze.fromByteString $@@ -269,9 +288,8 @@                 , Blaze.fromByteString "\r\n"                 ]             , Blaze.fromByteString "\r\n"-            , mconcat $ map Blaze.fromByteString-                      $ L.toChunks requestBody             ]+    requestEnum = enumSingle requestHeaders' >==> bodyEnum     go = do         ((_, sc, sm), hs) <- catchParser "HTTP headers" iterHeaders         let s = W.Status sc sm
Network/TLS/Client/Enumerator.hs view
@@ -6,9 +6,11 @@ import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as L import qualified Data.Enumerator as E-import Data.Enumerator (($$))+import Data.Enumerator (($$), joinI) import qualified Control.Monad.IO.Class as Trans import Control.Monad.Trans.Class (lift)+import Blaze.ByteString.Builder (Builder)+import Blaze.ByteString.Builder.Enumerator (builderToByteString)  import Network.TLS.Client import Network.TLS.SRandom@@ -30,7 +32,7 @@ clientEnumSimple     :: Trans.MonadIO m     => Handle-    -> E.Enumerator B.ByteString m () -- ^ request+    -> E.Enumerator Builder m () -- ^ request     -> E.Enumerator B.ByteString m a -- ^ response clientEnumSimple h req step = do     let clientstate = TLSClientParams@@ -56,12 +58,12 @@  clientEnum :: Trans.MonadIO m            => TLSClientParams -> SRandomGen -> Handle-           -> E.Enumerator B.ByteString m ()+           -> E.Enumerator Builder m ()            -> E.Enumerator B.ByteString m a clientEnum tcp srg h req step0 = do     istate <- Trans.liftIO $ newIState tcp srg     tlsHelper istate $ connect h-    lift $ E.run_ $ req $$ iter istate+    lift $ E.run_ $ req $$ joinI $ builderToByteString $$ iter istate     res <- enum istate step0     tlsHelper istate $ close h     return res
http-enumerator.cabal view
@@ -1,5 +1,5 @@ name:            http-enumerator-version:         0.3.0+version:         0.3.1 license:         BSD3 license-file:    LICENSE author:          Michael Snoyman <michael@snoyman.com>@@ -33,6 +33,7 @@                  , blaze-builder         >= 0.2.1   && < 0.3                  , zlib-bindings         >= 0.0.0   && < 0.1                  , wai                   >= 0.3     && < 0.4+                 , blaze-builder-enumerator >= 0.2  && < 0.3     if flag(network-bytestring)         build-depends: network               >= 2.2.1   && < 2.2.3                      , network-bytestring    >= 0.1.3   && < 0.1.4