RateLimiter

Struct RateLimiter 

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

Discord HTTP client API rate limiter.

The RateLimiter runs an associated actor task to concurrently handle permit requests and responses.

Cloning a RateLimiter increments just the amount of senders for the actor. The actor completes when there are no senders and non-completed permits left.

Implementations§

Source§

impl RateLimiter

Source

pub fn new(global_limit: u16) -> Self

Create a new RateLimiter with a custom global limit.

Source

pub fn acquire(&self, endpoint: Endpoint) -> PermitFuture

Await a single permit for this endpoint.

Permits are queued per endpoint in the order they were requested.

Source

pub fn acquire_if<P>( &self, endpoint: Endpoint, predicate: P, ) -> MaybePermitFuture
where P: FnOnce(Option<Bucket>) -> bool + Send + 'static,

Await a single permit for this endpoint, but only if the predicate evaluates to true.

Permits are queued per endpoint in the order they were requested.

Note that the predicate is asynchronously called in the actor task.

§Example
use twilight_http_ratelimiting::{Endpoint, Method};

let endpoint = Endpoint {
    method: Method::Get,
    path: String::from("applications/@me"),
};
if let Some(permit) = rate_limiter
    .acquire_if(endpoint, |b| b.is_none_or(|b| b.remaining > 10))
    .await
{
    let headers = unimplemented!("GET /applications/@me");
    permit.complete(headers);
}
Source

pub async fn bucket(&self, endpoint: Endpoint) -> Option<Bucket>

Retrieve the Bucket for this endpoint.

The bucket is internally retrieved via acquire_if.

Trait Implementations§

Source§

impl Clone for RateLimiter

Source§

fn clone(&self) -> RateLimiter

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 RateLimiter

Source§

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

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

impl Default for RateLimiter

Source§

fn default() -> Self

Create a new RateLimiter with Discord’s default global limit.

Currently this is 50.

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.

§

impl<T> Instrument for T

§

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

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

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> 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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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