Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from . import WireType 

2 

3func _sint32_encode(value: i32) -> u32: 

4 if value < 0: 

5 return ~(u32(value) << 1) 

6 else: 

7 return u32(value) << 1 

8 

9func _sint64_encode(value: i64) -> u64: 

10 if value < 0: 

11 return ~(u64(value) << 1) 

12 else: 

13 return u64(value) << 1 

14 

15class Encoder: 

16 _length: i64 

17 _parts: [bytes] 

18 

19 func __init__(self): 

20 self._length = 0 

21 self._parts = [] 

22 

23 func _write(self, value: bytes): 

24 self._length += value.length() 

25 self._parts.append(value) 

26 

27 func write_length_delimited(self, field_number: i64, value: u64): 

28 self._write_varint(value) 

29 self._write_tag(field_number, WireType.LengthDelimited) 

30 

31 func _write_tagged_varint(self, field_number: i64, wire_type: WireType, value: u64): 

32 if value == 0: 

33 return 

34 

35 self._write_varint(value) 

36 self._write_tag(field_number, wire_type) 

37 

38 func _write_varint(self, value: u64): 

39 buf = b"" 

40 

41 while True: 

42 buf += u8(value | 0x80) 

43 value >>= 7 

44 

45 if value == 0: 

46 break 

47 

48 buf[-1] &= 0x7f 

49 self._write(buf) 

50 

51 func _write_tag(self, field_number: i64, wire_type: WireType): 

52 self._write_varint(u64((field_number << 3) | i64(wire_type))) 

53 

54 func _write_tagged_varint_always(self, 

55 field_number: i64, 

56 wire_type: WireType, 

57 value: u64): 

58 self._write_varint(value) 

59 self._write_tag(field_number, wire_type) 

60 

61 func length(self) -> i64: 

62 return self._length 

63 

64 func finalize(self) -> bytes: 

65 value = b"" 

66 

67 for part in reversed(self._parts): 

68 value += part 

69 

70 return value 

71 

72 func write_int32(self, field_number: i64, value: i32): 

73 self._write_tagged_varint(field_number, WireType.Varint, u64(i64(value))) 

74 

75 func write_int64(self, field_number: i64, value: i64): 

76 self._write_tagged_varint(field_number, WireType.Varint, u64(value)) 

77 

78 func write_sint32(self, field_number: i64, value: i32): 

79 self.write_sint64(field_number, i64(value)) 

80 

81 func write_sint64(self, field_number: i64, value: i64): 

82 self.write_uint64(field_number, _sint64_encode(value)) 

83 

84 func write_uint32(self, field_number: i64, value: u32): 

85 raise NotImplementedError() 

86 

87 func write_uint64(self, field_number: i64, value: u64): 

88 raise NotImplementedError() 

89 

90 func write_fixed32(self, field_number: i64, value: u32): 

91 raise NotImplementedError() 

92 

93 func write_fixed64(self, field_number: i64, value: u64): 

94 raise NotImplementedError() 

95 

96 func write_sfixed32(self, field_number: i64, value: i32): 

97 raise NotImplementedError() 

98 

99 func write_sfixed64(self, field_number: i64, value: i64): 

100 raise NotImplementedError() 

101 

102 func write_float(self, field_number: i64, value: f32): 

103 raise NotImplementedError() 

104 

105 func write_double(self, field_number: i64, value: f64): 

106 raise NotImplementedError() 

107 

108 func write_bool(self, field_number: i64, value: bool): 

109 raise NotImplementedError() 

110 

111 func write_enum(self, field_number: i64, value: i32): 

112 self.write_int32(field_number, i32(value)) 

113 

114 func write_string(self, field_number: i64, value: string): 

115 if value.length() == 0: 

116 return 

117 

118 data = value.to_utf8() 

119 self._write(data) 

120 self._write_tagged_varint(field_number, 

121 WireType.LengthDelimited, 

122 u64(data.length())) 

123 

124 func write_bytes(self, field_number: i64, value: bytes): 

125 raise NotImplementedError() 

126 

127 func write_int32_always(self, field_number: i64, value: i32): 

128 self._write_tagged_varint_always(field_number, 

129 WireType.Varint, 

130 u64(i64(value))) 

131 

132 func write_int64_always(self, field_number: i64, value: i64): 

133 raise NotImplementedError() 

134 

135 func write_sint32_always(self, field_number: i64, value: i32): 

136 raise NotImplementedError() 

137 

138 func write_sint64_always(self, field_number: i64, value: i64): 

139 raise NotImplementedError() 

140 

141 func write_uint32_always(self, field_number: i64, value: i32): 

142 raise NotImplementedError() 

143 

144 func write_uint64_always(self, field_number: i64, value: i64): 

145 raise NotImplementedError() 

146 

147 func write_fixed32_always(self, field_number: i64, value: i32): 

148 raise NotImplementedError() 

149 

150 func write_fixed64_always(self, field_number: i64, value: i64): 

151 raise NotImplementedError() 

152 

153 func write_sfixed32_always(self, field_number: i64, value: i32): 

154 raise NotImplementedError() 

155 

156 func write_sfixed64_always(self, field_number: i64, value: i64): 

157 raise NotImplementedError() 

158 

159 func write_float_always(self, field_number: i64, value: f32): 

160 raise NotImplementedError() 

161 

162 func write_double_always(self, field_number: i64, value: f64): 

163 raise NotImplementedError() 

164 

165 func write_bool_always(self, field_number: i64, value: bool): 

166 self.write_int32_always(field_number, i32(value)) 

167 

168 func write_enum_always(self, field_number: i64, value: i32): 

169 raise NotImplementedError() 

170 

171 func write_string_always(self, field_number: i64, value: string): 

172 raise NotImplementedError() 

173 

174 func write_bytes_always(self, field_number: i64, value: bytes): 

175 raise NotImplementedError() 

176 

177 func write_repeated_int32(self, field_number: i64, value: [i32]): 

178 raise NotImplementedError() 

179 

180 func write_repeated_int64(self, field_number: i64, value: [i64]): 

181 raise NotImplementedError() 

182 

183 func write_repeated_sint32(self, field_number: i64, value: [i32]): 

184 raise NotImplementedError() 

185 

186 func write_repeated_sint64(self, field_number: i64, value: [i64]): 

187 raise NotImplementedError() 

188 

189 func write_repeated_uint32(self, field_number: i64, value: [u32]): 

190 raise NotImplementedError() 

191 

192 func write_repeated_uint64(self, field_number: i64, value: [u64]): 

193 raise NotImplementedError() 

194 

195 func write_repeated_fixed32(self, field_number: i64, value: [u32]): 

196 raise NotImplementedError() 

197 

198 func write_repeated_fixed64(self, field_number: i64, value: [u64]): 

199 raise NotImplementedError() 

200 

201 func write_repeated_sfixed32(self, field_number: i64, value: [i32]): 

202 raise NotImplementedError() 

203 

204 func write_repeated_sfixed64(self, field_number: i64, value: [i64]): 

205 raise NotImplementedError() 

206 

207 func write_repeated_float(self, field_number: i64, value: [f32]): 

208 raise NotImplementedError() 

209 

210 func write_repeated_double(self, field_number: i64, value: [f64]): 

211 raise NotImplementedError() 

212 

213 func write_repeated_bool(self, field_number: i64, value: [bool]): 

214 raise NotImplementedError() 

215 

216 func write_repeated_string(self, field_number: i64, value: [string]): 

217 raise NotImplementedError() 

218 

219 func write_repeated_bytes(self, field_number: i64, value: [bytes]): 

220 raise NotImplementedError()