Bari.Core.Build.Dependencies.Protocol.BinaryProtocolSerializerContext.WritePrimitive C# (CSharp) Method

WritePrimitive() public method

public WritePrimitive ( object value, Type valueType ) : void
value object
valueType System.Type
return void
        public void WritePrimitive(object value, Type valueType)
        {
            if (value == null)
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolNull);
            }
            else if (valueType == typeof(int))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolInt);
                Write((int)value);
            }
            else if (valueType == typeof(bool))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolBool);
                Write((bool)value);
            }
            else if (valueType == typeof(string))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolString);
                Write((string)value);
            }
            else if (valueType == typeof(long))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolLong);
                Write((long)value);
            }
            else if (valueType == typeof(double))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolDouble);
                Write((double)value);
            }
            else if (valueType == typeof(DateTime))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolDateTime);
                Write((DateTime)value);
            }
            else if (valueType == typeof(TimeSpan))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolTimeSpan);
                Write((TimeSpan)value);
            }
            else if (valueType == typeof (Uri))
            {
                writer.Write((int) ProtocolPrimitiveValue.ProtocolUri);
                Write((Uri) value);
            }
            else if (typeof(IDictionary).IsAssignableFrom(valueType) ||
                     valueType.IsGenericType && valueType.GetGenericTypeDefinition() == typeof(IDictionary<,>))
            {
                writer.Write((int) ProtocolPrimitiveValue.ProtocolDict);
                var dict = (IDictionary) value;
                var keyType = valueType.GetGenericArguments()[0];
                var valType = valueType.GetGenericArguments()[1];
                WriteType(keyType);
                WriteType(valType);
                writer.Write(dict.Count);
                foreach (DictionaryEntry pair in dict)
                {
                    WritePrimitive(pair.Key, keyType);
                    WritePrimitive(pair.Value, valType);
                }
            }
            else
            {
                var nt = Nullable.GetUnderlyingType(valueType);
                if (nt != null)
                {
                    writer.Write((int)ProtocolPrimitiveValue.ProtocolNullable);
                    WritePrimitive(value, nt);
                }
                else if (valueType.IsArray)
                {
                    var arr = (Array) value;
                    writer.Write((int)ProtocolPrimitiveValue.ProtocolArray);
                    WriteType(valueType.GetElementType());

                    writer.Write(arr.Length);
                    foreach (object item in arr)
                        WritePrimitive(item, valueType.GetElementType());
                }
                else if (valueType.IsEnum)
                {
                    WriteEnum(value, valueType);
                }
                else
                {
                    throw new InvalidOperationException("Unsupported primitive type: " + valueType.FullName);
                }
            }
        }