Skip to content

Commit

Permalink
Playing around with Mys.
Browse files Browse the repository at this point in the history
  • Loading branch information
eerimoq committed Mar 6, 2022
1 parent ad30e16 commit 846219a
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 9 deletions.
12 changes: 7 additions & 5 deletions examples/address_book/mys/src/address_book.mys
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,10 @@ class Person:
case 3:
self.email = decoder.read_string(wire_type)
case 4:
decoder.read_length_delimited(WireType.LengthDelimited)
phone = PersonPhoneNumber("", PersonPhoneType.Mobile)
phone.from_bytes_inner(decoder)
phone.from_bytes_inner(
decoder.slice(i64(
decoder.read_length_delimited(WireType.LengthDelimited))))
self.phones.append(phone)
case _:
decoder.skip_field(wire_type)
Expand All @@ -90,7 +91,7 @@ class AddressBook:

def from_bytes(self, data: bytes):
self.clear()
self.from_bytes_inner(Decoder(data))
self.from_bytes_inner(Decoder(data, 0, i64(len(data))))

def to_bytes_inner(self, encoder: Encoder):
for person in reversed(self.people):
Expand All @@ -104,9 +105,10 @@ class AddressBook:

match field_number:
case 1:
decoder.read_length_delimited(WireType.LengthDelimited)
person = Person("", 0, "", [])
person.from_bytes_inner(decoder)
person.from_bytes_inner(
decoder.slice(i64(
decoder.read_length_delimited(WireType.LengthDelimited))))
self.people.append(person)
case _:
decoder.skip_field(wire_type)
1 change: 1 addition & 0 deletions examples/address_book/mys/src/main.mys
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ def main():
])
])

print(address_book)
encoded = address_book.to_bytes()
assert encoded == (b"\x0a\x49\x0a\x0a\x4b\x61\x6c\x6c\x65\x20"
b"\x4b\x75\x6c\x61\x10\x38\x1a\x15\x6b\x61"
Expand Down
10 changes: 6 additions & 4 deletions examples/address_book/mys/src/pbtools.mys
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,15 @@ class Encoder:
class Decoder:
data: bytes
pos: i64
length: i64

def __init__(self, data: bytes):
self.data = data
self.pos = 0
def slice(self, length: i64) -> Decoder:
self.pos += length

return Decoder(self.data, self.pos - length, self.pos)

def available(self) -> bool:
return self.pos < i64(len(self.data))
return self.pos < self.length

def get(self) -> u8:
if not self.available():
Expand Down

0 comments on commit 846219a

Please sign in to comment.