def produce(obj, pb, sep):
for ds, val in pb.ListFields():
for val in (val if ds.label == ds.LABEL_REPEATED else [val]):
if ds.cpp_type == ds.CPPTYPE_MESSAGE:
origlen = len(obj)
produce(obj, val, sep)
obj.insert(origlen, '%dm%d' % (ds.number, len(obj) - origlen))
continue
elif ds.type == ds.TYPE_STRING:
if sep == '!':
val = val.replace('*', '*2A').replace('!', '*21')
else:
val = quote(val, safe='~()*!.\'')
elif ds.type == ds.TYPE_BYTES:
val = urlsafe_b64encode(val).decode('ascii').strip('=')
elif ds.type == ds.TYPE_BOOL:
val = int(val)
obj.append('%d%s%s' % (ds.number, types_enc[ds.type], val))
return obj
评论列表
文章目录