in dubbo/codec/encoder.py [0:0]
def _encode_list(self, value):
"""
对一个列表进行编码
:param value:
:return:
"""
result = []
length = len(value)
if length == 0:
# 没有值则无法判断类型,一律返回null
return self._encode_single_value(None)
if isinstance(value[0], bool):
_type = '[boolean'
elif isinstance(value[0], int):
_type = '[int'
elif isinstance(value[0], float):
_type = '[double'
elif isinstance(value[0], str):
_type = '[string'
elif isinstance(value[0], Object):
_type = '[object'
else:
raise HessianTypeError('Unknown list type: {}'.format(value[0]))
if length < 0x7:
result.append(0x70 + length)
if _type not in self.types:
self.types.append(_type)
result.extend(self._encode_single_value(_type))
else:
result.extend(self._encode_single_value(self.types.index(_type)))
else:
result.append(0x56)
if _type not in self.types:
self.types.append(_type)
result.extend(self._encode_single_value(_type))
else:
result.extend(self._encode_single_value(self.types.index(_type)))
result.extend(self._encode_single_value(length))
for v in value:
if type(value[0]) != type(v):
raise HessianTypeError('All elements in list must be the same type, first type'
' is {0} but current type is {1}'.format(type(value[0]), type(v)))
result.extend(self._encode_single_value(v))
return result