public static void WriteFieldHeader(int fieldNumber, ProtoBuf.WireType wireType, ProtoWriter writer) { if (writer == null) { throw new ArgumentNullException("writer"); } if (writer.wireType != ProtoBuf.WireType.None) { string[] str = new string[] { "Cannot write a ", wireType.ToString(), " header until the ", writer.wireType.ToString(), " data has been written" }; throw new InvalidOperationException(string.Concat(str)); } if (fieldNumber < 0) { throw new ArgumentOutOfRangeException("fieldNumber"); } if (writer.packedFieldNumber == 0) { writer.fieldNumber = fieldNumber; writer.wireType = wireType; ProtoWriter.WriteHeaderCore(fieldNumber, wireType, writer); return; } if (writer.packedFieldNumber != fieldNumber) { throw new InvalidOperationException(string.Concat("Field mismatch during packed encoding; expected ", writer.packedFieldNumber.ToString(), " but received ", fieldNumber.ToString())); } ProtoBuf.WireType wireType1 = wireType; switch (wireType1) { case ProtoBuf.WireType.Variant: case ProtoBuf.WireType.Fixed64: { writer.fieldNumber = fieldNumber; writer.wireType = wireType; return; } default: { if (wireType1 == ProtoBuf.WireType.Fixed32 || wireType1 == ProtoBuf.WireType.SignedVariant) { writer.fieldNumber = fieldNumber; writer.wireType = wireType; return; } throw new InvalidOperationException(string.Concat("Wire-type cannot be encoded as packed: ", wireType.ToString())); } } }