/// <summary> /// Reads a described type descriptor from the buffer. It may return a known static Descriptor. /// </summary> /// <param name="buffer"></param> public static Descriptor DecodeDescriptor(ByteBuffer buffer) { var descriptorFormatCode = DecodeFormatCode(buffer); if (descriptorFormatCode == FormatCode.ULong || descriptorFormatCode == FormatCode.SmallULong) { ulong code = Encoder.ReadULong(buffer, descriptorFormatCode); Descriptor descriptor = null; if (DescribedTypeCodec.TryGetKnownDescribedType(code, out descriptor)) { return(descriptor); } return(new Descriptor(code)); } if (descriptorFormatCode == FormatCode.Symbol8 || descriptorFormatCode == FormatCode.Symbol32) { string symbol = Encoder.ReadSymbol(buffer, descriptorFormatCode); return(new Descriptor(symbol)); } throw new AmqpException(ErrorCode.FramingError, $"Invalid Descriptor Format Code{descriptorFormatCode.ToHex()}"); }