FixedWindowCounter

Struct FixedWindowCounter 

Source
pub struct FixedWindowCounter { /* private fields */ }
Expand description

A Fixed Window Counter rate limiter.

This implementation uses fixed time windows to limit the number of requests within each window. It’s simple to understand and implement, but can allow twice the rate of requests around window boundaries.

§Features

  • Uses fixed time windows for rate limiting.
  • Allows a specified number of requests within each time window.
  • Automatically clears old windows to prevent memory growth.

§Example

use std::time::Duration;
use limitr::window::FixedWindowCounter;

let mut counter = FixedWindowCounter::new(100, Duration::from_secs(60));
for _ in 0..100 {
    assert!(counter.try_consume().await);
}

assert!(!counter.try_consume().await);

Implementations§

Source§

impl FixedWindowCounter

Source

pub fn new(limit: u32, window_duration: Duration) -> Self

Creates a new FixedWindowCounter with the specified limit and window_duration.

  • limit: The maximum number of requests allowed in each time window.
  • window_duration: The duration of each time window.
§Example
use std::time::Duration;
use limitr::window::FixedWindowCounter;

let counter = FixedWindowCounter::new(100, Duration::from_secs(60)); // 100 requests per minute
Source

pub async fn try_consume(&self) -> bool

Attempts to consume a token from the current time window.

Returns true if the request is allowed, and false if the limit has been reached for the current window.

§Example
use std::time::Duration;
use limitr::window::FixedWindowCounter;

let mut counter = FixedWindowCounter::new(5, Duration::from_secs(60));
for _ in 0..5 {
    assert!(counter.try_consume().await);
}

assert!(!counter.try_consume().await);
Source

pub async fn clear_old_windows(&self)

Clears old time windows to prevent unbounded growth of the internal HashMap.

This method should be called periodically to remove data for expired time windows.

§Example
use std::time::Duration;
use limitr::window::FixedWindowCounter;

let mut counter = FixedWindowCounter::new(100, Duration::from_secs(60));
// ... some time passes ...
counter.clear_old_windows().await;

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more