diff options
| -rw-r--r-- | nimpb/nimpb.nim | 11 | ||||
| -rw-r--r-- | tests/conformance/conformance_nim.nim | 4 |
2 files changed, 10 insertions, 5 deletions
diff --git a/nimpb/nimpb.nim b/nimpb/nimpb.nim index de648b1..f00bc87 100644 --- a/nimpb/nimpb.nim +++ b/nimpb/nimpb.nim @@ -347,9 +347,12 @@ proc protoWriteString*(stream: Stream, s: string, fieldNumber: int) = writeTag(stream, fieldNumber, WireType.LengthDelimited) protoWriteString(stream, s) -proc protoWriteBytes*(stream: Stream, bytes: var seq[byte], fieldNumber: int) = +proc protoWriteBytes*(stream: Stream, bytes: seq[byte], fieldNumber: int) = + var bytes = bytes writeTag(stream, fieldNumber, WireType.LengthDelimited) - writeData(stream, addr(bytes[0]), len(bytes)) + protoWriteUInt64(stream, len(bytes).uint64) + if len(bytes) > 0: + writeData(stream, addr(bytes[0]), len(bytes)) proc safeReadStr*(stream: Stream, size: int): string = result = newString(size) @@ -362,7 +365,9 @@ proc protoReadString*(stream: Stream): string = proc protoReadBytes*(stream: Stream): seq[byte] = let size = int(protoReadUInt64(stream)) - setLen(result, size) + newSeq(result, size) + if size == 0: + return if readData(stream, addr(result[0]), size) != size: raise newException(IOError, "cannot read from stream") diff --git a/tests/conformance/conformance_nim.nim b/tests/conformance/conformance_nim.nim index 461bc43..25150b6 100644 --- a/tests/conformance/conformance_nim.nim +++ b/tests/conformance/conformance_nim.nim @@ -47,10 +47,10 @@ while true: response.skipped = "dont know how to parse json" else: try: - let parsed = newprotobuf_test_messages_proto3_TestAllTypesProto3(string(request.protobufPayload)) + let parsed = newprotobuf_test_messages_proto3_TestAllTypesProto3(request.protobufPayload) if request.requestedOutputFormat == conformance_WireFormat.PROTOBUF: let ser = serialize(parsed) - response.protobufPayload = bytes(ser) + response.protobufPayload = cast[seq[byte]](ser) elif request.requestedOutputFormat == conformance_WireFormat.JSON: response.jsonPayload = $toJson(parsed) except IOError as exc: |
