pub struct RateLimitLayer { /* private fields */ }Implementations§
Source§impl RateLimitLayer
impl RateLimitLayer
pub fn new( store: Arc<dyn RateLimitStore>, config: RateLimitConfig, ) -> RateLimitLayer
Sourcepub fn with_store_error_policy(self, policy: StoreErrorPolicy) -> RateLimitLayer
pub fn with_store_error_policy(self, policy: StoreErrorPolicy) -> RateLimitLayer
Choose what happens when the backing store itself fails, as
opposed to when a caller is genuinely over budget. Defaults to
StoreErrorPolicy::Allow, which serves through transport-class
failures only — see that type’s docs for the distinction, why a
reachable-but-refusing store stays closed regardless, and why key
derivation deliberately does not follow suit.
Sourcepub fn with_store_timeout(self, timeout: Duration) -> RateLimitLayer
pub fn with_store_timeout(self, timeout: Duration) -> RateLimitLayer
Ceiling on how long one store lookup may take before the layer
gives up and applies StoreErrorPolicy to a synthetic
transport-class error. Defaults to DEFAULT_STORE_TIMEOUT.
This is ONE budget for the whole lookup, including any retry the backend performs internally — the point is to bound what the caller waits, and a per-attempt budget silently doubles when a store retries. Without it, “degrade to unlimited” degrades only after the driver’s own reconnect cycle finishes, which was measured at nineteen seconds per request against a real outage.
Sourcepub fn with_bucket_budget(self, budget: RateLimitBucketBudget) -> RateLimitLayer
pub fn with_bucket_budget(self, budget: RateLimitBucketBudget) -> RateLimitLayer
Tune how many distinct buckets one scope may create
(cratestack#871). Defaults to RateLimitBucketBudget::default.
Sourcepub fn without_bucket_budget(self) -> RateLimitLayer
pub fn without_bucket_budget(self) -> RateLimitLayer
Let an unverified Authorization header mint buckets without any
cardinality bound — the pre-cratestack#871 behaviour.
Only correct when something else already bounds the keyspace (an
authenticating proxy in front, a with_key_fn that keys on
verified material, mTLS). Otherwise this restores the measured
amplification primitive: one store key per request, attacker-chosen.
Sourcepub fn with_unverified_auth_policy(
self,
policy: UnverifiedAuthPolicy,
) -> RateLimitLayer
pub fn with_unverified_auth_policy( self, policy: UnverifiedAuthPolicy, ) -> RateLimitLayer
What the default key function does with an Authorization header
nothing has verified. See UnverifiedAuthPolicy.
Sourcepub fn with_key_fn(
self,
f: impl Fn(&Request<Body>) -> String + Send + Sync + 'static,
) -> RateLimitLayer
pub fn with_key_fn( self, f: impl Fn(&Request<Body>) -> String + Send + Sync + 'static, ) -> RateLimitLayer
Override how the layer derives the bucket key. The supplied closure is infallible by design — opting out of the default’s fail-closed behavior is the caller’s explicit choice, including any deliberate shared bucket.
An override carries no bucket budget: the layer has no basis to invent a scope or a fallback for a key whose derivation it cannot see. A consumer whose key function reads caller-supplied material owns bounding it, exactly as it owns the fail-closed decision.
pub fn with_should_rate_limit_fn( self, f: impl Fn(&Request<Body>) -> bool + Send + Sync + 'static, ) -> RateLimitLayer
Trait Implementations§
Source§impl Clone for RateLimitLayer
impl Clone for RateLimitLayer
Source§fn clone(&self) -> RateLimitLayer
fn clone(&self) -> RateLimitLayer
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<S> Layer<S> for RateLimitLayer
impl<S> Layer<S> for RateLimitLayer
Source§type Service = RateLimitService<S>
type Service = RateLimitService<S>
Source§fn layer(&self, inner: S) -> <RateLimitLayer as Layer<S>>::Service
fn layer(&self, inner: S) -> <RateLimitLayer as Layer<S>>::Service
Auto Trait Implementations§
impl !RefUnwindSafe for RateLimitLayer
impl !UnwindSafe for RateLimitLayer
impl Freeze for RateLimitLayer
impl Send for RateLimitLayer
impl Sync for RateLimitLayer
impl Unpin for RateLimitLayer
impl UnsafeUnpin for RateLimitLayer
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<'src, T> IntoMaybe<'src, T> for Twhere
T: 'src,
impl<'src, T> IntoMaybe<'src, T> for Twhere
T: 'src,
impl<T> OrderedSeq<'_, T> for Twhere
T: Clone,
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute] value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi [Quirk] value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<'p, T> Seq<'p, T> for Twhere
T: Clone,
impl<'p, T> Seq<'p, T> for Twhere
T: Clone,
§type Iter<'a> = Once<&'a T>
where
T: 'a
type Iter<'a> = Once<&'a T> where T: 'a
§fn contains(&self, val: &T) -> boolwhere
T: PartialEq,
fn contains(&self, val: &T) -> boolwhere
T: PartialEq,
§fn to_maybe_ref<'b>(item: <T as Seq<'p, T>>::Item<'b>) -> Maybe<T, &'p T>where
'p: 'b,
fn to_maybe_ref<'b>(item: <T as Seq<'p, T>>::Item<'b>) -> Maybe<T, &'p T>where
'p: 'b,
MaybeRef].