packages feed

streaming-wai 0.1.0 → 0.1.1

raw patch · 2 files changed

+23/−9 lines, 2 files

Files

src/Network/Wai/Streaming.hs view
@@ -2,6 +2,7 @@  module Network.Wai.Streaming ( Flush(..)                              -- * ByteStrings+                             , streamingRequest                              , streamingResponse                              , streamingBody @@ -13,17 +14,30 @@  import Streaming import Network.Wai+import Control.Monad (unless) import Data.ByteString (ByteString) import Data.ByteString.Builder (byteString, Builder) import Network.HTTP.Types.Header import Network.HTTP.Types.Status import Streaming.Prelude as S+import Data.ByteString as BS -data Flush a = Chunk !a+data Flush a = Chunk a              | Flush              deriving (Show, Functor) +-- | Stream the 'Request' body+streamingRequest :: MonadIO m => Request -> Stream (Of ByteString) m ()+streamingRequest req = loop+  where+    go = liftIO (requestBody req)+    loop = do+      bs <- go+      unless (BS.null bs) $ do+        yield bs+        loop + -- | Stream strict 'ByteString's into a 'Response' streamingResponse :: Stream (Of ByteString) IO r                   -> Status@@ -35,11 +49,11 @@  -- | Stream strict 'ByteString's into a 'StreamingBody' streamingBody :: Stream (Of ByteString) IO r -> StreamingBody-streamingBody src write flush = S.foldM_ writer flush return src+streamingBody src write flush = void $ effects $ for src writer   where-    writer _ a = do-      write (byteString a)-      flush+    writer a = do+      lift (write (byteString a))+      lift flush  -- $flush --@@ -56,7 +70,7 @@  -- | Stream 'Builder's into a 'StreamingBody' streamingBodyF :: Stream (Of (Flush Builder)) IO r -> StreamingBody-streamingBodyF src write flush = S.foldM_ writer flush return src+streamingBodyF src write flush = void $ effects $ for src writer   where-    writer _ (Chunk a) = write a-    writer _ Flush     = flush+    writer (Chunk a) = lift (write a)+    writer Flush     = lift flush
streaming-wai.cabal view
@@ -1,5 +1,5 @@ name:          streaming-wai-version:       0.1.0+version:       0.1.1 synopsis:      Streaming Wai utilities description:   Please see README.md homepage:      http://github.com/jb55/streaming-wai