private static void WriteSecondsNanos(ref ProtoWriter.State state, long seconds, int nanos, bool isTimestamp) { NormalizeSecondsNanoseconds(ref seconds, ref nanos, isTimestamp); if (seconds != 0) { state.WriteFieldHeader(1, WireType.Varint); state.WriteInt64(seconds); } if (nanos != 0) { state.WriteFieldHeader(2, WireType.Varint); state.WriteInt32(nanos); } }
static void WriteNonZeroInt32(ref ProtoWriter.State state, int field, int value) { // since Proto3 doesn't write zeros by default, neither will we if (value != 0) { state.WriteFieldHeader(field, WireType.Varint); state.WriteInt32(value); } }
void ISerializer <ScaledTicks> .Write(ref ProtoWriter.State state, ScaledTicks value) { if (value.Value != 0) { state.WriteFieldHeader(ScaledTicks.FieldTimeSpanValue, WireType.SignedVarint); state.WriteInt64(value.Value); } if (value.Scale != TimeSpanScale.Days) { state.WriteFieldHeader(ScaledTicks.FieldTimeSpanScale, WireType.Varint); state.WriteInt32((int)value.Scale); } if (value.Kind != DateTimeKind.Unspecified) { state.WriteFieldHeader(ScaledTicks.FieldTimeSpanKind, WireType.Varint); state.WriteInt32((int)value.Kind); } }
#pragma warning disable IDE0051 // Remove unused private members private void ManuallyWrittenSerializeCallbackStructSimple(CallbackStructSimple obj, ref ProtoWriter.State state) #pragma warning restore IDE0051 // Remove unused private members { obj.OnSerializing(); string bar = obj.Bar; if (bar != null) { state.WriteFieldHeader(1, WireType.String); state.WriteString(bar); } obj.OnSerialized(); }
void ISerializer <decimal> .Write(ref ProtoWriter.State state, decimal value) { ulong low; uint high, signScale; if (s_decimalOptimized) // the JIT should remove the non-preferred implementation, at least on modern runtimes { var dec = new DecimalAccessor(value); ulong a = ((ulong)dec.Mid) << 32, b = ((ulong)dec.Lo) & 0xFFFFFFFFL; low = a | b; high = (uint)dec.Hi; signScale = (uint)(((dec.Flags >> 15) & 0x01FE) | ((dec.Flags >> 31) & 0x0001)); } else { int[] bits = decimal.GetBits(value); ulong a = ((ulong)bits[1]) << 32, b = ((ulong)bits[0]) & 0xFFFFFFFFL; low = a | b; high = (uint)bits[2]; signScale = (uint)(((bits[3] >> 15) & 0x01FE) | ((bits[3] >> 31) & 0x0001)); } if (low != 0) { state.WriteFieldHeader(FieldDecimalLow, WireType.Varint); state.WriteUInt64(low); } if (high != 0) { state.WriteFieldHeader(FieldDecimalHigh, WireType.Varint); state.WriteUInt32(high); } if (signScale != 0) { state.WriteFieldHeader(FieldDecimalSignScale, WireType.Varint); state.WriteUInt32(signScale); } }
public static void WriteValue(int fieldIndex, object value, ProtoWriter.State protoWriter) { if (value == null) { return; } switch (value) { case bool boolean: protoWriter.WriteFieldHeader(fieldIndex, WireType.Varint); protoWriter.WriteBoolean(boolean); break; case DateTime dateTime: protoWriter.WriteFieldHeader(fieldIndex, WireType.StartGroup); BclHelpers.WriteDateTime(ref protoWriter, dateTime); break; case int intValue: protoWriter.WriteFieldHeader(fieldIndex, WireType.Varint); protoWriter.WriteInt32(intValue); break; case short shortValue: protoWriter.WriteFieldHeader(fieldIndex, WireType.Varint); protoWriter.WriteInt16(shortValue); break; case double doubleValue: protoWriter.WriteFieldHeader(fieldIndex, WireType.Fixed64); protoWriter.WriteDouble(doubleValue); break; case string stringValue: protoWriter.WriteFieldHeader(fieldIndex, WireType.String); protoWriter.WriteString(stringValue); break; case Guid guidValue: protoWriter.WriteFieldHeader(fieldIndex, WireType.StartGroup); BclHelpers.WriteGuid(ref protoWriter, guidValue); break; default: throw new ProtoException("Unrecognized data type"); } }