#[non_exhaustive]pub struct RateLimitConfig {
pub requests_per_window: u64,
pub window_secs: u64,
pub trusted_proxy_hops: usize,
pub max_buckets: usize,
}Expand description
Configuration for RateLimitInterceptor.
#[non_exhaustive]: build it with Default and the with_* setters,
which cover every field; a struct literal is not available outside this
crate, so a field added later does not break callers.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.requests_per_window: u64Maximum number of requests allowed per window per caller key.
Must be non-zero.
window_secs: u64Window duration in seconds.
Must be non-zero.
trusted_proxy_hops: usizeNumber of trusted reverse-proxy hops in front of this server.
0 (the default) means x-forwarded-for is not trusted and is
ignored when deriving the caller key: the header is client-controlled,
so trusting it without a proxy that overwrites or appends to it lets
any caller evade the limit by forging a fresh address per request.
Set to n when exactly n trusted proxies sit between the client and
this server, each appending the address of its immediate peer to
x-forwarded-for. The client address is then the n-th entry from
the right of the header; anything further left is client-supplied
and remains untrusted. If the header has fewer than n entries, the
request did not traverse the expected proxy chain and the caller falls
back to the shared "anonymous" key.
max_buckets: usizeMaximum number of caller buckets tracked at once.
Bounds the limiter’s memory. When the map is full, stale buckets from previous windows are evicted first; if none can be freed, requests from callers without an existing bucket are rejected (fail-closed). Must be non-zero.
Implementations§
Source§impl RateLimitConfig
impl RateLimitConfig
Sourcepub const fn with_requests_per_window(self, requests: u64) -> RateLimitConfig
pub const fn with_requests_per_window(self, requests: u64) -> RateLimitConfig
Sets the requests allowed per window per caller key. Must be non-zero.
Sourcepub const fn with_window_secs(self, secs: u64) -> RateLimitConfig
pub const fn with_window_secs(self, secs: u64) -> RateLimitConfig
Sets the window duration in seconds. Must be non-zero.
Sourcepub const fn with_trusted_proxy_hops(self, hops: usize) -> RateLimitConfig
pub const fn with_trusted_proxy_hops(self, hops: usize) -> RateLimitConfig
Sets the number of trusted reverse-proxy hops. See
trusted_proxy_hops for what trusting
x-forwarded-for means.
Sourcepub const fn with_max_buckets(self, max: usize) -> RateLimitConfig
pub const fn with_max_buckets(self, max: usize) -> RateLimitConfig
Sets the maximum number of caller buckets tracked at once. Must be non-zero.
Trait Implementations§
Source§impl Clone for RateLimitConfig
impl Clone for RateLimitConfig
Source§fn clone(&self) -> RateLimitConfig
fn clone(&self) -> RateLimitConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RateLimitConfig
impl Debug for RateLimitConfig
Source§impl Default for RateLimitConfig
impl Default for RateLimitConfig
Source§fn default() -> RateLimitConfig
fn default() -> RateLimitConfig
Auto Trait Implementations§
impl Freeze for RateLimitConfig
impl RefUnwindSafe for RateLimitConfig
impl Send for RateLimitConfig
impl Sync for RateLimitConfig
impl Unpin for RateLimitConfig
impl UnsafeUnpin for RateLimitConfig
impl UnwindSafe for RateLimitConfig
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
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> ⓘ
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> ⓘ
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request