pub struct StrictRateLimiter { /* private fields */ }Expand description
Strict rate limiter backed entirely by PostgreSQL.
Every check round-trips to PG, so limits are cluster-wide correct at the
cost of one query per rate-limited request. Right for billing-grade
quotas; for DDoS protection prefer HybridRateLimiter.
Implements token bucket algorithm with atomic updates.
Implementations§
Source§impl StrictRateLimiter
impl StrictRateLimiter
pub fn new(pool: PgPool) -> Self
pub async fn check( &self, bucket_key: &str, config: &RateLimitConfig, ) -> Result<RateLimitResult>
pub fn build_key( &self, key_type: RateLimitKey, action_name: &str, auth: &AuthContext, request: &RequestMetadata, ) -> String
pub async fn enforce( &self, bucket_key: &str, config: &RateLimitConfig, ) -> Result<RateLimitResult>
pub async fn cleanup(&self, older_than: DateTime<Utc>) -> Result<u64>
Trait Implementations§
Source§impl RateLimiterBackend for StrictRateLimiter
impl RateLimiterBackend for StrictRateLimiter
Source§fn check<'a>(
&'a self,
bucket_key: &'a str,
config: &'a RateLimitConfig,
) -> Pin<Box<dyn Future<Output = Result<RateLimitResult>> + Send + 'a>>
fn check<'a>( &'a self, bucket_key: &'a str, config: &'a RateLimitConfig, ) -> Pin<Box<dyn Future<Output = Result<RateLimitResult>> + Send + 'a>>
Check whether a single token is available for the given bucket.
Source§fn build_key(
&self,
key_type: RateLimitKey,
action_name: &str,
auth: &AuthContext,
request: &RequestMetadata,
) -> String
fn build_key( &self, key_type: RateLimitKey, action_name: &str, auth: &AuthContext, request: &RequestMetadata, ) -> String
Build the bucket key string for a (key kind, action, auth, request) tuple.
Source§fn enforce<'a>(
&'a self,
bucket_key: &'a str,
config: &'a RateLimitConfig,
) -> Pin<Box<dyn Future<Output = Result<RateLimitResult>> + Send + 'a>>
fn enforce<'a>( &'a self, bucket_key: &'a str, config: &'a RateLimitConfig, ) -> Pin<Box<dyn Future<Output = Result<RateLimitResult>> + Send + 'a>>
Check and convert a denial into a
ForgeError::RateLimitExceeded.Auto Trait Implementations§
impl Freeze for StrictRateLimiter
impl !RefUnwindSafe for StrictRateLimiter
impl Send for StrictRateLimiter
impl Sync for StrictRateLimiter
impl Unpin for StrictRateLimiter
impl UnsafeUnpin for StrictRateLimiter
impl !UnwindSafe for StrictRateLimiter
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more