aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2018-04-01 12:02:33 +0300
committerOskari Timperi <oskari.timperi@iki.fi>2018-04-01 12:02:33 +0300
commita3e745f084d3990e8fe2de03110c1d318246560a (patch)
tree5096680cbfa5084821fd39b3dc8a81c3f9a084fb
parent2e65c90a04a399215290df824ef90168922946e4 (diff)
downloadnimpb-a3e745f084d3990e8fe2de03110c1d318246560a.tar.gz
nimpb-a3e745f084d3990e8fe2de03110c1d318246560a.zip
Add a new simple example
-rw-r--r--examples/simple/Makefile9
-rw-r--r--examples/simple/nim.cfg1
-rw-r--r--examples/simple/simple.nim12
-rw-r--r--examples/simple/simple.proto12
-rw-r--r--examples/simple/simple_pb.nim113
5 files changed, 147 insertions, 0 deletions
diff --git a/examples/simple/Makefile b/examples/simple/Makefile
new file mode 100644
index 0000000..ff24675
--- /dev/null
+++ b/examples/simple/Makefile
@@ -0,0 +1,9 @@
+PLUGIN = ../../generator/protoc_gen_nim
+
+all: simple
+
+simple: simple.nim simple_pb.nim
+ nim c simple.nim
+
+simple_pb.nim: simple.proto
+ protoc --plugin=protoc-gen-nim=$(PLUGIN) --nim_out=. -I. simple.proto
diff --git a/examples/simple/nim.cfg b/examples/simple/nim.cfg
new file mode 100644
index 0000000..11736fc
--- /dev/null
+++ b/examples/simple/nim.cfg
@@ -0,0 +1 @@
+--path:"../../src"
diff --git a/examples/simple/simple.nim b/examples/simple/simple.nim
new file mode 100644
index 0000000..ffc65e1
--- /dev/null
+++ b/examples/simple/simple.nim
@@ -0,0 +1,12 @@
+import simple_pb
+
+let message = newTest1()
+message.a = 150
+message.e = Test1_MyEnum.Bar
+
+let data = serialize(message)
+
+let message2 = newTest1(data)
+
+assert message2.a == 150
+assert message2.e == Test1_MyEnum.Bar
diff --git a/examples/simple/simple.proto b/examples/simple/simple.proto
new file mode 100644
index 0000000..51583cf
--- /dev/null
+++ b/examples/simple/simple.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+
+message Test1 {
+ int32 a = 1;
+
+ enum MyEnum {
+ Foo = 0;
+ Bar = 1;
+ }
+
+ MyEnum e = 2;
+}
diff --git a/examples/simple/simple_pb.nim b/examples/simple/simple_pb.nim
new file mode 100644
index 0000000..6de8b3f
--- /dev/null
+++ b/examples/simple/simple_pb.nim
@@ -0,0 +1,113 @@
+# Generated by protoc_gen_nim. Do not edit!
+
+import intsets
+
+import protobuf/stream
+import protobuf/types
+
+type
+ Test1_MyEnum* {.pure.} = enum
+ Foo = 0
+ Bar = 1
+ Test1* = ref Test1Obj
+ Test1Obj* = object of RootObj
+ hasField: IntSet
+ a: int32
+ e: Test1_MyEnum
+
+proc readTest1_MyEnum*(stream: ProtobufStream): Test1_MyEnum =
+ Test1_MyEnum(readUInt32(stream))
+
+proc writeTest1_MyEnum*(stream: ProtobufStream, value: Test1_MyEnum) =
+ writeUInt32(stream, uint32(value))
+
+proc sizeOfTest1_MyEnum*(value: Test1_MyEnum): uint64 =
+ sizeOfUInt32(uint32(value))
+
+proc newTest1*(): Test1 =
+ new(result)
+ result.hasField = initIntSet()
+ result.a = 0
+ result.e = Test1_MyEnum(0)
+
+proc cleara*(message: Test1) =
+ message.a = 0
+ excl(message.hasField, 1)
+
+proc hasa*(message: Test1): bool =
+ result = contains(message.hasField, 1)
+
+proc seta*(message: Test1, value: int32) =
+ message.a = value
+ incl(message.hasField, 1)
+
+proc a*(message: Test1): int32 {.inline.} =
+ message.a
+
+proc `a=`*(message: Test1, value: int32) {.inline.} =
+ seta(message, value)
+
+proc cleare*(message: Test1) =
+ message.e = Test1_MyEnum(0)
+ excl(message.hasField, 2)
+
+proc hase*(message: Test1): bool =
+ result = contains(message.hasField, 2)
+
+proc sete*(message: Test1, value: Test1_MyEnum) =
+ message.e = value
+ incl(message.hasField, 2)
+
+proc e*(message: Test1): Test1_MyEnum {.inline.} =
+ message.e
+
+proc `e=`*(message: Test1, value: Test1_MyEnum) {.inline.} =
+ sete(message, value)
+
+proc sizeOfTest1*(message: Test1): uint64 =
+ if hasa(message):
+ let
+ sizeOfField = sizeOfInt32(message.a)
+ sizeOfTag = sizeOfUInt32(uint32(makeTag(1, WireType.Varint)))
+ result = result + sizeOfField + sizeOfTag
+ if hase(message):
+ let
+ sizeOfField = sizeOfTest1_MyEnum(message.e)
+ sizeOfTag = sizeOfUInt32(uint32(makeTag(2, WireType.Varint)))
+ result = result + sizeOfField + sizeOfTag
+
+proc writeTest1*(stream: ProtobufStream, message: Test1) =
+ if hasa(message):
+ writeTag(stream, 1, WireType.Varint)
+ writeInt32(stream, message.a)
+ if hase(message):
+ writeTag(stream, 2, WireType.Varint)
+ writeTest1_MyEnum(stream, message.e)
+
+proc readTest1*(stream: ProtobufStream): Test1 =
+ result = newTest1()
+ while not atEnd(stream):
+ let
+ tag = readTag(stream)
+ wireType = getTagWireType(tag)
+ case getTagFieldNumber(tag)
+ of 1:
+ seta(result, readInt32(stream))
+ of 2:
+ sete(result, readTest1_MyEnum(stream))
+ else: skipField(stream, wireType)
+
+proc serialize*(message: Test1): string =
+ let
+ ss = newStringStream()
+ pbs = newProtobufStream(ss)
+ writeTest1(pbs, message)
+ result = ss.data
+
+proc newTest1*(data: string): Test1 =
+ let
+ ss = newStringStream(data)
+ pbs = newProtobufStream(ss)
+ result = readTest1(pbs)
+
+