hgext/fsmonitor/pywatchman/pybser.py
changeset 49495 59a72267f5ce
parent 48946 642e31cb55f0
child 49537 f58f955adad4
equal deleted inserted replaced
49494:c96ed4029fda 49495:59a72267f5ce
    34 import struct
    34 import struct
    35 import sys
    35 import sys
    36 
    36 
    37 from . import compat
    37 from . import compat
    38 
    38 
       
    39 abc = collections.abc
    39 
    40 
    40 BSER_ARRAY = b"\x00"
    41 BSER_ARRAY = b"\x00"
    41 BSER_OBJECT = b"\x01"
    42 BSER_OBJECT = b"\x01"
    42 BSER_BYTESTRING = b"\x02"
    43 BSER_BYTESTRING = b"\x02"
    43 BSER_INT8 = b"\x03"
    44 BSER_INT8 = b"\x03"
   205         elif isinstance(val, float):
   206         elif isinstance(val, float):
   206             needed = 9
   207             needed = 9
   207             self.ensure_size(needed)
   208             self.ensure_size(needed)
   208             struct.pack_into(b"=cd", self.buf, self.wpos, BSER_REAL, val)
   209             struct.pack_into(b"=cd", self.buf, self.wpos, BSER_REAL, val)
   209             self.wpos += needed
   210             self.wpos += needed
   210         elif isinstance(val, collections.Mapping) and isinstance(
   211         elif isinstance(val, abc.Mapping) and isinstance(val, abc.Sized):
   211             val, collections.Sized
       
   212         ):
       
   213             val_len = len(val)
   212             val_len = len(val)
   214             size = _int_size(val_len)
   213             size = _int_size(val_len)
   215             needed = 2 + size
   214             needed = 2 + size
   216             self.ensure_size(needed)
   215             self.ensure_size(needed)
   217             if size == 1:
   216             if size == 1:
   258             else:
   257             else:
   259                 iteritems = val.iteritems()  # noqa: B301 Checked version above
   258                 iteritems = val.iteritems()  # noqa: B301 Checked version above
   260             for k, v in iteritems:
   259             for k, v in iteritems:
   261                 self.append_string(k)
   260                 self.append_string(k)
   262                 self.append_recursive(v)
   261                 self.append_recursive(v)
   263         elif isinstance(val, collections.Iterable) and isinstance(
   262         elif isinstance(val, abc.Iterable) and isinstance(val, abc.Sized):
   264             val, collections.Sized
       
   265         ):
       
   266             val_len = len(val)
   263             val_len = len(val)
   267             size = _int_size(val_len)
   264             size = _int_size(val_len)
   268             needed = 2 + size
   265             needed = 2 + size
   269             self.ensure_size(needed)
   266             self.ensure_size(needed)
   270             if size == 1:
   267             if size == 1: