+def _deserialize_list(b):
+ list_tag_bytes = b.read(1)
+ assert len(list_tag_bytes) == 1
+ list_tag = list_tag_bytes[0]
+
+ bytes_read, payload = _read_length_then_payload(b)
+
+ payload_stream = io.BytesIO(payload)
+
+ total_bytes_read = 0
+ instance = []
+
+ while total_bytes_read < len(payload):
+ partial_bytes_read, item = _TAGS_TO_PARSERS[list_tag](payload_stream)
+ total_bytes_read += partial_bytes_read
+ instance.append(item)
+
+ # TODO Return tags = (tags.LIST, list_tag) to function like a generic type
+ return bytes_read, tags.TaggedObject(tag = tags.LIST, instance = instance)
+