docs: @Override
      public long reservePermission(Duration timeoutDuration) {
          long timeoutInNanos = timeoutDuration.toNanos();
          State modifiedState = updateStateWithBackOff(timeoutInNanos);
  
          boolean canAcquireImmediately = modifiedState.nanosToWait <= 0;
          if (canAcquireImmediately) {
              publishRateLimiterEvent(true);
              return 0;
          }
  
          boolean canAcquireInTime = timeoutInNanos >= modifiedState.nanosToWait;
          if (canAcquireInTime) {
              publishRateLimiterEvent(true);
              return modifiedState.nanosToWait;
          }
  
          publishRateLimiterEvent(false);
          return -1;
      }