module Util.BufferedIOx
( BufferedIOx(..)
, runGetBuffered
, runPutBuffered
, module Util.Binary
) where
import Control.Monad.IO.Class
import Data.Binary
import qualified Data.ByteString as BS ( ByteString )
import qualified Data.ByteString.Lazy as LBS ( ByteString )
import Util.Binary
import Util.IOExtra
class BufferedIOx a where
readBuffered :: (MonadIO m) => a -> Int -> m BS.ByteString
unreadBuffered :: (MonadIO m) => a -> BS.ByteString -> m ()
writeBuffered :: (MonadIO m) => a -> LBS.ByteString -> m ()
closeBuffered :: (MonadIO m) => a -> m ()
runGetBuffered :: (MonadIO m, BufferedIOx s, Binary a, MonadMask m, MonadLogger m) => s -> m a
runGetBuffered s =
throwLeftM (runGetA (liftIO . readBuffered s) (liftIO . unreadBuffered s) get)
runPutBuffered :: (MonadIO m, BufferedIOx s, Binary a) => s -> a -> m ()
runPutBuffered s = runPutA (liftIO . writeBuffered s) . put