RateLimitListener

Struct RateLimitListener 

Source
pub struct RateLimitListener<State> { /* private fields */ }
Expand description

TCP listener which accepts only a limited number of connections at a time.

This listener is based on tide::listener::TcpListener and should match the semantics of that listener in every way, accept that when there are more simultaneous outstanding requests than the configured limit, excess requests will fail immediately with error code 429 (Too Many Requests).

Implementations§

Source§

impl<State> RateLimitListener<State>

Source

pub fn new(addr: SocketAddr, limit: usize) -> Self

Listen at the given address.

Source

pub fn with_port(port: u16, limit: usize) -> Self

Listen at the given port on all interfaces.

Trait Implementations§

Source§

impl<State> Debug for RateLimitListener<State>
where State: Send + Sync + 'static,

Source§

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

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

impl<State> Display for RateLimitListener<State>

Source§

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

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

impl<State> Listener<State> for RateLimitListener<State>
where State: Clone + Send + Sync + 'static,

Source§

fn bind<'life0, 'async_trait>( &'life0 mut self, app: Server<State>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Bind the listener. This starts the listening process by opening the necessary network ports, but not yet accepting incoming connections. This method must be called before accept.
Source§

fn accept<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Start accepting incoming connections. This method must be called only after bind has succeeded.
Source§

fn info(&self) -> Vec<ListenInfo>

Expose information about the connection. This should always return valid data after bind has succeeded.
Source§

impl<State> ToListener<State> for RateLimitListener<State>
where State: Clone + Send + Sync + 'static,

Source§

type Listener = RateLimitListener<State>

What listener are we converting into?
Source§

fn to_listener(self) -> Result<Self::Listener>

Transform self into a Listener. Unless self is already bound/connected to the underlying io, converting to a listener does not initiate a connection. An Err return indicates an unsuccessful conversion to a listener, not an unsuccessful bind attempt.

Auto Trait Implementations§

§

impl<State> Freeze for RateLimitListener<State>
where State: Freeze,

§

impl<State> !RefUnwindSafe for RateLimitListener<State>

§

impl<State> Send for RateLimitListener<State>
where State: Send,

§

impl<State> Sync for RateLimitListener<State>
where State: Sync,

§

impl<State> Unpin for RateLimitListener<State>
where State: Unpin,

§

impl<State> !UnwindSafe for RateLimitListener<State>

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

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
§

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

§

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> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> ToString for T
where T: Display + ?Sized,

§

fn to_string(&self) -> String

Converts the given value to a String. Read more
§

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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