pub struct Quota { /* private fields */ }
Expand description
A rate-limiting quota.
Quotas are expressed in a positive number of “cells” (the maximum number of positive decisions / allowed items until the rate limiter needs to replenish) and the amount of time for the rate limiter to replenish a single cell.
Neither the number of cells nor the replenishment unit of time may be zero.
Burst sizes
There are multiple ways of expressing the same quota: a quota given as Quota::per_second(1)
allows, on average, the same number of cells through as a quota given as Quota::per_minute(60)
.
However, the quota of Quota::per_minute(60)
has a burst size of 60 cells, meaning it is
possible to accommodate 60 cells in one go, after which the equivalent of a minute of inactivity
is required for the burst allowance to be fully restored.
Burst size gets really important when you construct a rate limiter that should allow multiple
elements through at one time (using RateLimiter.check_n
and its related functions): Only
at most as many cells can be let through in one call as are given as the burst size.
In other words, the burst size is the maximum number of cells that the rate limiter will ever allow through without replenishing them.
Implementations§
source§impl Quota
impl Quota
sourcepub fn per_second<B>(max_burst: B) -> Self
pub fn per_second<B>(max_burst: B) -> Self
Construct a quota for a number of cells per second. The given number of cells is also assumed to be the maximum burst size.
Panics
- When max_burst is zero.
sourcepub fn per_minute<B>(max_burst: B) -> Self
pub fn per_minute<B>(max_burst: B) -> Self
Construct a quota for a number of cells per 60-second period. The given number of cells is also assumed to be the maximum burst size.
Panics
- When max_burst is zero.
sourcepub fn per_hour<B>(max_burst: B) -> Self
pub fn per_hour<B>(max_burst: B) -> Self
Construct a quota for a number of cells per 60-minute (3600-second) period. The given number of cells is also assumed to be the maximum burst size.
Panics
- When max_burst is zero.
sourcepub fn with_period(replenish_1_per: Duration) -> Option<Quota>
pub fn with_period(replenish_1_per: Duration) -> Option<Quota>
Construct a quota that replenishes one cell in a given interval.
This constructor is meant to replace ::new
,
in cases where a longer refresh period than 1 cell/hour is
necessary.
If the time interval is zero, returns None
.
sourcepub fn allow_burst<B>(self, max_burst: B) -> Self
pub fn allow_burst<B>(self, max_burst: B) -> Self
Adjusts the maximum burst size for a quota to construct a rate limiter with a capacity for at most the given number of cells.
Panics
- When max_burst is zero.