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

WriteType() private method

private WriteType ( Type type ) : void
type System.Type
return void
        private void WriteType(Type type)
        {
            if (type == typeof(int))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolInt);
            }
            else if (type == typeof(bool))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolBool);
            }
            else if (type == typeof(string))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolString);
            }
            else if (type == typeof(long))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolLong);
            }
            else if (type == typeof(double))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolDouble);
            }
            else if (type == typeof(DateTime))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolDateTime);
            }
            else if (type == typeof(TimeSpan))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolTimeSpan);
            }
            else if (type == typeof(Uri))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolUri);
            }
            else if (typeof(IDictionary).IsAssignableFrom(type))
            {
                writer.Write((int)ProtocolPrimitiveValue.ProtocolDict);
                WriteType(type.GetGenericArguments()[0]);
                WriteType(type.GetGenericArguments()[1]);
            }
            else
            {
                var nt = Nullable.GetUnderlyingType(type);
                if (nt != null)
                {
                    writer.Write((int)ProtocolPrimitiveValue.ProtocolNullable);
                    WriteType(nt);
                }
                else if (type.IsArray)
                {
                    writer.Write((int)ProtocolPrimitiveValue.ProtocolArray);
                    WriteType(type.GetElementType());
                }
                else if (type.IsEnum)
                {
                    var enumTypeId = registry.GetEnumId(type);
                    if (enumTypeId.HasValue)
                    {
                        writer.Write((int)ProtocolPrimitiveValue.ProtocolRegisteredEnum);
                        writer.Write(enumTypeId.Value);
                    }
                    else
                    {
                        writer.Write((int)ProtocolPrimitiveValue.ProtocolEnum);
                        writer.Write(type.AssemblyQualifiedName);
                    }
                }
                else
                {
                    throw new InvalidOperationException("Unsupported primitive type: " + type.FullName);
                }
            }
        }