diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2018-03-31 12:40:39 +0300 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2018-03-31 12:40:39 +0300 |
| commit | e12f638e822c010126232846c09136e5e2b7f6d8 (patch) | |
| tree | b39f2af7cf8eae38f9cea763679c7565223d04cf /src | |
| parent | 9ad3652425777de5d09aefe74c3f0166d92a87fe (diff) | |
| download | nimpb-e12f638e822c010126232846c09136e5e2b7f6d8.tar.gz nimpb-e12f638e822c010126232846c09136e5e2b7f6d8.zip | |
Generate serialize/deserialize convenience procs
Diffstat (limited to 'src')
| -rw-r--r-- | src/protobuf/gen.nim | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/protobuf/gen.nim b/src/protobuf/gen.nim index acf9504..ed6ee5a 100644 --- a/src/protobuf/gen.nim +++ b/src/protobuf/gen.nim @@ -544,6 +544,35 @@ proc generateSizeOfMessageProc(desc: NimNode): NimNode = asgn[1] = infix(asgn[1], "+", newCall(ident("sizeOfUint64"), sizeOfFieldId)) +proc generateSerializeProc(desc: NimNode): NimNode = + let + mtype = ident(getMessageName(desc)) + procName = postfix(ident("serialize"), "*") + writer = ident("write" & getMessageName(desc)) + resultId = ident("result") + + result = quote do: + proc `procName`(message: `mtype`): string = + let + ss = newStringStream() + pbs = newProtobufStream(ss) + `writer`(pbs, message) + `resultId` = ss.data + +proc generateDeserializeProc(desc: NimNode): NimNode = + let + mtype = ident(getMessageName(desc)) + procName = postfix(ident("new" & getMessageName(desc)), "*") + reader = ident("read" & getMessageName(desc)) + resultId = ident("result") + + result = quote do: + proc `procName`(data: string): `mtype` = + let + ss = newStringStream(data) + pbs = newProtobufStream(ss) + `resultId` = `reader`(pbs) + macro generateMessageProcs*(x: typed): typed = let desc = getImpl(symbol(x)) @@ -563,6 +592,8 @@ macro generateMessageProcs*(x: typed): typed = add(result, generateWriteMessageProc(desc)) add(result, generateReadMessageProc(desc)) add(result, generateSizeOfMessageProc(desc)) + add(result, generateSerializeProc(desc)) + add(result, generateDeserializeProc(desc)) when defined(debug): hint(repr(result)) |
