+def _make_string_deserializer(tag, decoder):
+ fmt = '!I'
+ size = struct.calcsize(fmt)
+ unpacker = functools.partial(struct.unpack, fmt)
+
+ def parser(b):
+ length_b = b.read(size)
+ assert len(length_b) == size
+ length = unpacker(length_b)[0]
+ s = b.read(length)
+ assert len(s) == length
+ return TaggedObject(tag = tag, instance = decoder(s))
+
+ return parser
+