Coverage for src/encoder.mys : 0%

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
3func _sint32_encode(value: i32) -> u32:
4 if value < 0:
5 return ~(u32(value) << 1)
6 else:
7 return u32(value) << 1
9func _sint64_encode(value: i64) -> u64:
10 if value < 0:
11 return ~(u64(value) << 1)
12 else:
13 return u64(value) << 1
15class Encoder:
16 _length: i64
17 _parts: [bytes]
19 func __init__(self):
20 self._length = 0
21 self._parts = []
23 func _write(self, value: bytes):
24 self._length += value.length()
25 self._parts.append(value)
27 func write_length_delimited(self, field_number: i64, value: u64):
28 self._write_varint(value)
29 self._write_tag(field_number, WireType.LengthDelimited)
31 func _write_tagged_varint(self, field_number: i64, wire_type: WireType, value: u64):
32 if value == 0:
33 return
35 self._write_varint(value)
36 self._write_tag(field_number, wire_type)
38 func _write_varint(self, value: u64):
39 buf = b""
41 while True:
42 buf += u8(value | 0x80)
43 value >>= 7
45 if value == 0:
46 break
48 buf[-1] &= 0x7f
49 self._write(buf)
51 func _write_tag(self, field_number: i64, wire_type: WireType):
52 self._write_varint(u64((field_number << 3) | i64(wire_type)))
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)
61 func length(self) -> i64:
62 return self._length
64 func finalize(self) -> bytes:
65 value = b""
67 for part in reversed(self._parts):
68 value += part
70 return value
72 func write_int32(self, field_number: i64, value: i32):
73 self._write_tagged_varint(field_number, WireType.Varint, u64(i64(value)))
75 func write_int64(self, field_number: i64, value: i64):
76 self._write_tagged_varint(field_number, WireType.Varint, u64(value))
78 func write_sint32(self, field_number: i64, value: i32):
79 self.write_sint64(field_number, i64(value))
81 func write_sint64(self, field_number: i64, value: i64):
82 self.write_uint64(field_number, _sint64_encode(value))
84 func write_uint32(self, field_number: i64, value: u32):
85 raise NotImplementedError()
87 func write_uint64(self, field_number: i64, value: u64):
88 raise NotImplementedError()
90 func write_fixed32(self, field_number: i64, value: u32):
91 raise NotImplementedError()
93 func write_fixed64(self, field_number: i64, value: u64):
94 raise NotImplementedError()
96 func write_sfixed32(self, field_number: i64, value: i32):
97 raise NotImplementedError()
99 func write_sfixed64(self, field_number: i64, value: i64):
100 raise NotImplementedError()
102 func write_float(self, field_number: i64, value: f32):
103 raise NotImplementedError()
105 func write_double(self, field_number: i64, value: f64):
106 raise NotImplementedError()
108 func write_bool(self, field_number: i64, value: bool):
109 raise NotImplementedError()
111 func write_enum(self, field_number: i64, value: i32):
112 self.write_int32(field_number, i32(value))
114 func write_string(self, field_number: i64, value: string):
115 if value.length() == 0:
116 return
118 data = value.to_utf8()
119 self._write(data)
120 self._write_tagged_varint(field_number,
121 WireType.LengthDelimited,
122 u64(data.length()))
124 func write_bytes(self, field_number: i64, value: bytes):
125 raise NotImplementedError()
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)))
132 func write_int64_always(self, field_number: i64, value: i64):
133 raise NotImplementedError()
135 func write_sint32_always(self, field_number: i64, value: i32):
136 raise NotImplementedError()
138 func write_sint64_always(self, field_number: i64, value: i64):
139 raise NotImplementedError()
141 func write_uint32_always(self, field_number: i64, value: i32):
142 raise NotImplementedError()
144 func write_uint64_always(self, field_number: i64, value: i64):
145 raise NotImplementedError()
147 func write_fixed32_always(self, field_number: i64, value: i32):
148 raise NotImplementedError()
150 func write_fixed64_always(self, field_number: i64, value: i64):
151 raise NotImplementedError()
153 func write_sfixed32_always(self, field_number: i64, value: i32):
154 raise NotImplementedError()
156 func write_sfixed64_always(self, field_number: i64, value: i64):
157 raise NotImplementedError()
159 func write_float_always(self, field_number: i64, value: f32):
160 raise NotImplementedError()
162 func write_double_always(self, field_number: i64, value: f64):
163 raise NotImplementedError()
165 func write_bool_always(self, field_number: i64, value: bool):
166 self.write_int32_always(field_number, i32(value))
168 func write_enum_always(self, field_number: i64, value: i32):
169 raise NotImplementedError()
171 func write_string_always(self, field_number: i64, value: string):
172 raise NotImplementedError()
174 func write_bytes_always(self, field_number: i64, value: bytes):
175 raise NotImplementedError()
177 func write_repeated_int32(self, field_number: i64, value: [i32]):
178 raise NotImplementedError()
180 func write_repeated_int64(self, field_number: i64, value: [i64]):
181 raise NotImplementedError()
183 func write_repeated_sint32(self, field_number: i64, value: [i32]):
184 raise NotImplementedError()
186 func write_repeated_sint64(self, field_number: i64, value: [i64]):
187 raise NotImplementedError()
189 func write_repeated_uint32(self, field_number: i64, value: [u32]):
190 raise NotImplementedError()
192 func write_repeated_uint64(self, field_number: i64, value: [u64]):
193 raise NotImplementedError()
195 func write_repeated_fixed32(self, field_number: i64, value: [u32]):
196 raise NotImplementedError()
198 func write_repeated_fixed64(self, field_number: i64, value: [u64]):
199 raise NotImplementedError()
201 func write_repeated_sfixed32(self, field_number: i64, value: [i32]):
202 raise NotImplementedError()
204 func write_repeated_sfixed64(self, field_number: i64, value: [i64]):
205 raise NotImplementedError()
207 func write_repeated_float(self, field_number: i64, value: [f32]):
208 raise NotImplementedError()
210 func write_repeated_double(self, field_number: i64, value: [f64]):
211 raise NotImplementedError()
213 func write_repeated_bool(self, field_number: i64, value: [bool]):
214 raise NotImplementedError()
216 func write_repeated_string(self, field_number: i64, value: [string]):
217 raise NotImplementedError()
219 func write_repeated_bytes(self, field_number: i64, value: [bytes]):
220 raise NotImplementedError()