pub struct SlidingWindowRateLimiter { /* private fields */ }Expand description
Rate limiter using sliding window algorithm.
§Examples
use chie_shared::SlidingWindowRateLimiter;
// Allow 10 requests per second
let mut limiter = SlidingWindowRateLimiter::new(1000, 10);
// First 10 requests should be allowed
for i in 0..10 {
assert!(limiter.try_acquire(1000 + i));
}
// 11th request should be denied
assert!(!limiter.try_acquire(1010));
// After window passes, new requests allowed
assert!(limiter.try_acquire(2100));
// Check remaining capacity
let mut limiter2 = SlidingWindowRateLimiter::new(1000, 5);
limiter2.try_acquire(1000);
limiter2.try_acquire(1001);
assert_eq!(limiter2.remaining_capacity(1002), 3);Implementations§
Source§impl SlidingWindowRateLimiter
impl SlidingWindowRateLimiter
Sourcepub fn new(window_ms: u64, max_requests: usize) -> Self
pub fn new(window_ms: u64, max_requests: usize) -> Self
Create a new rate limiter.
§Arguments
window_ms- Window size in millisecondsmax_requests- Maximum requests allowed in the window
Sourcepub fn is_allowed(&mut self, now_ms: i64) -> bool
pub fn is_allowed(&mut self, now_ms: i64) -> bool
Check if a request is allowed at the given time.
Sourcepub fn try_acquire(&mut self, now_ms: i64) -> bool
pub fn try_acquire(&mut self, now_ms: i64) -> bool
Try to consume a token (record a request). Returns true if the request is allowed, false if rate limit is exceeded.
Sourcepub fn current_count(&mut self, now_ms: i64) -> usize
pub fn current_count(&mut self, now_ms: i64) -> usize
Get the current request count in the window.
Sourcepub fn remaining_capacity(&mut self, now_ms: i64) -> usize
pub fn remaining_capacity(&mut self, now_ms: i64) -> usize
Get remaining capacity.
Trait Implementations§
Source§impl Clone for SlidingWindowRateLimiter
impl Clone for SlidingWindowRateLimiter
Source§fn clone(&self) -> SlidingWindowRateLimiter
fn clone(&self) -> SlidingWindowRateLimiter
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for SlidingWindowRateLimiter
impl RefUnwindSafe for SlidingWindowRateLimiter
impl Send for SlidingWindowRateLimiter
impl Sync for SlidingWindowRateLimiter
impl Unpin for SlidingWindowRateLimiter
impl UnwindSafe for SlidingWindowRateLimiter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more