module Data.Serialize.Send (hSerialize, hDeserialize) where
import System.IO (hFlush, Handle)
import Data.Serialize
import Data.Serialize.Put
import Data.Serialize.Get
import Data.ByteString as B
import Control.Monad
hSerialize :: Serialize a => Handle -> a -> IO ()
hSerialize h x = hPut h $ runPut (putWord8 (fromIntegral (B.length a))) `append` a
where a = encode x
hDeserialize :: Serialize a => Handle -> IO a
hDeserialize h = do
(Right l) <- liftM (runGet getWord8) (hGet h 1)
(Right x) <- liftM decode (hGet h (fromIntegral l))
return x