pub struct RateLimitInterceptor { /* private fields */ }Expand description
A fixed-window rate limiting ServerInterceptor.
Tracks request counts per caller key using a simple fixed-window counter. When the limit is exceeded, rejects the request with an A2A error.
Caller keys are derived in this order:
CallContext::caller_identity(set by auth interceptors)- Client IP from
x-forwarded-for, only whenRateLimitConfig::trusted_proxy_hopsis non-zero "anonymous"fallback (shared bucket)
Implementations§
Source§impl RateLimitInterceptor
impl RateLimitInterceptor
Sourcepub fn new(config: RateLimitConfig) -> ServerResult<Self>
pub fn new(config: RateLimitConfig) -> ServerResult<Self>
Creates a new rate limiter with the given configuration.
§Errors
Returns ServerError::InvalidParams if requests_per_window,
window_secs, or max_buckets is zero. A zero window would divide by
zero on every request; a zero limit or bucket cap would reject all
requests.
Trait Implementations§
Source§impl Debug for RateLimitInterceptor
impl Debug for RateLimitInterceptor
Source§impl ServerInterceptor for RateLimitInterceptor
impl ServerInterceptor for RateLimitInterceptor
Source§fn before<'a>(
&'a self,
ctx: &'a CallContext,
) -> Pin<Box<dyn Future<Output = A2aResult<()>> + Send + 'a>>
fn before<'a>( &'a self, ctx: &'a CallContext, ) -> Pin<Box<dyn Future<Output = A2aResult<()>> + Send + 'a>>
Called before the request handler processes the method call. Read more
Auto Trait Implementations§
impl !Freeze for RateLimitInterceptor
impl !RefUnwindSafe for RateLimitInterceptor
impl Send for RateLimitInterceptor
impl Sync for RateLimitInterceptor
impl Unpin for RateLimitInterceptor
impl UnsafeUnpin for RateLimitInterceptor
impl UnwindSafe for RateLimitInterceptor
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> 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> ⓘ
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 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>
Wrap the input message
T in a tonic::Request