binary-conduit 1.1.1 → 1.2
raw patch · 2 files changed
+34/−11 lines, 2 filesdep +vectorPVP ok
version bump matches the API change (PVP)
Dependencies added: vector
API changes (from Hackage documentation)
+ Data.Conduit.Serialization.Binary: conduitPutLBS :: MonadThrow m => Conduit Put m ByteString
+ Data.Conduit.Serialization.Binary: conduitPutList :: MonadThrow m => Conduit Put m [ByteString]
+ Data.Conduit.Serialization.Binary: conduitPutMany :: MonadThrow m => Conduit Put m (Vector ByteString)
Files
Data/Conduit/Serialization/Binary.hs view
@@ -1,10 +1,14 @@ {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE Rank2Types #-}+{-# LANGUAGE CPP #-} module Data.Conduit.Serialization.Binary ( conduitDecode , conduitEncode , conduitGet , conduitPut+ , conduitPutList+ , conduitPutLBS+ , conduitPutMany , sourcePut , sinkGet , ParseError(..)@@ -15,13 +19,13 @@ import Data.Binary import Data.Binary.Get import Data.Binary.Put--- import Data.ByteString (ByteString) import Data.ByteString as BS import qualified Data.ByteString.Lazy as LBS import Data.Conduit import qualified Data.Conduit.List as CL import Data.Typeable+import qualified Data.Vector as V data ParseError = ParseError@@ -52,7 +56,6 @@ case mx of Nothing -> return () Just x -> go (runGetIncremental g `pushChunk` x)- conduit p = await >>= go . flip (maybe pushEndOfInput (flip pushChunk)) p go (Done bs _ v) = do yield v if BS.null bs then start@@ -60,15 +63,34 @@ go (Fail u o e) = monadThrow (ParseError u o e) go (Partial n) = await >>= (go . n) +-- \o/+#define conduitPutGeneric(name,yi) \+name = conduit \+ where \+ conduit = do {mx <- await;\+ case mx of;\+ Nothing -> return ();\+ Just x -> do { yi ; conduit}}+ -- | Runs putter repeatedly on a input stream. conduitPut :: MonadThrow m => Conduit Put m ByteString-conduitPut = conduit- where- conduit = do mx <- await- case mx of- Nothing -> return ()- Just x -> do sourcePut x $$ CL.mapM_ yield- conduit+conduitPutGeneric(conduitPut, (sourcePut x $$ CL.mapM_ yield))++-- | Runs putter repeatedly on a input stream.+-- Returns a lazy butestring so it's possible to use vectorized+-- IO on the result either by calling' LBS.toChunks' or by +-- calling 'Network.Socket.ByteString.Lazy.send'.+conduitPutLBS :: MonadThrow m => Conduit Put m LBS.ByteString+conduitPutGeneric(conduitPutLBS, yield (runPut x))++-- | Vectorized variant of 'conduitPut' returning list contains+-- all chunks from one element representation+conduitPutList :: MonadThrow m => Conduit Put m [ByteString]+conduitPutGeneric(conduitPutList, yield (LBS.toChunks (runPut x)))++-- | Vectorized variant of 'conduitPut'.+conduitPutMany :: MonadThrow m => Conduit Put m (V.Vector ByteString)+conduitPutGeneric(conduitPutMany, yield (V.fromList (LBS.toChunks (runPut x)))) -- | Create stream of strict bytestrings from 'Put' value. sourcePut :: (MonadThrow m) => Put -> Producer m ByteString
binary-conduit.cabal view
@@ -1,5 +1,5 @@ name: binary-conduit-version: 1.1.1+version: 1.2 synopsis: data serialization/deserialization conduit library description: The binary-conduit package. Allow binary serialization using iterative conduit interface.@@ -21,7 +21,8 @@ build-depends: base >=4 && <5, conduit >= 1.0 && < 1.1, bytestring >= 0.9 && < 10.3,- binary >= 0.6 && < 0.8+ binary >= 0.6 && < 0.8,+ vector >= 0.10 ghc-options: -Wall test-suite test-binary-conduit