/// <summary>
        /// Get all rules associated with the subscription.
        /// </summary>
        ///
        /// <param name="timeout">The per-try timeout specified in the RetryOptions.</param>
        ///
        /// <returns>Returns a list of rules description</returns>
        private async Task <IList <RuleProperties> > GetRulesInternalAsync(TimeSpan timeout)
        {
            var amqpRequestMessage = AmqpRequestMessage.CreateRequest(
                ManagementConstants.Operations.EnumerateRulesOperation,
                timeout,
                null);

            amqpRequestMessage.Map[ManagementConstants.Properties.Top]  = int.MaxValue;
            amqpRequestMessage.Map[ManagementConstants.Properties.Skip] = 0;

            var response = await ManagementUtilities.ExecuteRequestResponseAsync(
                _connectionScope,
                _managementLink,
                amqpRequestMessage,
                null,
                timeout).ConfigureAwait(false);

            var ruleDescriptions = new List <RuleProperties>();

            if (response.StatusCode == AmqpResponseStatusCode.OK)
            {
                var ruleList = response.GetListValue <AmqpMap>(ManagementConstants.Properties.Rules);
                foreach (var entry in ruleList)
                {
                    var amqpRule        = (AmqpRuleDescriptionCodec)entry[ManagementConstants.Properties.RuleDescription];
                    var ruleDescription = AmqpMessageConverter.GetRuleDescription(amqpRule);
                    ruleDescriptions.Add(ruleDescription);
                }
            }
            else if (response.StatusCode == AmqpResponseStatusCode.NoContent)
            {
                // Do nothing. Return empty list;
            }
            else
            {
                throw response.ToMessagingContractException();
            }

            return(ruleDescriptions);
        }