potoki-cereal 0.3.0.1 → 0.3.1
raw patch · 5 files changed
+51/−18 lines, 5 filesdep +profunctorsdep ~potokidep ~potoki-corePVP ok
version bump matches the API change (PVP)
Dependencies added: profunctors
Dependency ranges changed: potoki, potoki-core
API changes (from Hackage documentation)
+ Potoki.Cereal.Consume: getImplicitly :: Serialize a => Consume ByteString (Either Text a)
+ Potoki.Cereal.IO: deserializeFromFile :: Serialize a => FilePath -> IO (Either IOException (Either Text a))
+ Potoki.Cereal.IO: serializeToFile :: Serialize a => FilePath -> a -> IO (Either IOException ())
+ Potoki.Cereal.Produce: putImplicitly :: Serialize a => a -> Produce ByteString
Files
- library/Potoki/Cereal/Consume.hs +12/−9
- library/Potoki/Cereal/IO.hs +17/−0
- library/Potoki/Cereal/Prelude.hs +10/−0
- library/Potoki/Cereal/Produce.hs +7/−6
- potoki-cereal.cabal +5/−3
library/Potoki/Cereal/Consume.hs view
@@ -3,31 +3,34 @@ import Potoki.Cereal.Prelude import Potoki.Core.Consume-import Data.Serialize+import qualified Data.Serialize as Serialize import qualified Potoki.Core.Fetch as E import qualified Potoki.Cereal.Transform as D -get :: Get a -> Consume ByteString (Either Text a)+get :: Serialize.Get a -> Consume ByteString (Either Text 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))+ Serialize.Done result _ -> return (Right result)+ Serialize.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))+ Serialize.Partial newDecodeChunk -> loop newDecodeChunk+ Serialize.Done result _ -> return (Right result)+ Serialize.Fail error _ -> return (Left (fromString error)) in do fetch <- fetchIO case fetch of Nothing -> none Just res -> some res- in loop (runGetPartial get)- + in loop (Serialize.runGetPartial get)++getImplicitly :: Serialize a => Consume ByteString (Either Text a)+getImplicitly = get Serialize.get+ encodeToFile :: Serialize a => FilePath -> Consume a (Either IOException ()) encodeToFile = transform D.encode . writeBytesToFile
+ library/Potoki/Cereal/IO.hs view
@@ -0,0 +1,17 @@+module Potoki.Cereal.IO+where++import Potoki.Cereal.Prelude+import Potoki.Core.IO+import qualified Data.Serialize as Serialize+import qualified Potoki.Core.Produce as Produce+import qualified Potoki.Core.Consume as Consume+import qualified Potoki.Cereal.Consume as CerealConsume+import qualified Potoki.Cereal.Produce as CerealProduce+++deserializeFromFile :: Serialize a => FilePath -> IO (Either IOException (Either Text a))+deserializeFromFile file = produceAndConsume (Produce.fileBytes file) (right' (CerealConsume.getImplicitly))++serializeToFile :: Serialize a => FilePath -> a -> IO (Either IOException ())+serializeToFile file a = produceAndConsume (CerealProduce.putImplicitly a) (Consume.writeBytesToFile file)
library/Potoki/Cereal/Prelude.hs view
@@ -15,3 +15,13 @@ -- text ------------------------- import Data.Text as Exports (Text)++-- cereal+-------------------------+import Data.Serialize as Exports (Serialize)++-- profunctors+-------------------------+import Data.Profunctor.Unsafe as Exports+import Data.Profunctor.Choice as Exports+import Data.Profunctor.Strong as Exports
library/Potoki/Cereal/Produce.hs view
@@ -3,7 +3,6 @@ import Potoki.Cereal.Prelude import Potoki.Core.Produce-import Data.Serialize import qualified Data.ByteString.Lazy as A import qualified Data.ByteString.Lazy.Internal as A import qualified Potoki.Cereal.Transform as D@@ -11,14 +10,16 @@ import Potoki.Core.Transform -put :: Put -> Produce ByteString-put =- lazyByteString . runPutLazy+put :: C.Put -> Produce ByteString+put = lazyByteString . C.runPutLazy -fileDecoded :: C.Serialize a => FilePath -> Produce (Either IOException (Either Text a))+putImplicitly :: Serialize a => a -> Produce ByteString+putImplicitly = put . C.put++fileDecoded :: 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 :: Serialize a => FilePath -> Produce (Either IOException (Either Text a)) directoryDecoded dirPath = transform (right (produce fileDecoded) >>^ join)
potoki-cereal.cabal view
@@ -1,5 +1,5 @@ name: potoki-cereal-version: 0.3.0.1+version: 0.3.1 synopsis: Streaming serialization category: Potoki, Streaming homepage: https://github.com/metrix-ai/potoki-cereal@@ -20,6 +20,7 @@ Potoki.Cereal.Consume Potoki.Cereal.Produce Potoki.Cereal.Transform+ Potoki.Cereal.IO other-modules: Potoki.Cereal.Prelude build-depends:@@ -29,7 +30,8 @@ base-prelude >=1 && <2, bytestring >=0.10 && <0.11, cereal >=0.5 && <0.6,- potoki-core >=2.2.1 && <2.3,+ potoki-core >=2.3 && <2.4,+ profunctors >=5.2 && <6, text >=1 && <2 test-suite test@@ -40,7 +42,7 @@ main-is: Main.hs build-depends: directory >=1.2 && <2,- potoki >=2 && <2.1,+ potoki >=2.1 && <2.2, potoki-cereal, QuickCheck >=2.8.1 && <3, quickcheck-instances >=0.3.11 && <0.4,