Bari.Core.Build.Dependencies.Protocol.BinaryProtocolDeserializerContext.ReadType C# (CSharp) Method

ReadType() private method

private ReadType ( ) : Type>.Tuple
return Type>.Tuple
        private Tuple<ProtocolPrimitiveValue, Type> ReadType()
        {
            var primitiveType = (ProtocolPrimitiveValue)ReadInt();

            switch (primitiveType)
            {
                case ProtocolPrimitiveValue.ProtocolBool:
                    return Tuple.Create(primitiveType, typeof (bool));
                case ProtocolPrimitiveValue.ProtocolInt:
                    return Tuple.Create(primitiveType, typeof (int));
                case ProtocolPrimitiveValue.ProtocolLong:
                    return Tuple.Create(primitiveType, typeof (long));
                case ProtocolPrimitiveValue.ProtocolDouble:
                    return Tuple.Create(primitiveType, typeof (double));
                case ProtocolPrimitiveValue.ProtocolString:
                    return Tuple.Create(primitiveType, typeof (string));
                case ProtocolPrimitiveValue.ProtocolUri:
                    return Tuple.Create(primitiveType, typeof (Uri));
                case ProtocolPrimitiveValue.ProtocolDateTime:
                    return Tuple.Create(primitiveType, typeof (DateTime));
                case ProtocolPrimitiveValue.ProtocolTimeSpan:
                    return Tuple.Create(primitiveType, typeof (TimeSpan));
                case ProtocolPrimitiveValue.ProtocolEnum:
                    var typeName = ReadString();
                    return Tuple.Create(primitiveType, Type.GetType(typeName));
                case ProtocolPrimitiveValue.ProtocolRegisteredEnum:
                    var typeId = ReadInt();
                    return Tuple.Create(primitiveType, registry.GetEnumType(typeId));
                case ProtocolPrimitiveValue.ProtocolNullable:
                    var inner = ReadType();
                    return Tuple.Create(primitiveType, typeof (Nullable<>).MakeGenericType(inner.Item2));
                case ProtocolPrimitiveValue.ProtocolArray:
                    var elemType = ReadType();
                    return Tuple.Create(primitiveType, elemType.Item2.MakeArrayType());
                case ProtocolPrimitiveValue.ProtocolDict:
                    var keyType = ReadType();
                    var valType = ReadType();
                    return Tuple.Create(primitiveType,
                        typeof (Dictionary<,>).MakeGenericType(keyType.Item2, valType.Item2));
                case ProtocolPrimitiveValue.ProtocolNull:
                    return Tuple.Create(primitiveType, typeof (object));
                default:
                    throw new ArgumentOutOfRangeException("primitiveType");
            }
        }