/**
* An implementation of PeekableRequestRateLimiterInterface that
* fits most use-cases.
*
* @author Wouter de Jong <wouter@wouterj.nl>
*/
abstract class AbstractRequestRateLimiter implements PeekableRequestRateLimiterInterface
{ public function consume(Request
$request): RateLimit
{ return $this->
doConsume($request, 1
);
} public function peek(Request
$request): RateLimit
{ return $this->
doConsume($request, 0
);
} private function doConsume(Request
$request, int
$tokens): RateLimit
{ $limiters =
$this->
getLimiters($request);
if (0 === \
count($limiters)) {