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}'"); }
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); } }