mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-05-02 15:41:38 +02:00
fix feed function from Handle
This commit is contained in:
parent
7b68b04efd
commit
674c26d9c7
@ -1,5 +1,5 @@
|
||||
Name: msgpack
|
||||
Version: 0.2.0
|
||||
Version: 0.2.1
|
||||
License: BSD3
|
||||
License-File: LICENSE
|
||||
Author: Hideyuki Tanaka
|
||||
|
@ -33,12 +33,16 @@ type Feeder = IO (Maybe ByteString)
|
||||
-- | Feeder from Handle
|
||||
feederFromHandle :: Handle -> IO Feeder
|
||||
feederFromHandle h = return $ do
|
||||
bs <- BS.hGet h bufSize
|
||||
bs <- BS.hGetNonBlocking h bufSize
|
||||
if BS.length bs > 0
|
||||
then return $ Just bs
|
||||
then do return $ Just bs
|
||||
else do
|
||||
hClose h
|
||||
return Nothing
|
||||
bs <- BS.hGet h 1
|
||||
if BS.length bs > 0
|
||||
then do return $ Just bs
|
||||
else do
|
||||
hClose h
|
||||
return Nothing
|
||||
where
|
||||
bufSize = 4096
|
||||
|
||||
|
@ -115,19 +115,22 @@ instance MonadIO m => MonadIO (UnpackerT m) where
|
||||
|
||||
instance MonadIO m => MonadUnpacker (UnpackerT m) where
|
||||
get = UnpackerT $ \up feed -> liftIO $ do
|
||||
resp <- unpackerExecute up
|
||||
guard $ resp>=0
|
||||
when (resp==0) $ do
|
||||
Just bs <- feed
|
||||
unpackerFeed up bs
|
||||
resp2 <- unpackerExecute up
|
||||
guard $ resp2==1
|
||||
executeOne up feed
|
||||
obj <- unpackerData up
|
||||
freeZone =<< unpackerReleaseZone up
|
||||
unpackerReset up
|
||||
let Right r = fromObject obj
|
||||
return r
|
||||
|
||||
where
|
||||
executeOne up feed = do
|
||||
resp <- unpackerExecute up
|
||||
guard $ resp>=0
|
||||
when (resp==0) $ do
|
||||
Just bs <- feed
|
||||
unpackerFeed up bs
|
||||
executeOne up feed
|
||||
|
||||
-- | Execute deserializer using given feeder.
|
||||
unpackFrom :: MonadIO m => Feeder -> UnpackerT m r -> m r
|
||||
unpackFrom f m = do
|
||||
|
Loading…
x
Reference in New Issue
Block a user