aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2018-04-02 11:32:22 +0300
committerOskari Timperi <oskari.timperi@iki.fi>2018-04-02 11:39:35 +0300
commitc4c34c5974ea373288bd29df25ee5fd50325daa2 (patch)
tree6c430da414c6fe1d2556e6a3076abf4b7b81c291 /src
parentf189bb22d71d4e25984c8d1e72c37a4a9823d2b2 (diff)
downloadnimpb-c4c34c5974ea373288bd29df25ee5fd50325daa2.tar.gz
nimpb-c4c34c5974ea373288bd29df25ee5fd50325daa2.zip
Validate wire types
Diffstat (limited to 'src')
-rw-r--r--src/protobuf/stream.nim11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/protobuf/stream.nim b/src/protobuf/stream.nim
index a0b650d..d7eeadd 100644
--- a/src/protobuf/stream.nim
+++ b/src/protobuf/stream.nim
@@ -1,5 +1,6 @@
import endians
import streams
+import strutils
import types
@@ -22,6 +23,8 @@ type
InvalidFieldNumberError* = object of ParseError
+ UnexpectedWireTypeError* = object of ParseError
+
proc pbClose(s: Stream) =
close(ProtobufStream(s).stream)
ProtobufStream(s).stream = nil
@@ -336,3 +339,11 @@ proc skipField*(stream: ProtobufStream, wiretype: WireType) =
discard readStr(stream, int(size))
else:
raise newException(Exception, "unsupported wiretype: " & $wiretype)
+
+proc expectWireType*(actual: WireType, expected: varargs[WireType]) =
+ for exp in expected:
+ if actual == exp:
+ return
+ let message = "Got wiretype " & $actual & " but expected: " &
+ join(expected, ", ")
+ raise newException(UnexpectedWireTypeError, message)