/**
   * Gets a result segment of an iterable collection of queues whose names begin with the specified
   * prefix for this queue, using the specified listing details options, request options, and
   * operation context.
   *
   * @param prefix A <code>String</code> that represents the prefix of the queue name to match.
   * @param detailsIncluded A {@link QueueListingDetails} value that indicates whether queue
   *     metadata will be returned.
   * @param maxResults The maximum number of queue results to retrieve.
   * @param continuationToken A {@link ResultContinuation} object that represents a continuation
   *     token returned by a previous listing operation.
   * @param options A {@link QueueRequestOptions} object that specifies any additional options for
   *     the request. Specifying <code>null</code> will use the default request options from the
   *     associated service client ( {@link CloudQueue}).
   * @param opContext An {@link OperationContext} object that represents the context for the current
   *     operation. This object is used to track requests to the storage service, and to provide
   *     additional runtime information about the operation.
   * @return A {@link ResultSegment} of {@link CloudQueue} objects that contains a segment of the
   *     iterable collection of {@link CloudQueue} objects that represent the requested queues in
   *     the storage service.
   * @throws StorageException If a storage service error occurred during the operation.
   */
  @DoesServiceRequest
  public ResultSegment<CloudQueue> listQueuesSegmented(
      final String prefix,
      final QueueListingDetails detailsIncluded,
      final int maxResults,
      final ResultContinuation continuationToken,
      QueueRequestOptions options,
      OperationContext opContext)
      throws StorageException {

    if (opContext == null) {
      opContext = new OperationContext();
    }

    if (options == null) {
      options = new QueueRequestOptions();
    }

    opContext.initialize();
    options.applyDefaults(this);

    Utility.assertContinuationType(continuationToken, ResultContinuationType.QUEUE);

    final StorageOperation<CloudQueueClient, Void, ResultSegment<CloudQueue>> impl =
        new StorageOperation<CloudQueueClient, Void, ResultSegment<CloudQueue>>(options) {
          @Override
          public ResultSegment<CloudQueue> execute(
              final CloudQueueClient client, final Void dontCare, final OperationContext opContext)
              throws Exception {
            return CloudQueueClient.this.listQueuesCore(
                prefix,
                detailsIncluded,
                maxResults,
                continuationToken,
                this.getRequestOptions(),
                this,
                opContext);
          }
        };

    return ExecutionEngine.executeWithRetry(
        this, null, impl, options.getRetryPolicyFactory(), opContext);
  }
  /**
   * Returns an iterable collection of queues whose names begin with the specified prefix for this
   * Queue service client, using the specified details setting, request options, and operation
   * context.
   *
   * @param prefix A <code>String</code> that represents the queue name prefix.
   * @param detailsIncluded A {@link QueueListingDetails} value that indicates whether queue
   *     metadata will be returned.
   * @param options A {@link QueueRequestOptions} object that specifies any additional options for
   *     the request. Specifying <code>null</code> will use the default request options from the
   *     associated service client ( {@link CloudQueue}).
   * @param opContext An {@link OperationContext} object that represents the context for the current
   *     operation. This object is used to track requests to the storage service, and to provide
   *     additional runtime information about the operation.
   * @return An iterable collection of {@link CloudQueue} objects that represents the specified
   *     queues for this client.
   */
  @DoesServiceRequest
  public Iterable<CloudQueue> listQueues(
      final String prefix,
      final QueueListingDetails detailsIncluded,
      QueueRequestOptions options,
      OperationContext opContext) {
    if (opContext == null) {
      opContext = new OperationContext();
    }

    if (options == null) {
      options = new QueueRequestOptions();
    }

    opContext.initialize();
    options.applyDefaults(this);

    final SegmentedStorageOperation<CloudQueueClient, Void, ResultSegment<CloudQueue>> impl =
        new SegmentedStorageOperation<CloudQueueClient, Void, ResultSegment<CloudQueue>>(
            options, null) {
          @Override
          public ResultSegment<CloudQueue> execute(
              final CloudQueueClient client, final Void dontCare, final OperationContext opContext)
              throws Exception {

            final ResultSegment<CloudQueue> result =
                CloudQueueClient.this.listQueuesCore(
                    prefix,
                    detailsIncluded,
                    -1,
                    this.getToken(),
                    this.getRequestOptions(),
                    this,
                    opContext);

            this.setToken(result.getContinuationToken());
            return result;
          }
        };

    return new LazySegmentedIterable<CloudQueueClient, Void, CloudQueue>(
        impl, this, null, options.getRetryPolicyFactory(), opContext);
  }