diff options
Diffstat (limited to 'examples/addressbook/addressbook_pb.nim')
| -rw-r--r-- | examples/addressbook/addressbook_pb.nim | 135 |
1 files changed, 78 insertions, 57 deletions
diff --git a/examples/addressbook/addressbook_pb.nim b/examples/addressbook/addressbook_pb.nim index d2255fe..9e863a0 100644 --- a/examples/addressbook/addressbook_pb.nim +++ b/examples/addressbook/addressbook_pb.nim @@ -1,37 +1,42 @@ # Generated by protoc_gen_nim. Do not edit! +import base64 import intsets +import json import nimpb/nimpb +import nimpb/json as nimpb_json import phonenumber_pb type Person* = ref PersonObj - PersonObj* = object of RootObj - hasField: IntSet + PersonObj* = object of Message name: string id: int32 email: string phones: seq[PhoneNumber] AddressBook* = ref AddressBookObj - AddressBookObj* = object of RootObj - hasField: IntSet + AddressBookObj* = object of Message people: seq[Person] proc newPerson*(): Person -proc writePerson*(stream: ProtobufStream, message: Person) -proc readPerson*(stream: ProtobufStream): Person +proc newPerson*(data: string): Person +proc writePerson*(stream: Stream, message: Person) +proc readPerson*(stream: Stream): Person proc sizeOfPerson*(message: Person): uint64 +proc toJson*(message: Person): JsonNode proc newAddressBook*(): AddressBook -proc writeAddressBook*(stream: ProtobufStream, message: AddressBook) -proc readAddressBook*(stream: ProtobufStream): AddressBook +proc newAddressBook*(data: string): AddressBook +proc writeAddressBook*(stream: Stream, message: AddressBook) +proc readAddressBook*(stream: Stream): AddressBook proc sizeOfAddressBook*(message: AddressBook): uint64 +proc toJson*(message: AddressBook): JsonNode proc newPerson*(): Person = new(result) - result.hasField = initIntSet() + initMessage(result[]) result.name = "" result.id = 0 result.email = "" @@ -39,14 +44,14 @@ proc newPerson*(): Person = proc clearname*(message: Person) = message.name = "" - excl(message.hasField, [1]) + clearFields(message, [1]) proc hasname*(message: Person): bool = - result = contains(message.hasField, 1) + result = hasField(message, 1) proc setname*(message: Person, value: string) = message.name = value - incl(message.hasField, 1) + setField(message, 1) proc name*(message: Person): string {.inline.} = message.name @@ -56,14 +61,14 @@ proc `name=`*(message: Person, value: string) {.inline.} = proc clearid*(message: Person) = message.id = 0 - excl(message.hasField, [2]) + clearFields(message, [2]) proc hasid*(message: Person): bool = - result = contains(message.hasField, 2) + result = hasField(message, 2) proc setid*(message: Person, value: int32) = message.id = value - incl(message.hasField, 2) + setField(message, 2) proc id*(message: Person): int32 {.inline.} = message.id @@ -73,14 +78,14 @@ proc `id=`*(message: Person, value: int32) {.inline.} = proc clearemail*(message: Person) = message.email = "" - excl(message.hasField, [3]) + clearFields(message, [3]) proc hasemail*(message: Person): bool = - result = contains(message.hasField, 3) + result = hasField(message, 3) proc setemail*(message: Person, value: string) = message.email = value - incl(message.hasField, 3) + setField(message, 3) proc email*(message: Person): string {.inline.} = message.email @@ -90,18 +95,18 @@ proc `email=`*(message: Person, value: string) {.inline.} = proc clearphones*(message: Person) = message.phones = @[] - excl(message.hasField, [4]) + clearFields(message, [4]) proc hasphones*(message: Person): bool = - result = contains(message.hasField, 4) or (len(message.phones) > 0) + result = hasField(message, 4) or (len(message.phones) > 0) proc setphones*(message: Person, value: seq[PhoneNumber]) = message.phones = value - incl(message.hasField, 4) + setField(message, 4) proc addphones*(message: Person, value: PhoneNumber) = add(message.phones, value) - incl(message.hasField, 4) + setField(message, 4) proc phones*(message: Person): seq[PhoneNumber] {.inline.} = message.phones @@ -122,18 +127,20 @@ proc sizeOfPerson*(message: Person): uint64 = for value in message.phones: result = result + sizeOfTag(4, WireType.LengthDelimited) result = result + sizeOfLengthDelimited(sizeOfPhoneNumber(value)) + result = result + sizeOfUnknownFields(message) -proc writePerson*(stream: ProtobufStream, message: Person) = +proc writePerson*(stream: Stream, message: Person) = if hasname(message): - writeString(stream, message.name, 1) + protoWriteString(stream, message.name, 1) if hasid(message): - writeInt32(stream, message.id, 2) + protoWriteInt32(stream, message.id, 2) if hasemail(message): - writeString(stream, message.email, 3) + protoWriteString(stream, message.email, 3) for value in message.phones: writeMessage(stream, value, 4) + writeUnknownFields(stream, message) -proc readPerson*(stream: ProtobufStream): Person = +proc readPerson*(stream: Stream): Person = result = newPerson() while not atEnd(stream): let @@ -144,55 +151,64 @@ proc readPerson*(stream: ProtobufStream): Person = raise newException(InvalidFieldNumberError, "Invalid field number: 0") of 1: expectWireType(wireType, WireType.LengthDelimited) - setname(result, readString(stream)) + setname(result, protoReadString(stream)) of 2: expectWireType(wireType, WireType.Varint) - setid(result, readInt32(stream)) + setid(result, protoReadInt32(stream)) of 3: expectWireType(wireType, WireType.LengthDelimited) - setemail(result, readString(stream)) + setemail(result, protoReadString(stream)) of 4: expectWireType(wireType, WireType.LengthDelimited) - let - size = readVarint(stream) - data = safeReadStr(stream, int(size)) - pbs = newProtobufStream(newStringStream(data)) - addphones(result, readPhoneNumber(pbs)) - else: skipField(stream, wireType) + let data = readLengthDelimited(stream) + addphones(result, newPhoneNumber(data)) + else: readUnknownField(stream, result, tag) + +proc toJson*(message: Person): JsonNode = + result = newJObject() + if hasname(message): + result["name"] = %message.name + if hasid(message): + result["id"] = %message.id + if hasemail(message): + result["email"] = %message.email + if hasphones(message): + let arr = newJArray() + for value in message.phones: + add(arr, toJson(value)) + result["phones"] = arr proc serialize*(message: Person): string = let ss = newStringStream() - pbs = newProtobufStream(ss) - writePerson(pbs, message) + writePerson(ss, message) result = ss.data proc newPerson*(data: string): Person = let ss = newStringStream(data) - pbs = newProtobufStream(ss) - result = readPerson(pbs) + result = readPerson(ss) proc newAddressBook*(): AddressBook = new(result) - result.hasField = initIntSet() + initMessage(result[]) result.people = @[] proc clearpeople*(message: AddressBook) = message.people = @[] - excl(message.hasField, [1]) + clearFields(message, [1]) proc haspeople*(message: AddressBook): bool = - result = contains(message.hasField, 1) or (len(message.people) > 0) + result = hasField(message, 1) or (len(message.people) > 0) proc setpeople*(message: AddressBook, value: seq[Person]) = message.people = value - incl(message.hasField, 1) + setField(message, 1) proc addpeople*(message: AddressBook, value: Person) = add(message.people, value) - incl(message.hasField, 1) + setField(message, 1) proc people*(message: AddressBook): seq[Person] {.inline.} = message.people @@ -204,12 +220,14 @@ proc sizeOfAddressBook*(message: AddressBook): uint64 = for value in message.people: result = result + sizeOfTag(1, WireType.LengthDelimited) result = result + sizeOfLengthDelimited(sizeOfPerson(value)) + result = result + sizeOfUnknownFields(message) -proc writeAddressBook*(stream: ProtobufStream, message: AddressBook) = +proc writeAddressBook*(stream: Stream, message: AddressBook) = for value in message.people: writeMessage(stream, value, 1) + writeUnknownFields(stream, message) -proc readAddressBook*(stream: ProtobufStream): AddressBook = +proc readAddressBook*(stream: Stream): AddressBook = result = newAddressBook() while not atEnd(stream): let @@ -220,24 +238,27 @@ proc readAddressBook*(stream: ProtobufStream): AddressBook = raise newException(InvalidFieldNumberError, "Invalid field number: 0") of 1: expectWireType(wireType, WireType.LengthDelimited) - let - size = readVarint(stream) - data = safeReadStr(stream, int(size)) - pbs = newProtobufStream(newStringStream(data)) - addpeople(result, readPerson(pbs)) - else: skipField(stream, wireType) + let data = readLengthDelimited(stream) + addpeople(result, newPerson(data)) + else: readUnknownField(stream, result, tag) + +proc toJson*(message: AddressBook): JsonNode = + result = newJObject() + if haspeople(message): + let arr = newJArray() + for value in message.people: + add(arr, toJson(value)) + result["people"] = arr proc serialize*(message: AddressBook): string = let ss = newStringStream() - pbs = newProtobufStream(ss) - writeAddressBook(pbs, message) + writeAddressBook(ss, message) result = ss.data proc newAddressBook*(data: string): AddressBook = let ss = newStringStream(data) - pbs = newProtobufStream(ss) - result = readAddressBook(pbs) + result = readAddressBook(ss) |
