diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2018-03-24 20:27:07 +0200 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2018-03-24 20:27:07 +0200 |
| commit | 2bb5e58606d58161d9982766b2468d082756334c (patch) | |
| tree | 76c4338bf510cbac253b51b99b937fb4628c4c30 /src | |
| parent | 02ededcd1b5f420847cf3be8322b4efaaf769e41 (diff) | |
| download | nimpb-2bb5e58606d58161d9982766b2468d082756334c.tar.gz nimpb-2bb5e58606d58161d9982766b2468d082756334c.zip | |
Clean up generateWriteMessageProc() and genWriteField()
Diffstat (limited to 'src')
| -rw-r--r-- | src/protobuf/gen.nim | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/protobuf/gen.nim b/src/protobuf/gen.nim index 06805b6..9f86bc4 100644 --- a/src/protobuf/gen.nim +++ b/src/protobuf/gen.nim @@ -254,50 +254,50 @@ proc genWriteField(field: NimNode): NimNode = writer = ident("write" & getFieldTypeAsString(field)) fname = newDotExpr(ident("message"), ident(getFieldName(field))) wiretype = ident(wiretype(field)) + sizeproc = ident("sizeOf" & getFieldTypeAsString(field)) + hasproc = ident(fieldProcName("has", field)) if not isRepeated(field): result.add quote do: - writeTag(stream, `number`, `wiretype`) - `writer`(stream, `fname`) + if `hasproc`(message): + writeTag(stream, `number`, `wiretype`) + `writer`(stream, `fname`) if isMessage(field): - insert(result[^1], 1, newCall(ident("writeVarint"), ident("stream"), - newCall(ident("sizeOf" & getFieldTypeAsString(field)), fname))) + insert(result[0][0][1], 1, quote do: + writeVarint(stream, `sizeproc`(`fname`)) + ) else: + let valueId = ident("value") if isPacked(field): result.add quote do: writeTag(stream, `number`, WireType.LengthDelimited) writeVarInt(stream, packedFieldSize(`fname`, `wiretype`)) - for value in `fname`: - `writer`(stream, value) + for `valueId` in `fname`: + `writer`(stream, `valueId`) else: - let valueId = ident("value") result.add quote do: for `valueId` in `fname`: writeTag(stream, `number`, `wiretype`) `writer`(stream, `valueId`) if isMessage(field): - insert(result[^1][^1], 1, newCall(ident("writeVarint"), ident("stream"), - newCall(ident("sizeOf" & getFieldTypeAsString(field)), valueId))) + insert(result[^1][^1], 1, quote do: + writeVarint(stream, `sizeproc`(`valueId`)) + ) proc generateWriteMessageProc(desc: NimNode): NimNode = - let body = newStmtList() - - let name = getMessageName(desc) + let + messageId = ident("message") + mtype = ident(getMessageName(desc)) + procName = postfix(ident("write" & getMessageName(desc)), "*") + body = newStmtList() + stream = ident("stream") for field in fields(desc): - add(body, nnkIfStmt.newTree( - nnkElifBranch.newTree( - newCall(ident("has" & capitalizeAscii(getFieldName(field))), - ident("message")), - genWriteField(field) - ) - )) + add(body, genWriteField(field)) - result = newProc(postfix(ident("write" & name), "*"), - @[newEmptyNode(), - newIdentDefs(ident("stream"), ident("ProtobufStream")), - newIdentDefs(ident("message"), ident(name))], - body) + result = quote do: + proc `procName`(`stream`: ProtobufStream, `messageId`: `mtype`) = + `body` proc generateReadMessageProc(desc: NimNode): NimNode = let name = getMessageName(desc) |
