Exemplo n.º 1
0
 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);
     }
 }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
#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();
        }
Exemplo n.º 5
0
        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");
            }
        }