aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--generator/protoc_gen_nim.nim2
-rw-r--r--src/protobuf/stream.nim4
2 files changed, 6 insertions, 0 deletions
diff --git a/generator/protoc_gen_nim.nim b/generator/protoc_gen_nim.nim
index 227005e..a05172a 100644
--- a/generator/protoc_gen_nim.nim
+++ b/generator/protoc_gen_nim.nim
@@ -661,6 +661,8 @@ iterator genReadMessageProc(msg: Message): string =
yield indent("tag = readTag(stream)", 12)
yield indent("wireType = getTagWireType(tag)", 12)
yield indent("case getTagFieldNumber(tag)", 8)
+ yield indent("of 0:", 8)
+ yield indent("raise newException(InvalidFieldNumberError, \"Invalid field number: 0\")", 12)
for field in msg.fields:
let
reader = &"read{field.typeName}"
diff --git a/src/protobuf/stream.nim b/src/protobuf/stream.nim
index 6f3b503..a0b650d 100644
--- a/src/protobuf/stream.nim
+++ b/src/protobuf/stream.nim
@@ -18,6 +18,10 @@ type
Tag* = distinct uint32
+ ParseError* = object of Exception
+
+ InvalidFieldNumberError* = object of ParseError
+
proc pbClose(s: Stream) =
close(ProtobufStream(s).stream)
ProtobufStream(s).stream = nil