public AmqpMessage FromMessage()

in edge-hub/core/src/Microsoft.Azure.Devices.Edge.Hub.Amqp/AmqpMessageConverter.cs [106:226]


        public AmqpMessage FromMessage(IMessage message)
        {
            AmqpMessage amqpMessage = AmqpMessage.Create(
                new Data
                {
                    Value = new ArraySegment<byte>(message.Body)
                });

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.MessageId, out string messageId))
            {
                amqpMessage.Properties.MessageId = messageId;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.To, out string to))
            {
                amqpMessage.Properties.To = to;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ExpiryTimeUtc, out string expiryTimeStr) &&
                DateTime.TryParse(expiryTimeStr, null, DateTimeStyles.RoundtripKind, out DateTime expiryTime))
            {
                amqpMessage.Properties.AbsoluteExpiryTime = expiryTime;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.MsgCorrelationId, out string correlationId))
            {
                amqpMessage.Properties.CorrelationId = correlationId;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.UserId, out string userId))
            {
                amqpMessage.Properties.UserId = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userId));
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ContentType, out string contentType))
            {
                amqpMessage.Properties.ContentType = contentType;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ContentEncoding, out string contentEncoding))
            {
                amqpMessage.Properties.ContentEncoding = contentEncoding;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.EnqueuedTime, out string enqueuedTimeString)
                && DateTime.TryParse(enqueuedTimeString, null, DateTimeStyles.RoundtripKind, out DateTime enqueuedTime))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsEnqueuedTimeKey] = enqueuedTime;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.DeliveryCount, out string deliveryCountString)
                && byte.TryParse(deliveryCountString, out byte deliveryCount))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsDeliveryCountKey] = deliveryCount;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.LockToken, out string lockToken))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsLockTokenName] = lockToken;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.SequenceNumber, out string sequenceNumberString)
                && ulong.TryParse(sequenceNumberString, out ulong sequenceNumber))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsSequenceNumberName] = sequenceNumber;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.InputName, out string inputName))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsInputNameKey] = inputName;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.RpConnectionDeviceIdInternal, out string rpConnectionDeviceId))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsConnectionDeviceId] = rpConnectionDeviceId;
            }
            else if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ConnectionDeviceId, out string connectionDeviceId))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsConnectionDeviceId] = connectionDeviceId;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.RpConnectionModuleIdInternal, out string rpConnectionModuleId))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsConnectionModuleId] = rpConnectionModuleId;
            }
            else if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ConnectionModuleId, out string connectionModuleId))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsConnectionModuleId] = connectionModuleId;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.ComponentName, out string componentName))
            {
                amqpMessage.MessageAnnotations.Map[Constants.MessageAnnotationsComponentName] = componentName;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.MessageSchema, out string messageSchema))
            {
                amqpMessage.ApplicationProperties.Map[Constants.MessagePropertiesMessageSchemaKey] = messageSchema;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.CreationTime, out string creationTime))
            {
                amqpMessage.ApplicationProperties.Map[Constants.MessagePropertiesCreationTimeKey] = creationTime;
            }

            if (message.SystemProperties.TryGetNonEmptyValue(SystemProperties.Operation, out string operation))
            {
                amqpMessage.ApplicationProperties.Map[Constants.MessagePropertiesOperationKey] = operation;
            }

            foreach (KeyValuePair<string, string> property in message.Properties)
            {
                amqpMessage.ApplicationProperties.Map[property.Key] = property.Value;
            }

            amqpMessage.DeliveryTag = !string.IsNullOrWhiteSpace(lockToken) && Guid.TryParse(lockToken, out Guid lockTokenGuid)
                ? new ArraySegment<byte>(lockTokenGuid.ToByteArray())
                : new ArraySegment<byte>(Guid.NewGuid().ToByteArray());

            return amqpMessage;
        }