code: public HTTPRequest retry(final int maxRetries, final Retryable retryable, final WaitStrategy waitStrategy) {
          if (maxRetries <= 0) {
              throw new IllegalArgumentException("maxRetries must be > 0");
          }
          if (retryable == null) {
              throw new IllegalArgumentException("retryable must not be null");
          }
          if (waitStrategy == null) {
              throw new IllegalArgumentException("waitStrategy must not be null");
          }
          this.maxRetries = maxRetries;
          this.retryable = retryable;
          this.waitStrategy = waitStrategy;
          return this;
      }
docs: Retry.
  
  @param maxRetries   Maximum number of retries
  @param retryable    Function to determine if call should be retried
  @param waitStrategy Function to calculate the time to wait between two retries
  @return this