RateLimitBuilder

Struct RateLimitBuilder 

Source
pub struct RateLimitBuilder { /* private fields */ }
Expand description

Builder for configuring a RateLimitMiddleware.

Implementations§

Source§

impl RateLimitBuilder

Source

pub fn new() -> Self

Create a new builder.

Source

pub fn route<F>(self, configure: F) -> Self

Add a route using a closure-based configuration.

§Panics

Panics if no limits are configured via .limit().

§Example
use route_ratelimit::RateLimitMiddleware;
use std::time::Duration;

let middleware = RateLimitMiddleware::builder()
    .route(|r| r.limit(15000, Duration::from_secs(10)))
    .route(|r| r.path("/api").limit(1000, Duration::from_secs(10)))
    .build();
Source

pub fn host<F>(self, host: impl Into<String>, configure: F) -> Self

Configure routes for a specific host using a scoped builder.

This is the preferred way to configure multiple routes for the same host, as it avoids repeating the host for each route.

§Example
use route_ratelimit::{RateLimitMiddleware, ThrottleBehavior};
use std::time::Duration;
use http::Method;

let middleware = RateLimitMiddleware::builder()
    .host("clob.polymarket.com", |host| {
        host
            .route(|r| r.limit(9000, Duration::from_secs(10)))
            .route(|r| r.path("/book").limit(1500, Duration::from_secs(10)))
            .route(|r| r.path("/price").limit(1500, Duration::from_secs(10)))
            .route(|r| {
                r.method(Method::POST)
                    .path("/order")
                    .limit(3500, Duration::from_secs(10))
                    .limit(36000, Duration::from_secs(600))
            })
    })
    .host("data-api.polymarket.com", |host| {
        host
            .route(|r| r.limit(1000, Duration::from_secs(10)))
            .route(|r| r.path("/trades").limit(200, Duration::from_secs(10)))
    })
    .build();
Source

pub fn add_route(self, route: Route) -> Self

Add a pre-configured route.

Source

pub fn build(self) -> RateLimitMiddleware

Build the middleware.

§Warnings

If the tracing feature is enabled, this method will emit a warning when catch-all routes (routes with no host, method, or path filters) are followed by more specific routes. This pattern may cause unexpected behavior since all matching routes’ limits are applied.

Trait Implementations§

Source§

impl Clone for RateLimitBuilder

Source§

fn clone(&self) -> RateLimitBuilder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RateLimitBuilder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for RateLimitBuilder

Source§

fn default() -> RateLimitBuilder

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more