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)