aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2018-03-26 22:02:12 +0300
committerOskari Timperi <oskari.timperi@iki.fi>2018-03-26 22:02:12 +0300
commit1defb9b10928fbd4b7b3c94dbab8432a83e9e9cd (patch)
tree5ced3a2093f738f2df23b2c1aadc1e5ae296902f /examples
parent75cb6cac987c21eeb7af806d0e610a7969e8875e (diff)
downloadnimpb-1defb9b10928fbd4b7b3c94dbab8432a83e9e9cd.tar.gz
nimpb-1defb9b10928fbd4b7b3c94dbab8432a83e9e9cd.zip
Add addressbook example
Diffstat (limited to 'examples')
-rw-r--r--examples/addressbook/Makefile12
-rw-r--r--examples/addressbook/addressbook.proto24
-rw-r--r--examples/addressbook/addressbook_pb.nim96
-rw-r--r--examples/addressbook/nim.cfg1
-rw-r--r--examples/addressbook/reader.nim19
-rw-r--r--examples/addressbook/writer.nim37
6 files changed, 189 insertions, 0 deletions
diff --git a/examples/addressbook/Makefile b/examples/addressbook/Makefile
new file mode 100644
index 0000000..7fe8add
--- /dev/null
+++ b/examples/addressbook/Makefile
@@ -0,0 +1,12 @@
+PLUGIN = ../../generator/protoc_gen_nim
+
+all: writer reader
+
+writer: writer.nim addressbook_pb.nim
+ nim c writer.nim
+
+reader: reader.nim addressbook_pb.nim
+ nim c reader.nim
+
+addressbook_pb.nim: addressbook.proto
+ protoc --plugin=protoc-gen-nim=$(PLUGIN) --nim_out=. -I. addressbook.proto
diff --git a/examples/addressbook/addressbook.proto b/examples/addressbook/addressbook.proto
new file mode 100644
index 0000000..5e04629
--- /dev/null
+++ b/examples/addressbook/addressbook.proto
@@ -0,0 +1,24 @@
+syntax = "proto3";
+
+message Person {
+ string name = 1;
+ int32 id = 2;
+ string email = 3;
+
+ enum PhoneType {
+ MOBILE = 0;
+ HOME = 1;
+ WORK = 2;
+ }
+
+ message PhoneNumber {
+ string number = 1;
+ PhoneType type = 2; // [default = HOME]; default values not supported yet
+ }
+
+ repeated PhoneNumber phones = 4;
+}
+
+message AddressBook {
+ repeated Person people = 1;
+}
diff --git a/examples/addressbook/addressbook_pb.nim b/examples/addressbook/addressbook_pb.nim
new file mode 100644
index 0000000..8a37fb4
--- /dev/null
+++ b/examples/addressbook/addressbook_pb.nim
@@ -0,0 +1,96 @@
+# Generated by protoc_gen_nim. Do not edit!
+
+import intsets
+
+import protobuf/gen
+import protobuf/stream
+import protobuf/types
+
+const
+ Person_PhoneTypeDesc = EnumDesc(
+ name: "Person_PhoneType",
+ values: @[
+ EnumValueDesc(name: "MOBILE", number: 0),
+ EnumValueDesc(name: "HOME", number: 1),
+ EnumValueDesc(name: "WORK", number: 2),
+ ]
+ )
+ Person_PhoneNumberDesc = MessageDesc(
+ name: "Person_PhoneNumber",
+ fields: @[
+ FieldDesc(
+ name: "number",
+ number: 1,
+ ftype: FieldType.String,
+ label: FieldLabel.Optional,
+ typeName: "",
+ packed: false,
+ ),
+ FieldDesc(
+ name: "type",
+ number: 2,
+ ftype: FieldType.Enum,
+ label: FieldLabel.Optional,
+ typeName: "Person_PhoneType",
+ packed: false,
+ ),
+ ]
+ )
+ PersonDesc = MessageDesc(
+ name: "Person",
+ fields: @[
+ FieldDesc(
+ name: "name",
+ number: 1,
+ ftype: FieldType.String,
+ label: FieldLabel.Optional,
+ typeName: "",
+ packed: false,
+ ),
+ FieldDesc(
+ name: "id",
+ number: 2,
+ ftype: FieldType.Int32,
+ label: FieldLabel.Optional,
+ typeName: "",
+ packed: false,
+ ),
+ FieldDesc(
+ name: "email",
+ number: 3,
+ ftype: FieldType.String,
+ label: FieldLabel.Optional,
+ typeName: "",
+ packed: false,
+ ),
+ FieldDesc(
+ name: "phones",
+ number: 4,
+ ftype: FieldType.Message,
+ label: FieldLabel.Repeated,
+ typeName: "Person_PhoneNumber",
+ packed: false,
+ ),
+ ]
+ )
+ AddressBookDesc = MessageDesc(
+ name: "AddressBook",
+ fields: @[
+ FieldDesc(
+ name: "people",
+ number: 1,
+ ftype: FieldType.Message,
+ label: FieldLabel.Repeated,
+ typeName: "Person",
+ packed: false,
+ ),
+ ]
+ )
+generateEnumType(Person_PhoneTypeDesc)
+generateEnumProcs(Person_PhoneTypeDesc)
+generateMessageType(Person_PhoneNumberDesc)
+generateMessageProcs(Person_PhoneNumberDesc)
+generateMessageType(PersonDesc)
+generateMessageProcs(PersonDesc)
+generateMessageType(AddressBookDesc)
+generateMessageProcs(AddressBookDesc)
diff --git a/examples/addressbook/nim.cfg b/examples/addressbook/nim.cfg
new file mode 100644
index 0000000..11736fc
--- /dev/null
+++ b/examples/addressbook/nim.cfg
@@ -0,0 +1 @@
+--path:"../../src"
diff --git a/examples/addressbook/reader.nim b/examples/addressbook/reader.nim
new file mode 100644
index 0000000..4db86cc
--- /dev/null
+++ b/examples/addressbook/reader.nim
@@ -0,0 +1,19 @@
+import streams
+import strformat
+
+import protobuf/stream
+
+import addressbook_pb
+
+let pbsi = newProtobufStream(newFileStream("addressbook.dat"))
+
+let addressBook = readAddressBook(pbsi)
+
+for person in addressBook.people:
+ echo("---")
+ echo(&"Id: {person.id}")
+ echo(&"Name: {person.name}")
+ echo(&"Email: {person.email}")
+ echo("Phones:")
+ for phone in person.phones:
+ echo(&" {phone.type} {phone.number}")
diff --git a/examples/addressbook/writer.nim b/examples/addressbook/writer.nim
new file mode 100644
index 0000000..6d32005
--- /dev/null
+++ b/examples/addressbook/writer.nim
@@ -0,0 +1,37 @@
+import streams
+
+import protobuf/stream
+
+import addressbook_pb
+
+let addressBook = newAddressBook()
+
+let john = newPerson()
+setName(john, "John Doe")
+setId(john, 1)
+setEmail(john, "john.doe@example.com")
+addPeople(addressBook, john)
+
+let johnPhone1 = newPerson_PhoneNumber()
+setNumber(johnPhone1, "1234")
+setType(johnPhone1, MOBILE)
+addPhones(john, johnPhone1)
+
+let johnPhone2 = newPerson_PhoneNumber()
+setNumber(johnPhone2, "5566")
+setType(johnPhone2, WORK)
+addPhones(john, johnPhone2)
+
+let jane = newPerson()
+setName(jane, "Jane Doe")
+setId(jane, 2)
+setEmail(jane, "jane.doe@example.com")
+addPeople(addressBook, jane)
+
+let janePhone1 = newPerson_PhoneNumber()
+setNumber(janePhone1, "1432")
+setType(janePhone1, HOME)
+addPhones(jane, janePhone1)
+
+let pbso = newProtobufStream(newFileStream("addressbook.dat", fmWrite))
+writeAddressBook(pbso, addressBook)