diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2018-04-01 12:02:33 +0300 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2018-04-01 12:02:33 +0300 |
| commit | a3e745f084d3990e8fe2de03110c1d318246560a (patch) | |
| tree | 5096680cbfa5084821fd39b3dc8a81c3f9a084fb | |
| parent | 2e65c90a04a399215290df824ef90168922946e4 (diff) | |
| download | nimpb-a3e745f084d3990e8fe2de03110c1d318246560a.tar.gz nimpb-a3e745f084d3990e8fe2de03110c1d318246560a.zip | |
Add a new simple example
| -rw-r--r-- | examples/simple/Makefile | 9 | ||||
| -rw-r--r-- | examples/simple/nim.cfg | 1 | ||||
| -rw-r--r-- | examples/simple/simple.nim | 12 | ||||
| -rw-r--r-- | examples/simple/simple.proto | 12 | ||||
| -rw-r--r-- | examples/simple/simple_pb.nim | 113 |
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) + + |
