aboutsummaryrefslogtreecommitdiff
path: root/src/nimpb_buildpkg/plugin.nim
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2018-04-06 18:32:34 +0300
committerOskari Timperi <oskari.timperi@iki.fi>2018-04-06 18:32:34 +0300
commitff443dfdf28bf97c933344cc6dbf60f4023e4162 (patch)
tree2489c9ff2eb02f3f68fefc643407c30fe3ce1e31 /src/nimpb_buildpkg/plugin.nim
parent24a650752d347acca240298e554ea32e127b100e (diff)
downloadnimpb_protoc-ff443dfdf28bf97c933344cc6dbf60f4023e4162.tar.gz
nimpb_protoc-ff443dfdf28bf97c933344cc6dbf60f4023e4162.zip
Generate a bit less code
Diffstat (limited to 'src/nimpb_buildpkg/plugin.nim')
-rw-r--r--src/nimpb_buildpkg/plugin.nim17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/nimpb_buildpkg/plugin.nim b/src/nimpb_buildpkg/plugin.nim
index 70efc1b..7ae60c5 100644
--- a/src/nimpb_buildpkg/plugin.nim
+++ b/src/nimpb_buildpkg/plugin.nim
@@ -725,22 +725,16 @@ iterator genReadMessageProc(msg: Message): string =
yield indent(&"{setter}(result, {field.readProc}(stream))", 16)
elif isMessage(field):
yield indent(&"expectWireType(wireType, {field.wiretypeStr})", 12)
- yield indent("let", 12)
- yield indent("size = readVarint(stream)", 16)
- yield indent("data = safeReadStr(stream, int(size))", 16)
- yield indent("pbs = newProtobufStream(newStringStream(data))", 16)
- yield indent(&"{setter}(result, {field.readProc}(pbs))", 12)
+ yield indent(&"let data = readLengthDelimited(stream)", 12)
+ yield indent(&"{setter}(result, new{field.typeName}(data))", 12)
else:
yield indent(&"expectWireType(wireType, {field.wiretypeStr})", 12)
yield indent(&"{setter}(result, {field.readProc}(stream))", 12)
else:
yield indent(&"expectWireType(wireType, {field.wiretypeStr})", 12)
if isMessage(field):
- yield indent("let", 12)
- yield indent("size = readVarint(stream)", 16)
- yield indent("data = safeReadStr(stream, int(size))", 16)
- yield indent("pbs = newProtobufStream(newStringStream(data))", 16)
- yield indent(&"{setter}(result, {field.readProc}(pbs))", 12)
+ yield indent("let data = readLengthDelimited(stream)", 12)
+ yield indent(&"{setter}(result, new{field.typeName}(data))", 12)
else:
yield indent(&"{setter}(result, {field.readProc}(stream))", 12)
yield indent("else: skipField(stream, wireType)", 8)
@@ -802,8 +796,11 @@ iterator genSizeOfMessageProc(msg: Message): string =
yield ""
iterator genMessageProcForwards(msg: Message): string =
+ # TODO: can we be more intelligent and only forward declare the minimum set
+ # of procs?
if not isMapEntry(msg):
yield &"proc new{msg.names}*(): {msg.names}"
+ yield &"proc new{msg.names}*(data: string): {msg.names}"
yield &"proc write{msg.names}*(stream: ProtobufStream, message: {msg.names})"
yield &"proc read{msg.names}*(stream: ProtobufStream): {msg.names}"
yield &"proc sizeOf{msg.names}*(message: {msg.names}): uint64"