pub struct RateLimiterBuilder<BE, BO, F> { /* private fields */ }

Implementations§

source§

impl<BE, BI, BO, F, O> RateLimiterBuilder<BE, BO, F>
where BE: Backend<BI, Output = BO> + 'static, BI: 'static, F: Fn(&ServiceRequest) -> O, O: Future<Output = Result<BI, Error>>,

source

pub fn fail_open(self, fail_open: bool) -> Self

Choose whether to allow a request if the backend returns a failure.

Default is false.

source

pub fn add_headers(self) -> Self

Sets the RateLimiterBuilder::request_allowed_transformation and RateLimiterBuilder::request_denied_response functions, such that the following headers are set in both the allowed and denied responses:

  • x-ratelimit-limit
  • x-ratelimit-remaining
  • x-ratelimit-reset (seconds until the reset)
  • retry-after (denied only, seconds until the reset)

This function requires the Backend Output to implement HeaderCompatibleOutput

source

pub fn request_allowed_transformation<M>(self, mutation: Option<M>) -> Self
where M: Fn(&mut HeaderMap, Option<&BO>, bool) + 'static,

In the event that the request is allowed:

You can optionally mutate the response headers to include the rate limit status.

By default no changes are made to the response.

Note the Backend::Output will be None if the backend failed and RateLimiterBuilder::fail_open is enabled.

The boolean parameter indicates if the rate limit was rolled back (so the remaining request count can be adjusted).

source

pub fn request_denied_response<R>(self, denied_response: R) -> Self
where R: Fn(&BO) -> HttpResponse + 'static,

In the event that the request is denied, configure the HttpResponse returned.

Defaults to an empty body with status 429.

source

pub fn rollback_condition<C>(self, condition: Option<C>) -> Self
where C: Fn(StatusCode) -> bool + 'static,

After processing a request, attempt to rollback the request count based on the status of the service response.

By default the rate limit is never rolled back.

source

pub fn rollback_server_errors(self) -> Self

Configures the RateLimiterBuilder::rollback_condition to rollback if the status code is a server error (5xx).

source

pub fn build(self) -> RateLimiter<BE, BO, F>

Auto Trait Implementations§

§

impl<BE, BO, F> !RefUnwindSafe for RateLimiterBuilder<BE, BO, F>

§

impl<BE, BO, F> !Send for RateLimiterBuilder<BE, BO, F>

§

impl<BE, BO, F> !Sync for RateLimiterBuilder<BE, BO, F>

§

impl<BE, BO, F> Unpin for RateLimiterBuilder<BE, BO, F>
where BE: Unpin, F: Unpin,

§

impl<BE, BO, F> !UnwindSafe for RateLimiterBuilder<BE, BO, F>

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

§

type Output = T

Should always be Self
source§

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

§

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>,

§

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