/// <summary>
        /// Initializes a new <see cref="AmqpAnnotatedMessage"/> instance by copying the passed in message.
        /// </summary>
        /// <param name="message">The message to copy.</param>
        public AmqpAnnotatedMessage(AmqpAnnotatedMessage message)
        {
            var data = message.Body as AmqpDataBody;

            Body = new AmqpDataBody(data !.Data);
            ApplicationProperties = new Dictionary <string, object>(message.ApplicationProperties);
            Properties            = new AmqpMessageProperties(message.Properties);
            MessageAnnotations    = new Dictionary <string, object>(message.MessageAnnotations);
            DeliveryAnnotations   = new Dictionary <string, object>(message.DeliveryAnnotations);
            Footer = new Dictionary <string, object>(message.Footer);
            Header = new AmqpMessageHeader(message.Header);
        }
        /// <summary>
        /// Initializes a new <see cref="AmqpAnnotatedMessage"/> instance by copying the passed in message.
        /// </summary>
        /// <param name="messageToCopy">The message to copy.</param>
        public AmqpAnnotatedMessage(AmqpAnnotatedMessage messageToCopy)
        {
            Argument.AssertNotNull(messageToCopy, nameof(messageToCopy));

            var data = messageToCopy.Body as AmqpDataMessageBody;

            Body = new AmqpDataMessageBody(data !.Data);
            _applicationProperties = new Dictionary <string, object>(messageToCopy.ApplicationProperties);
            Properties             = new AmqpMessageProperties(messageToCopy.Properties);
            _messageAnnotations    = new Dictionary <string, object>(messageToCopy.MessageAnnotations);
            _deliveryAnnotations   = new Dictionary <string, object>(messageToCopy.DeliveryAnnotations);
            _footer = new Dictionary <string, object>(messageToCopy.Footer);
            Header  = new AmqpMessageHeader(messageToCopy.Header);
        }