Ejemplo n.º 1
0
 def serialize(cls, value, ctx):
     type_id = register.get_id(cls)
     is_ref, hash_code = ctx.is_ref(value)
     ctx.write(struct.pack('<i?i', type_id, is_ref, hash_code))
     if is_ref:
         return
     length = len(value)
     ctx.write(struct.pack('<i', length))
     for item in value:
         _type, _item = decide(item)
         _type_id = register.get_id(_type)
         ctx.write(struct.pack('<i', _type_id))
         _type.serialize(_item, ctx)
Ejemplo n.º 2
0
 def serialize(cls, value, ctx):
     type_id = register.get_id(cls)
     is_ref, hash_code = ctx.is_ref(value)
     ctx.write(struct.pack('<i?i', type_id, is_ref, hash_code))
     if is_ref:
         return
     k, v = value
     key_type, k = decide(k)
     key_type_id = register.get_id(key_type)
     ctx.write(struct.pack('<i', key_type_id))
     key_type.serialize(k, ctx)
     value_type, v = decide(v)
     value_type_id = register.get_id(value_type)
     ctx.write(struct.pack('<i', value_type_id))
     value_type.serialize(v, ctx)
Ejemplo n.º 3
0
 def serialize(cls, value, ctx):
     type_id = register.get_id(cls)
     is_ref, hash_code = ctx.is_ref(value)
     ctx.write(struct.pack('<i?i', type_id, is_ref, hash_code))
     if is_ref:
         return
     # Serializable的子类中记录了属性的序列化类型
     # 所以实例属性不需要像容器类型一样限定成ProtocolType类型
     # 但是如果实例属性是ProtocolType类型,也是允许的
     for desc in cls.__serialize_fields__:
         _value = getattr(value, desc.name)
         _type = desc.type_info.type
         if _type == ProtocolType:
             _type, _value = decide(_value)
         else:
             _, _value = decide(_value)
         type_id = register.get_id(_type)
         ctx.write(struct.pack('<i', type_id))
         _type.serialize(_value, ctx)
Ejemplo n.º 4
0
 def serialize(cls, value, ctx):
     _type = cls.__generics__
     type_id = register.get_id(_type)
     is_ref, hash_code = ctx.is_ref(value)
     ctx.write(struct.pack('<i?i', type_id, is_ref, hash_code))
     if is_ref:
         return
     arr = value.value
     length = len(arr)
     ctx.write(struct.pack('<i', length))
     if issubclass(_type, BaseType):
         for item in arr:
             _type.serialize(item, ctx)
     else:
         for item in arr:
             _item_type, _item = decide(item)
             _item_type_id = register.get_id(_item_type)
             ctx.write(struct.pack('<i', _item_type_id))
             _item_type.serialize(_item, ctx)
Ejemplo n.º 5
0
 def serialize(cls, value, ctx):
     type_id = register.get_id(cls)
     ctx.write(struct.pack('<i', type_id))
     enum_str = cls.name(value)
     String.serialize(enum_str, ctx)