code: public CompletableFuture<RuleDescription> getRuleAsync(String topicPath, String subscriptionName, String ruleName) {
          EntityNameHelper.checkValidTopicName(topicPath);
          EntityNameHelper.checkValidSubscriptionName(subscriptionName);
          EntityNameHelper.checkValidRuleName(ruleName);
  
          String path = EntityNameHelper.formatRulePath(topicPath, subscriptionName, ruleName);
          CompletableFuture<String> contentFuture = getEntityAsync(path, null, false);
          CompletableFuture<RuleDescription> rdFuture = new CompletableFuture<>();
          contentFuture.handleAsync((content, ex) -> {
              if (ex != null) {
                  rdFuture.completeExceptionally(ex);
              } else {
                  try {
                      rdFuture.complete(RuleDescriptionSerializer.parseFromContent(content));
                  } catch (MessagingEntityNotFoundException e) {
                      rdFuture.completeExceptionally(e);
                  }
              }
              return null;
          }, MessagingFactory.INTERNAL_THREAD_POOL);
  
          return rdFuture;
      }
docs: Retrieves a rule for a given topic and subscription from the service namespace
  @param topicPath - The path of the topic relative to service bus namespace.
  @param subscriptionName - The name of the subscription.
  @param ruleName - The name of the rule.
  @return - RuleDescription containing information about the subscription.
  @throws IllegalArgumentException - Thrown if path is null, empty, or not in right format or length.