Exemplo n.º 1
0
        internal static Multiple <T> Decode(ByteBuffer buffer)
        {
            FormatCode formatCode = AmqpEncoding.ReadFormatCode(buffer);

            if (formatCode == FormatCode.Null)
            {
                return(null);
            }

            if (formatCode == FormatCode.Array8 || formatCode == FormatCode.Array32)
            {
                T[] array = ArrayEncoding.Decode <T>(buffer, formatCode);
                return(new Multiple <T>(array));
            }

            if (formatCode == FormatCode.Symbol8 || formatCode == FormatCode.Symbol32)
            {
                var symbol = SymbolEncoding.Decode(buffer, formatCode);
                return(new Multiple <AmqpSymbol>()
                {
                    symbol
                } as Multiple <T>);
            }

            object value = AmqpEncoding.DecodeObject(buffer, formatCode);

            if (value is T)
            {
                Multiple <T> multiple = new Multiple <T>();
                multiple.Add((T)value);
                return(multiple);
            }

            throw new AmqpException(AmqpErrorCode.InvalidField, $"The expected type is '{typeof(T).Name}' but got '{value.GetType().Name}'");
        }
Exemplo n.º 2
0
        internal static Multiple <T> Decode(ByteBuffer buffer)
        {
            object value = AmqpEncoding.DecodeObject(buffer);

            if (value == null)
            {
                return(null);
            }
            else if (value is T)
            {
                Multiple <T> multiple = new Multiple <T>();
                multiple.Add((T)value);
                return(multiple);
            }
            else if (value.GetType().IsArray)
            {
                Multiple <T> multiple = new Multiple <T>((T[])value);
                return(multiple);
            }
            else
            {
                throw new AmqpException(AmqpErrorCode.InvalidField, null);
            }
        }