pub struct RateLimitLayer<ExtractKey, BypassForKey> { /* private fields */ }
Expand description
Enforces a rate limit on the number of requests the underlying service can handle over a period of time.
Read module documentation for more information.
Implementations
sourceimpl RateLimitLayer<fn(_: &mut BoxRequest) -> Option<()>, fn(_: &()) -> bool>
impl RateLimitLayer<fn(_: &mut BoxRequest) -> Option<()>, fn(_: &()) -> bool>
sourceimpl<ExtractKey, BypassForKey> RateLimitLayer<ExtractKey, BypassForKey>
impl<ExtractKey, BypassForKey> RateLimitLayer<ExtractKey, BypassForKey>
sourcepub fn set_key_fns<NewBypassForKey, NewExtractKeyFn, NewKey>(
self,
extract: NewExtractKeyFn,
bypass: NewBypassForKey
) -> RateLimitLayer<NewExtractKeyFn, NewBypassForKey> where
NewBypassForKey: Fn(&NewKey) -> bool + Clone,
NewExtractKeyFn: Fn(&mut BoxRequest) -> Option<NewKey> + Clone,
NewKey: Eq + Hash,
pub fn set_key_fns<NewBypassForKey, NewExtractKeyFn, NewKey>(
self,
extract: NewExtractKeyFn,
bypass: NewBypassForKey
) -> RateLimitLayer<NewExtractKeyFn, NewBypassForKey> where
NewBypassForKey: Fn(&NewKey) -> bool + Clone,
NewExtractKeyFn: Fn(&mut BoxRequest) -> Option<NewKey> + Clone,
NewKey: Eq + Hash,
Set the key extraction and bypass functions.
// create a rate limit layer that uses SocketAddr as keys
// to distinguish connections and use seperate state for them
let layer = RateLimitLayer::new(5, Duration::from_secs(10))
.set_key_fns(
// extract ip addr from request
|req| req.extensions().get::<SocketAddr>().map(|addr| addr.ip()),
// bypass ratelimit for loopback ips
|key| key.is_loopback(),
);
Trait Implementations
sourceimpl<ExtractKey: Clone, BypassForKey: Clone> Clone for RateLimitLayer<ExtractKey, BypassForKey>
impl<ExtractKey: Clone, BypassForKey: Clone> Clone for RateLimitLayer<ExtractKey, BypassForKey>
sourcefn clone(&self) -> RateLimitLayer<ExtractKey, BypassForKey>
fn clone(&self) -> RateLimitLayer<ExtractKey, BypassForKey>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
Auto Trait Implementations
impl<ExtractKey, BypassForKey> RefUnwindSafe for RateLimitLayer<ExtractKey, BypassForKey> where
BypassForKey: RefUnwindSafe,
ExtractKey: RefUnwindSafe,
impl<ExtractKey, BypassForKey> Send for RateLimitLayer<ExtractKey, BypassForKey> where
BypassForKey: Send,
ExtractKey: Send,
impl<ExtractKey, BypassForKey> Sync for RateLimitLayer<ExtractKey, BypassForKey> where
BypassForKey: Sync,
ExtractKey: Sync,
impl<ExtractKey, BypassForKey> Unpin for RateLimitLayer<ExtractKey, BypassForKey> where
BypassForKey: Unpin,
ExtractKey: Unpin,
impl<ExtractKey, BypassForKey> UnwindSafe for RateLimitLayer<ExtractKey, BypassForKey> where
BypassForKey: UnwindSafe,
ExtractKey: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
fn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
sourcefn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
fn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
🔬 This is a nightly-only experimental API. (
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
T: Future, type Output = <T as Future>::Output;
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
fn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more