/// <summary>Takes the remaining content of the stream and deserialze it into the instance.</summary> public static Example.KVRequest Deserialize(Stream stream, Example.KVRequest instance) { instance.Type = Example.KVRequest.RequestType.ITEM; while (true) { int keyByte = stream.ReadByte(); if (keyByte == -1) { break; } // Optimized reading of known fields with field ID < 16 switch (keyByte) { // Field 1 Varint case 8: instance.Type = (Example.KVRequest.RequestType)global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadUInt64(stream); continue; // Field 2 LengthDelimited case 18: if (instance.Item == null) { instance.Item = Example.KVItem.DeserializeLengthDelimited(stream); } else { Example.KVItem.DeserializeLengthDelimited(stream, instance.Item); } continue; // Field 3 LengthDelimited case 26: if (instance.Login == null) { instance.Login = Example.KVLogin.DeserializeLengthDelimited(stream); } else { Example.KVLogin.DeserializeLengthDelimited(stream, instance.Login); } continue; } var key = global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadKey((byte)keyByte, stream); // Reading field ID > 16 and unknown field ID/wire type combinations switch (key.Field) { case 0: throw new Exception("Invalid field id: 0, something went wrong in the stream"); default: global::SilentOrbit.ProtocolBuffers.ProtocolParser.SkipKey(stream, key); break; } } return(instance); }
/// <summary>Helper: put the buffer into a MemoryStream before deserializing</summary> public static Example.KVRequest Deserialize(byte[] buffer, Example.KVRequest instance) { using (var ms = new MemoryStream(buffer)) Deserialize(ms, instance); return(instance); }