Add ext_type example to README.
This commit is contained in:
23
README.rst
23
README.rst
@@ -143,10 +143,27 @@ key-value pairs.
|
|||||||
Extended types
|
Extended types
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
It is also possible to pack/unpack custom data types using the msgpack feature
|
It is also possible to pack/unpack custom data types using the msgpack 2.0 feature.
|
||||||
of "extended types". For example, msgpack-pypy uses it to provide very fast serialization of int/float lists on top of PyPy (experimental for now):
|
|
||||||
|
|
||||||
https://bitbucket.org/antocuni/msgpack-pypy/src/default/msgpack_pypy.py
|
>>> import msgpack
|
||||||
|
>>> import array
|
||||||
|
>>> def default(obj):
|
||||||
|
... if isinstance(obj, array.array) and obj.typecode == 'd':
|
||||||
|
... return msgpack.ExtType(42, obj.tostring())
|
||||||
|
... raise TypeError("Unknown type: %r" % (obj,))
|
||||||
|
...
|
||||||
|
>>> def ext_hook(code, data):
|
||||||
|
... if code == 42:
|
||||||
|
... a = array.array('d')
|
||||||
|
... a.fromstring(data)
|
||||||
|
... return a
|
||||||
|
... return ExtType(code, data)
|
||||||
|
...
|
||||||
|
>>> data = array.array('d', [1.2, 3.4])
|
||||||
|
>>> packed = msgpack.packb(data, default=default)
|
||||||
|
>>> unpacked = msgpack.unpackb(packed, ext_hook=ext_hook)
|
||||||
|
>>> data == unpacked
|
||||||
|
True
|
||||||
|
|
||||||
|
|
||||||
Advanced unpacking control
|
Advanced unpacking control
|
||||||
|
|||||||
Reference in New Issue
Block a user