コード例 #1
0
ファイル: AmqpCodec.cs プロジェクト: jdaigle/LightRail
        /// <summary>
        /// Reads a Descriptor and DescribedType object from the buffer.
        /// </summary>
        /// <param name="buffer"></param>
        public static object DecodeDescribedType(ByteBuffer buffer, byte formatCode)
        {
            if (formatCode != FormatCode.Described)
            {
                throw new ArgumentException(nameof(formatCode), "Format code must be described (0x00)");
            }

            var descriptor = DecodeDescriptor(buffer);

            if (DescribedTypeCodec.IsKnownDescribedType(descriptor))
            {
                return(DecodeKnownDescribedType(buffer, descriptor));
            }

            object value = DecodeBoxedObject(buffer); // TODO: performance. boxing

            return(DescribedTypeCodec.GetDescribedTypeConstructor(value.GetType())(descriptor, value));
        }