Coverage for src/decoder.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 PbtoolsError
2from . import WireType
4class Decoder:
5 data: bytes
6 pos: i64
7 length: i64
9 func slice(self, length: i64) -> Decoder:
10 self.pos += length
12 return Decoder(self.data, self.pos - length, self.pos)
14 func get(self) -> u8:
15 if not self.available():
16 raise PbtoolsError("Out of data.")
18 value = self.data[self.pos]
19 self.pos += 1
21 return value
23 func read_varint(self) -> u64:
24 value: u64 = 0
25 offset: u64 = 0
26 byte: u8 = 0x80
28 while (offset < 64) and ((byte & 0x80) == 0x80):
29 byte = self.get()
30 value |= ((u64(byte) & 0x7f) << offset)
31 offset += 7
33 if (byte & 0x80) == 0x80:
34 raise PbtoolsError("Varint overflow.")
36 return value
38 func read_varint_check_wire_type(self,
39 wire_type: WireType,
40 expected_wire_type: WireType) -> u64:
41 if wire_type != expected_wire_type:
42 raise PbtoolsError("Unecpected wire type.")
44 return self.read_varint()
46 func read_varint_check_wire_type_varint(self, wire_type: WireType) -> u64:
47 return self.read_varint_check_wire_type(wire_type, WireType.Varint)
49 func read_length_delimited(self, wire_type: WireType) -> u64:
50 return self.read_varint_check_wire_type(wire_type, WireType.LengthDelimited)
52 func read(self, size: u64) -> bytes:
53 data = b""
55 while size > 0:
56 data += self.get()
57 size -= 1
59 return data
61 func seek(self, offset: i64):
62 self.pos += offset
64 func available(self) -> bool:
65 return self.pos < self.length
67 func read_tag(self) -> (i64, WireType):
68 value = self.read_varint()
69 field_number = i64(value >> 3)
71 if field_number == 0:
72 raise PbtoolsError("Field number is zero.")
74 return (field_number, WireType(i64(value) & 7))
76 func read_int32(self, wire_type: WireType) -> i32:
77 return i32(self.read_int64(wire_type))
79 func read_int64(self, wire_type: WireType) -> i64:
80 return i64(self.read_varint_check_wire_type_varint(wire_type))
82# int32_t read_sint32(self, int wire_type):
83# raise NotImplementedError()
84#
85# int64_t read_sint64(self, int wire_type):
86# raise NotImplementedError()
87#
88# uint32_t read_uint32(self, int wire_type):
89# raise NotImplementedError()
90#
91# uint64_t read_uint64(self, int wire_type):
92# raise NotImplementedError()
93#
94# uint32_t read_fixed32(self, int wire_type):
95# raise NotImplementedError()
96#
97# uint64_t read_fixed64(self, int wire_type):
98# raise NotImplementedError()
99#
100# int32_t read_sfixed32(self, int wire_type):
101# raise NotImplementedError()
102#
103# int64_t read_sfixed64(self, int wire_type):
104# raise NotImplementedError()
105#
106# float read_float(self, int wire_type):
107# raise NotImplementedError()
108#
109# double read_double(self, int wire_type):
110# raise NotImplementedError()
112 func read_bool(self, wire_type: WireType) -> bool:
113 return self.read_int32(wire_type) != 0
115 func read_enum(self, wire_type: WireType) -> i32:
116 return self.read_int32(wire_type)
118 func read_string(self, wire_type: WireType) -> string:
119 size = self.read_length_delimited(wire_type)
121 return string(self.read(size))
123# void read_bytes(self, int wire_type, struct pbtools_bytes_t *bytes_p):
124# raise NotImplementedError()
125#
126# void pbtools_repeated_info_decode_int32(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
127# raise NotImplementedError()
128#
129# void decode_repeated_int32(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_int32_t *repeated_p):
130# raise NotImplementedError()
131#
132# void pbtools_repeated_info_decode_int64(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
133# raise NotImplementedError()
134#
135# void decode_repeated_int64(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_int64_t *repeated_p):
136# raise NotImplementedError()
137#
138# void pbtools_repeated_info_decode_uint32(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
139# raise NotImplementedError()
140#
141# void decode_repeated_uint32(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_uint32_t *repeated_p):
142# raise NotImplementedError()
143#
144# void pbtools_repeated_info_decode_uint64(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
145# raise NotImplementedError()
146#
147# void decode_repeated_uint64(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_uint64_t *repeated_p):
148# raise NotImplementedError()
149#
150# void pbtools_repeated_info_decode_sint32(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
151# raise NotImplementedError()
152#
153# void decode_repeated_sint32(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_int32_t *repeated_p):
154# raise NotImplementedError()
155#
156# void pbtools_repeated_info_decode_sint64(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
157# raise NotImplementedError()
158#
159# void decode_repeated_sint64(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_int64_t *repeated_p):
160# raise NotImplementedError()
161#
162# void pbtools_repeated_info_decode_fixed32(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
163# raise NotImplementedError()
164#
165# void decode_repeated_fixed32(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_uint32_t *repeated_p):
166# raise NotImplementedError()
167#
168# void pbtools_repeated_info_decode_fixed64(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
169# raise NotImplementedError()
170#
171# void decode_repeated_fixed64(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_uint64_t *repeated_p):
172# raise NotImplementedError()
173#
174# void pbtools_repeated_info_decode_sfixed32(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
175# raise NotImplementedError()
176#
177# void decode_repeated_sfixed32(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_int32_t *repeated_p):
178# raise NotImplementedError()
179#
180# void pbtools_repeated_info_decode_sfixed64(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
181# raise NotImplementedError()
182#
183# void decode_repeated_sfixed64(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_int64_t *repeated_p):
184# raise NotImplementedError()
185#
186# void pbtools_repeated_info_decode_float(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
187# raise NotImplementedError()
188#
189# void decode_repeated_float(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_float_t *repeated_p):
190# raise NotImplementedError()
191#
192# void pbtools_repeated_info_decode_double(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
193# raise NotImplementedError()
194#
195# void decode_repeated_double(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_double_t *repeated_p):
196# raise NotImplementedError()
197#
198# void pbtools_repeated_info_decode_bool(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
199# raise NotImplementedError()
200#
201# void decode_repeated_bool(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_bool_t *repeated_p):
202# raise NotImplementedError()
203#
204# void pbtools_repeated_info_decode_string(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
205# raise NotImplementedError()
206#
207# void decode_repeated_string(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_string_t *repeated_p):
208# raise NotImplementedError()
209#
210# void pbtools_repeated_info_decode_bytes(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
211# raise NotImplementedError()
212#
213# void decode_repeated_bytes(self, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_bytes_t *repeated_p):
214# raise NotImplementedError()
216 func skip_field(self, wire_type: WireType):
217 match wire_type:
218 case WireType.Varint:
219 self.read_varint()
220 case WireType.Bits64:
221 self.seek(8)
222 case WireType.LengthDelimited:
223 value = self.read_length_delimited(wire_type)
224 self.seek(i64(value))
225 case WireType.Bits32:
226 self.seek(4)
227 case _:
228 raise PbtoolsError("Bad wire type")
230# void pbtools_bytes_init(struct pbtools_bytes_t *self_p):
231# raise NotImplementedError()
232#
233# void *pbtools_message_new(void *workspace_p, size_t size, size_t message_size, pbtools_message_init_t message_init):
234# raise NotImplementedError()
235#
236# int pbtools_message_encode(struct pbtools_message_base_t *self_p, uint8_t *encoded_p, size_t size, pbtools_message_encode_inner_t message_encode_inner):
237# raise NotImplementedError()
238#
239# int pbtools_message_decode(struct pbtools_message_base_t *self_p, const uint8_t *encoded_p, size_t size, pbtools_message_decode_inner_t message_decode_inner):
240# raise NotImplementedError()
241#
242# void pbtools_encode_repeated_inner(struct pbtools_encoder_t *encoder_p, int field_number, struct pbtools_repeated_message_t *repeated_p, size_t item_size, pbtools_message_encode_inner_t message_encode_inner):
243# raise NotImplementedError()
244#
245# void pbtools_decode_repeated_inner(struct t *decoder_p, struct pbtools_repeated_info_t *repeated_info_p, struct pbtools_repeated_message_t *repeated_p, size_t item_size, pbtools_message_init_t message_init, pbtools_message_decode_inner_t message_decode_inner):
246# raise NotImplementedError()
247#
248# void pbtools_encoder_sub_message_encode(struct pbtools_encoder_t *self_p, int field_number, struct pbtools_message_base_t *message_p, pbtools_message_encode_inner_t encode_inner):
249# raise NotImplementedError()
250#
251# void pbtools_encoder_sub_message_encode_always(struct pbtools_encoder_t *self_p, int field_number, struct pbtools_message_base_t *message_p, pbtools_message_encode_inner_t encode_inner):
252# raise NotImplementedError()
253#
254# void sub_message_decode(self, int wire_type, struct pbtools_message_base_t **message_pp, size_t sub_message_size, pbtools_message_init_t message_init, pbtools_message_decode_inner_t decode_inner):
255# raise NotImplementedError()
256#
257# const char *pbtools_error_code_to_string(int code):
258# raise NotImplementedError()
259#
260# void pbtools_repeated_info_init(struct pbtools_repeated_info_t *self_p, int tag):
261# raise NotImplementedError()
262#
263# void pbtools_repeated_info_decode(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
264# raise NotImplementedError()
265#
266# void pbtools_repeated_numeric_scalar_info_decode(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
267# raise NotImplementedError()
268#
269# void pbtools_repeated_varint_info_decode(struct pbtools_repeated_info_t *self_p, struct t *decoder_p, int wire_type):
270# raise NotImplementedError()