def add_field_format(field_name, field_type, *_): fmt = util.field_format(field_type, _[1] if field_type == 'string' else None, self._custom_enums) f.write(fmt)
def _message_send_constructor(self, descriptor, m_type): if m_type == 'client': return f = self._file def field_len(field_type): if field_type == 'byte' or field_type in self._custom_enums: return 1 if field_type == 'short': return 2 if field_type == 'int': return 4 return 0 f.write('\n') f.write('%sdef encode_self(self):\n' % TAB) f.write('%s# noinspection PyListCreation\n' % TAB2) f.write('%svalues = [0, self.%s]\n' % (TAB2, self._get_id_method_name, )) f.write('%sp_len = 0\n' % TAB2) f.write('%sfmt = "<i b"\n' % TAB2) l = len(descriptor) last_str = False for field_i in xrange(2, l): field_name = descriptor[field_i][0] field_type = descriptor[field_i][1] if field_type == 'string': l = descriptor[field_i][2] if l == 'long': f.write('\n') f.write('%snew_str = self.%s.encode("utf-8") if isinstance(self.%s, unicode) else self.%s\n' % (TAB2, field_name, field_name, field_name)) f.write('%sp_len += len(new_str) + 2\n' % TAB2) f.write('%svalues.append(len(new_str))\n' % TAB2) f.write('%sfmt += " h"\n' % TAB2) f.write('%svalues.append(new_str)\n' % TAB2) f.write('%sfmt += " " + str(len(new_str)) + "s"\n' % TAB2) else: f.write('\n') f.write('%snew_str = self.%s.encode("utf-8") if isinstance(self.%s, unicode) else self.%s\n' % (TAB2, field_name, field_name, field_name)) f.write('%sif len(new_str) <= 127:\n' % TAB2) f.write('%sp_len += len(new_str) + 1\n' % TAB3) f.write('%svalues.append(len(new_str))\n' % TAB3) f.write('%sfmt += " b"\n' % TAB3) f.write('%selse:\n' % TAB2) f.write('%sp_len += len(new_str) + 2\n' % TAB3) f.write('%svalues.append(len(new_str))\n' % TAB3) f.write('%sfmt += " h"\n' % TAB3) f.write('%svalues.append(new_str)\n' % TAB2) f.write('%sfmt += " " + str(len(new_str)) + "s"\n' % TAB2) last_str = True else: if last_str: f.write('\n') last_str = False f.write('%svalues.append(self.%s)\n' % (TAB2, field_name)) f.write('%sp_len += %i\n' % (TAB2, field_len(field_type))) f.write('%sfmt += "%s"\n' % (TAB2, util.field_format(field_type, None, self._custom_enums))) f.write('\n') f.write('%svalues[0] = p_len\n' % TAB2) f.write('%sreturn struct.pack(fmt, *values)\n' % TAB2)