public static <ContextT> BlockingLimiter<ContextT> wrap(Limiter<ContextT> delegate, Duration timeout) {
        Preconditions.checkArgument(timeout.compareTo(MAX_TIMEOUT) < 0, "Timeout cannot be greater than " + MAX_TIMEOUT);
        return new BlockingLimiter<>(delegate, timeout);
    }
public static < ContextT > BlockingLimiter < ContextT > wrap ( Limiter < ContextT > delegate , Duration timeout ) { Preconditions . checkArgument ( timeout . compareTo ( MAX_TIMEOUT ) < 0 , "Timeout cannot be greater than " + MAX_TIMEOUT ) ; return new BlockingLimiter < > ( delegate , timeout ) ; }
Wrap a limiter such that acquire will block up to a provided timeout if the limit was reached
instead of return an empty listener immediately

@param delegate Non-blocking limiter to wrap
@param timeout Max amount of time to wait for the wait for the limit to be released.  Cannot exceed {@link BlockingLimiter#MAX_TIMEOUT}
@return Wrapped limiter