private static QueueProperties ParseFromEntryElement()

in sdk/servicebus/Azure.Messaging.ServiceBus/src/Administration/QueuePropertiesExtensions.cs [84:194]


        private static QueueProperties ParseFromEntryElement(XElement xEntry, Response response)
        {
            var name = xEntry.Element(XName.Get("title", AdministrationClientConstants.AtomNamespace)).Value;

            var qdXml = xEntry.Element(XName.Get("content", AdministrationClientConstants.AtomNamespace))?
                .Element(XName.Get("QueueDescription", AdministrationClientConstants.ServiceBusNamespace));

            if (qdXml == null)
            {
                throw new ServiceBusException(
                    "Queue was not found",
                    ServiceBusFailureReason.MessagingEntityNotFound,
                    innerException: new RequestFailedException(response));
            }

            var properties = new QueueProperties(name);
            foreach (var element in qdXml.Elements())
            {
                switch (element.Name.LocalName)
                {
                    case "LockDuration":
                        properties.LockDuration = XmlConvert.ToTimeSpan(element.Value);
                        break;
                    case "MaxSizeInMegabytes":
                        properties.MaxSizeInMegabytes = int.Parse(element.Value, CultureInfo.InvariantCulture);
                        break;
                    case "RequiresDuplicateDetection":
                        properties.RequiresDuplicateDetection = bool.Parse(element.Value);
                        break;
                    case "RequiresSession":
                        properties.RequiresSession = bool.Parse(element.Value);
                        break;
                    case "DefaultMessageTimeToLive":
                        properties.DefaultMessageTimeToLive = XmlConvert.ToTimeSpan(element.Value);
                        break;
                    case "DeadLetteringOnMessageExpiration":
                        properties.DeadLetteringOnMessageExpiration = bool.Parse(element.Value);
                        break;
                    case "DuplicateDetectionHistoryTimeWindow":
                        properties.DuplicateDetectionHistoryTimeWindow = XmlConvert.ToTimeSpan(element.Value);
                        break;
                    case "MaxDeliveryCount":
                        properties.MaxDeliveryCount = int.Parse(element.Value, CultureInfo.InvariantCulture);
                        break;
                    case "EnableBatchedOperations":
                        properties.EnableBatchedOperations = bool.Parse(element.Value);
                        break;
                    case "IsAnonymousAccessible":
                        properties.IsAnonymousAccessible = Boolean.Parse(element.Value);
                        break;
                    case "AuthorizationRules":
                        properties.AuthorizationRules = AuthorizationRules.ParseFromXElement(element);
                        break;
                    case "Status":
                        properties.Status = element.Value;
                        break;
                    case "ForwardTo":
                        if (!string.IsNullOrWhiteSpace(element.Value))
                        {
                            properties.ForwardTo = element.Value;
                        }
                        break;
                    case "UserMetadata":
                        properties.UserMetadata = element.Value;
                        break;
                    case "SupportOrdering":
                        properties.SupportOrdering = Boolean.Parse(element.Value);
                        break;
                    case "AutoDeleteOnIdle":
                        properties.AutoDeleteOnIdle = XmlConvert.ToTimeSpan(element.Value);
                        break;
                    case "EnablePartitioning":
                        properties.EnablePartitioning = bool.Parse(element.Value);
                        break;
                    case "ForwardDeadLetteredMessagesTo":
                        if (!string.IsNullOrWhiteSpace(element.Value))
                        {
                            properties.ForwardDeadLetteredMessagesTo = element.Value;
                        }
                        break;
                    case "EnableExpress":
                        properties.EnableExpress = bool.Parse(element.Value);
                        break;
                    case "AccessedAt":
                    case "CreatedAt":
                    case "MessageCount":
                    case "SizeInBytes":
                    case "UpdatedAt":
                    case "CountDetails":
                    case "EntityAvailabilityStatus":
                    case "SkippedUpdate":
                        // Ignore known properties
                        // Do nothing
                        break;
                    case "MaxMessageSizeInKilobytes":
                        properties.MaxMessageSizeInKilobytes = long.Parse(element.Value, CultureInfo.InvariantCulture);
                        break;
                    default:
                        // For unknown properties, keep them as-is for forward proof.
                        if (properties.UnknownProperties == null)
                        {
                            properties.UnknownProperties = new List<XElement>();
                        }

                        properties.UnknownProperties.Add(element);
                        break;
                }
            }

            return properties;
        }