packages feed

msgpack 0.2.0 → 0.2.2

raw patch · 6 files changed

+41/−30 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.MessagePack.Class: instance [incoherent] OBJECT ()

Files

msgpack.cabal view
@@ -1,5 +1,5 @@ Name:                msgpack-Version:             0.2.0+Version:             0.2.2 License:             BSD3 License-File:        LICENSE Author:              Hideyuki Tanaka
src/Data/MessagePack/Base.hsc view
@@ -297,7 +297,7 @@ -- | Pack a single byte stream. It calls 'packRAW' and 'packRAWBody'. packRAW' :: Packer -> ByteString -> IO Int packRAW' pc bs = do-  packRAW pc (BS.length bs)+  _ <- packRAW pc (BS.length bs)   packRAWBody pc bs  type Unpacker = ForeignPtr ()@@ -475,7 +475,7 @@     (#const MSGPACK_OBJECT_MAP) ->       peekObjectMap ptr     _ ->-      fail "peekObject: unknown object type"+      fail $ "peekObject: unknown object type (" ++ show typ ++ ")"  peekObjectBool :: Ptr a -> IO Object peekObjectBool ptr = do@@ -506,20 +506,22 @@  peekObjectArray :: Ptr a -> IO Object peekObjectArray ptr = do-  size <- (#peek msgpack_object, via.array.size) ptr-  p    <- (#peek msgpack_object, via.array.ptr) ptr-  objs <- mapM (\i -> peekObject $ p `plusPtr`+  csize <- (#peek msgpack_object, via.array.size) ptr+  let size = fromIntegral (csize :: Word32)+  p     <- (#peek msgpack_object, via.array.ptr) ptr+  objs  <- mapM (\i -> peekObject $ p `plusPtr`                       ((#size msgpack_object) * i))-          [0..size-1]+           [0..size-1]   return $ ObjectArray objs  peekObjectMap :: Ptr a -> IO Object peekObjectMap ptr = do-  size <- (#peek msgpack_object, via.map.size) ptr-  p    <- (#peek msgpack_object, via.map.ptr) ptr-  dat  <- mapM (\i -> peekObjectKV $ p `plusPtr`+  csize <- (#peek msgpack_object, via.map.size) ptr+  let size = fromIntegral (csize :: Word32)+  p     <- (#peek msgpack_object, via.map.ptr) ptr+  dat   <- mapM (\i -> peekObjectKV $ p `plusPtr`                       ((#size msgpack_object_kv) * i))-          [0..size-1]+           [0..size-1]   return $ ObjectMap dat  peekObjectKV :: Ptr a -> IO (Object, Object)@@ -541,11 +543,11 @@ packObject pc (ObjectRAW bs) = packRAW' pc bs >> return ()  packObject pc (ObjectArray ls) = do-  packArray pc (length ls)+  _ <- packArray pc (length ls)   mapM_ (packObject pc) ls  packObject pc (ObjectMap ls) = do-  packMap pc (length ls)+  _ <- packMap pc (length ls)   mapM_ (\(a, b) -> packObject pc a >> packObject pc b) ls  data UnpackReturn =@@ -560,6 +562,7 @@   allocaBytes (#size msgpack_object) $ \ptr ->   BS.useAsCStringLen dat $ \(str, len) ->   alloca $ \poff -> do+    poke poff 0     ret <- msgpack_unpack str (fromIntegral len) poff z ptr     case ret of       (#const MSGPACK_UNPACK_SUCCESS) -> do
src/Data/MessagePack/Class.hs view
@@ -27,7 +27,6 @@ import Control.Monad.Error import Data.ByteString.Char8 (ByteString) import qualified Data.ByteString.Char8 as C8-import Data.Either  import Data.MessagePack.Base @@ -45,6 +44,11 @@  fromObjectError :: String fromObjectError = "fromObject: cannot cast"++instance OBJECT () where+  toObject = const ObjectNil+  fromObject ObjectNil = Right ()+  fromObject _ = Left fromObjectError  instance OBJECT Int where   toObject = ObjectInteger
src/Data/MessagePack/Feed.hs view
@@ -21,7 +21,6 @@   feederFromString,   ) where -import Control.Monad import Data.ByteString (ByteString) import qualified Data.ByteString as BS import Data.IORef@@ -33,12 +32,16 @@ -- | 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+    c <- BS.hGet h 1+    if BS.length c > 0+      then do return $ Just c+      else do+      hClose h+      return Nothing   where     bufSize = 4096 
src/Data/MessagePack/Monad.hs view
@@ -79,10 +79,10 @@ packToString m = do   sb <- liftIO $ newSimpleBuffer   pc <- liftIO $ newPacker sb-  runPackerT m pc+  _ <- runPackerT m pc   liftIO $ simpleBufferData sb --- | Execcute given serializer and write byte sequence to Handle.+-- | Execute given serializer and write byte sequence to Handle. packToHandle :: MonadIO m => Handle -> PackerT m r -> m () packToHandle h m = do   sb <- packToString m@@ -115,18 +115,21 @@  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
src/Data/MessagePack/Stream.hs view
@@ -19,9 +19,7 @@   unpackObjectsFromString,   ) where -import Control.Monad import Data.ByteString (ByteString)-import qualified Data.ByteString as BS import System.IO import System.IO.Unsafe