/// <summary>Read the VarInt length prefix and the given number of bytes from the stream and deserialze it into the instance.</summary> internal static Local.LocalFeatures DeserializeLengthDelimited(Stream stream, Local.LocalFeatures instance) { BinaryReader br = new BinaryReader(stream); instance.MyEnum = LocalFeatureTest.TopEnum.First; long limit = global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadUInt32(stream); limit += stream.Position; while (true) { if (stream.Position >= limit) { if (stream.Position == limit) break; else throw new InvalidOperationException("Read past max limit"); } int keyByte = stream.ReadByte(); if (keyByte == -1) throw new System.IO.EndOfStreamException(); // Optimized reading of known fields with field ID < 16 switch (keyByte) { // Field 1 Varint case 8: instance.Uptime = new TimeSpan((long)(long)global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadUInt64(stream)); continue; // Field 2 Varint case 16: instance.DueDate = new DateTime((long)(long)global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadUInt64(stream)); continue; // Field 3 Fixed64 case 25: instance.Amount = br.ReadDouble(); continue; // Field 4 LengthDelimited case 34: instance.Denial = global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadString(stream); continue; // Field 5 LengthDelimited case 42: instance.Secret = global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadString(stream); continue; // Field 6 LengthDelimited case 50: instance.Internal = global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadString(stream); continue; // Field 7 LengthDelimited case 58: instance.PR = global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadString(stream); continue; // Field 8 LengthDelimited case 66: Mine.MyMessageV1.DeserializeLengthDelimited(stream, instance.TestingReadOnly); continue; // Field 9 LengthDelimited case 74: if (instance.MyInterface == null) throw new InvalidOperationException("Can't deserialize into a interfaces null pointer"); else LocalFeatureTest.InterfaceTestSerializer.DeserializeLengthDelimited(stream, instance.MyInterface); continue; // Field 10 LengthDelimited case 82: LocalFeatureTest.StructTest.DeserializeLengthDelimited(stream, ref instance.MyStruct); continue; // Field 11 LengthDelimited case 90: TestB.ExternalStructSerializer.DeserializeLengthDelimited(stream, ref instance.MyExtStruct); continue; // Field 12 LengthDelimited case 98: if (instance.MyExtClass == null) instance.MyExtClass = TestB.ExternalClassSerializer.DeserializeLengthDelimited(stream); else TestB.ExternalClassSerializer.DeserializeLengthDelimited(stream, instance.MyExtClass); continue; // Field 13 Varint case 104: instance.MyEnum = (LocalFeatureTest.TopEnum)global::SilentOrbit.ProtocolBuffers.ProtocolParser.ReadUInt64(stream); 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 InvalidDataException("Invalid field id: 0, something went wrong in the stream"); default: global::SilentOrbit.ProtocolBuffers.ProtocolParser.SkipKey(stream, key); break; } } instance.AfterDeserialize(); return instance; }