Skip to content
This repository was archived by the owner on Feb 8, 2022. It is now read-only.

Commit 3bee488

Browse files
committed
1.0.0
1 parent 205e6e3 commit 3bee488

1 file changed

Lines changed: 23 additions & 15 deletions

File tree

mashpack/_fallback.py

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,17 @@ def pack_array_header(self, n) -> bytes:
675675
self._buffer = BytesIO(ret)
676676
return ret
677677

678+
def pack_ext_header(self, code, n):
679+
if n >= _DEFAULT_MAX_LEN:
680+
raise PackValueError()
681+
self._pack_ext_header(code, n)
682+
ret = self._buffer.getvalue()
683+
if self._autoreset:
684+
self._buffer = BytesIO()
685+
elif _USING_BYTESBUILDER:
686+
self._buffer = BytesIO(ret)
687+
return ret
688+
678689
def _pack(self, obj, nest_limit=_DEFAULT_NEST_LIMIT):
679690
default_used = False
680691
while True:
@@ -799,21 +810,8 @@ def _pack(self, obj, nest_limit=_DEFAULT_NEST_LIMIT):
799810

800811
# Packing EXT*
801812
elif isinstance(obj, ExtType):
802-
data_len = len(obj.data)
803-
804-
# Packing EXT8
805-
if data_len <= 0xFF:
806-
return self._buffer.write(b'\xDB' + _STRUCT_EXT8.pack(data_len, obj.code) + obj.data)
807-
808-
# Packing EXT16
809-
elif data_len <= 0xFFFF:
810-
return self._buffer.write(b'\xDC' + _STRUCT_EXT16.pack(data_len, obj.code) + obj.data)
811-
812-
# Packing EXT32
813-
elif data_len <= 0xFFFFFFFF:
814-
return self._buffer.write(b'\xDD' + _STRUCT_EXT32.pack(data_len, obj.code) + obj.data)
815-
else:
816-
raise PackValueError('ext is too large')
813+
self._pack_ext_header(obj.code, len(obj.data))
814+
return self._buffer.write(obj.data)
817815

818816
elif not default_used and self._default is not None:
819817
obj = self._default(obj)
@@ -875,3 +873,13 @@ def _pack_bin_header(self, n):
875873
return self._buffer.write(b'\xD0' + _STRUCT_UINT32.pack(n))
876874
else:
877875
raise PackValueError('binary too large')
876+
877+
def _pack_ext_header(self, code, n):
878+
if n <= 0xFF:
879+
return self._buffer.write(b'\xDB')
880+
elif n <= 0xFFFF:
881+
return self._buffer.write(b'\xDC')
882+
elif n <= 0xFFFFFFFF:
883+
return self._buffer.write(b'\xDD')
884+
else:
885+
raise PackValueError('ext too large')

0 commit comments

Comments
 (0)