blaze-builder-enumerator 0.2.0.6 → 0.2.0.7
raw patch · 2 files changed
+74/−3 lines, 2 filesdep +streaming-commonsdep ~blaze-builderPVP ok
version bump matches the API change (PVP)
Dependencies added: streaming-commons
Dependency ranges changed: blaze-builder
API changes (from Hackage documentation)
Files
Blaze/ByteString/Builder/Enumerator.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE BangPatterns, CPP #-} ------------------------------------------------------------------------------ -- | -- Module : Blaze.ByteString.Builder.Enumerator@@ -55,10 +55,21 @@ import Control.Monad.IO.Class +#if MIN_VERSION_blaze_builder(0,4,0)++import Blaze.ByteString.Builder+import Data.ByteString.Builder.Extra+import Data.Streaming.ByteString.Builder.Buffer+import Foreign.Ptr++#else /* !MIN_VERSION_blaze_builder(0,4,0) */+ import Blaze.ByteString.Builder.Internal import Blaze.ByteString.Builder.Internal.Types import Blaze.ByteString.Builder.Internal.Buffer +#endif /* !MIN_VERSION_blaze_builder(0,4,0) */+ ------------------------------------------------------------------------------ -- Enumeratees for converting builders incrementally to bytestrings ------------------------------------------------------------------------------@@ -70,7 +81,11 @@ -- bytestrings. builderToByteString :: MonadIO m => Enumeratee Builder S.ByteString m a builderToByteString = +#if MIN_VERSION_blaze_builder(0,4,0)+ builderToByteStringWith (allNewBuffersStrategy defaultChunkSize)+#else /* !MIN_VERSION_blaze_builder(0,4,0) */ builderToByteStringWith (allNewBuffersStrategy defaultBufferSize)+#endif /* !MIN_VERSION_blaze_builder(0,4,0) */ -- | Incrementally execute builders on the given buffer and pass on the filled -- chunks as bytestrings. Note that, if the given buffer is too small for the@@ -96,6 +111,9 @@ builderToByteStringWith :: MonadIO m => BufferAllocStrategy -> Enumeratee Builder S.ByteString m a++#if MIN_VERSION_blaze_builder(0,4,0)+ builderToByteStringWith (ioBuf0, nextBuf) step0 = do loop ioBuf0 step0 where@@ -111,6 +129,57 @@ Nothing -> yield (Continue k) EOF Just bs -> k (Chunks [bs]) >>== flip yield EOF step ioBuf k0 (Chunks xs) =+ go (runBuilder (mconcat xs)) ioBuf k0++ go bWriter ioBuf k = do+ !buf@(Buffer _ _ op ope) <- liftIO ioBuf+ (bytes, next) <- liftIO (bWriter op (ope `minusPtr` op))+ let op' = op `plusPtr` bytes+ case next of+ Done -> continue $ step (return (updateEndOfSlice buf op')) k+ More minSize bWriter' -> do+ let buf' = updateEndOfSlice buf op'+ {-# INLINE cont #-}+ cont k' = do+ -- sequencing the computation of the next buffer+ -- construction here ensures that the reference to the+ -- foreign pointer `fp` is lost as soon as possible.+ ioBuf' <- liftIO $ nextBuf minSize buf'+ go bWriter' ioBuf' k'+ case unsafeFreezeNonEmptyBuffer buf' of+ Nothing -> cont k+ Just bs ->+ k (Chunks [bs]) >>== \step' ->+ case step' of+ Continue k' -> cont k'+ _ -> return step' -- FIXME: Check that we don't loose any input here!+ Chunk bs bWriter' -> do+ let buf' = updateEndOfSlice buf op'+ bsk = maybe id (:) $ unsafeFreezeNonEmptyBuffer buf'+ k (Chunks (bsk [bs])) >>== \step' ->+ case step' of+ Continue k' -> do+ ioBuf' <- liftIO $ nextBuf 1 buf'+ go bWriter' ioBuf' k'+ _ -> return step' -- FIXME: Check that we don't loose any input here!++#else /* !MIN_VERSION_blaze_builder(0,4,0) */++builderToByteStringWith (ioBuf0, nextBuf) step0 = do+ loop ioBuf0 step0+ where+ loop ioBuf = checkDone $ continue . step ioBuf++ step :: MonadIO m => IO (Buffer)+ -> (Stream S.ByteString -> Iteratee S.ByteString m b)+ -> Stream Builder+ -> Iteratee Builder m (Step S.ByteString m b)+ step ioBuf k EOF = do+ buf <- liftIO ioBuf+ case unsafeFreezeNonEmptyBuffer buf of+ Nothing -> yield (Continue k) EOF+ Just bs -> k (Chunks [bs]) >>== flip yield EOF+ step ioBuf k0 (Chunks xs) = go (unBuilder (mconcat xs) (buildStep finalStep)) ioBuf k0 where finalStep !(BufRange pf _) = return $ Done pf ()@@ -146,6 +215,7 @@ go bStep' ioBuf' k' _ -> return step' -- FIXME: Check that we don't loose any input here! +#endif /* !MIN_VERSION_blaze_builder(0,4,0) */ {- Old testing code:
blaze-builder-enumerator.cabal view
@@ -1,5 +1,5 @@ Name : blaze-builder-enumerator-Version : 0.2.0.6+Version : 0.2.0.7 Synopsis : Enumeratees for the incremental conversion of builders to bytestrings. Description :@@ -36,9 +36,10 @@ GHC-options: -Wall Build-depends: base >= 4 && < 5- , blaze-builder >= 0.2.1.4 && < 0.4+ , blaze-builder >= 0.2.1.4 && < 0.5 , bytestring >= 0.9 && < 0.11 , enumerator >= 0.4.3.1 && < 0.5+ , streaming-commons >= 0.1.10 && < 0.2 , transformers >= 0.2 && < 0.5 Exposed-modules: Blaze.ByteString.Builder.Enumerator