potoki-cereal 0.1.6 → 0.2
raw patch · 4 files changed
+28/−103 lines, 4 filesdep −potokidep ~potoki-core
Dependencies removed: potoki
Dependency ranges changed: potoki-core
Files
- library/Potoki/Cereal/Consume.hs +19/−9
- library/Potoki/Cereal/Produce.hs +7/−16
- library/Potoki/Cereal/Transform.hs +0/−74
- potoki-cereal.cabal +2/−4
library/Potoki/Cereal/Consume.hs view
@@ -1,15 +1,25 @@ module Potoki.Cereal.Consume-(- encodeToFile,-) where import Potoki.Cereal.Prelude-import Potoki.Consume-import Potoki.Core.Transform-import qualified Potoki.Cereal.Transform as D-import qualified Data.Serialize as C+import Potoki.Core.Consume+import Data.Serialize+import qualified Potoki.Core.Fetch as E -encodeToFile :: C.Serialize a => FilePath -> Consume a (Either IOException ())-encodeToFile = transform D.encode . writeBytesToFile+get :: Get a -> Consume ByteString (Either String a)+get get =+ Consume $ \ (E.Fetch fetchIO) ->+ let+ loop decodeChunk =+ let+ none = case decodeChunk "" of+ Done result _ -> return (Right result)+ Fail error _ -> return (Left (fromString error))+ _ -> return (Left "Not enough data")+ some chunk = case decodeChunk chunk of+ Partial newDecodeChunk -> loop newDecodeChunk+ Done result _ -> return (Right result)+ Fail error _ -> return (Left (fromString error))+ in join (fetchIO none some)+ in loop (runGetPartial get)
library/Potoki/Cereal/Produce.hs view
@@ -1,22 +1,13 @@ module Potoki.Cereal.Produce-(- fileDecoded,- directoryDecoded,-) where import Potoki.Cereal.Prelude-import Potoki.Produce-import Potoki.Core.Transform-import qualified Potoki.Cereal.Transform as D-import qualified Data.Serialize as C+import Potoki.Core.Produce+import Data.Serialize+import qualified Data.ByteString.Lazy as A+import qualified Data.ByteString.Lazy.Internal as A -fileDecoded :: C.Serialize a => FilePath -> Produce (Either IOException (Either Text a))-fileDecoded = transform (right D.decode) . fileBytes--directoryDecoded :: C.Serialize a => FilePath -> Produce (Either IOException (Either Text a))-directoryDecoded dirPath =- transform- (right (produce fileDecoded) >>^ join)- (directoryContents dirPath)+put :: Put -> Produce ByteString+put =+ lazyByteString . runPutLazy
− library/Potoki/Cereal/Transform.hs
@@ -1,74 +0,0 @@-module Potoki.Cereal.Transform-(- encode,- decode,-)-where--import Potoki.Cereal.Prelude-import Potoki.Core.Transform-import qualified Potoki.Core.Fetch as A-import qualified Data.Serialize as C---encode :: C.Serialize element => Transform element ByteString-encode =- arr C.encode--decode :: C.Serialize element => Transform ByteString (Either Text element)-decode =- runPartialDecoder (C.runGetPartial C.get)--{-# INLINE runPartialDecoder #-}-runPartialDecoder :: forall decoded. (ByteString -> C.Result decoded) -> Transform ByteString (Either Text decoded)-runPartialDecoder inputToResult =- Transform $ \ inputFetch ->- do- unconsumedRef <- newIORef mempty- finishedRef <- newIORef False- return (A.Fetch (fetchParsed inputFetch finishedRef unconsumedRef))- where- fetchParsed :: A.Fetch ByteString -> IORef Bool -> IORef ByteString -> forall x. x -> (Either Text decoded -> x) -> IO x- fetchParsed (A.Fetch inputFetchIO) finishedRef unconsumedRef nil just =- do- finished <- readIORef finishedRef- if finished- then return nil- else do- unconsumed <- readIORef unconsumedRef- if unconsumed == mempty- then- join $ inputFetchIO- (return nil)- (\ input -> do- if input == mempty- then return nil- else matchResult (inputToResult input))- else do- writeIORef unconsumedRef mempty- matchResult (inputToResult unconsumed)- where- matchResult =- \ case- C.Partial inputToResult ->- consume inputToResult- C.Done decoded unconsumed ->- do- writeIORef unconsumedRef unconsumed- return (just (Right decoded))- C.Fail message unconsumed ->- do- writeIORef unconsumedRef unconsumed- writeIORef finishedRef True- return (just (Left resultMessage))- where- resultMessage =- fromString message- consume inputToResult =- join $ inputFetchIO- (do- writeIORef finishedRef True- matchResult (inputToResult mempty))- (\ input -> do- when (input == mempty) (writeIORef finishedRef True)- matchResult (inputToResult input))
potoki-cereal.cabal view
@@ -1,7 +1,7 @@ name: potoki-cereal version:- 0.1.6+ 0.2 synopsis: Streaming serialization category:@@ -41,7 +41,6 @@ exposed-modules: Potoki.Cereal.Consume Potoki.Cereal.Produce- Potoki.Cereal.Transform other-modules: Potoki.Cereal.Prelude build-depends:@@ -49,6 +48,5 @@ base-prelude >=1 && <2, bytestring >=0.10 && <0.11, cereal >=0.5 && <0.6,- potoki >=0.11 && <0.12,- potoki-core >=1.5 && <1.6,+ potoki-core >=1.5.3 && <1.6, text >=1 && <2