Skip to main content

RateLimiter

Struct RateLimiter 

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

Thread-safe rate limit tracker for GitHub API operations.

Tracks rate limits for different GitHub API resources and authentication contexts (app-level vs installation-level) and provides methods to check rate limits before making requests.

§Examples

use github_bot_sdk::client::{RateLimiter, RateLimitContext};
use github_bot_sdk::auth::InstallationId;

let rate_limiter = RateLimiter::new(0.1); // 10% safety margin

// Check if we can make an app-level request
if rate_limiter.can_proceed(&RateLimitContext::App, "core") {
    // Make API request
}

// Check if we can make an installation-level request
let install_id = InstallationId::new(12345);
if rate_limiter.can_proceed(&RateLimitContext::Installation(install_id), "core") {
    // Make API request
}

Implementations§

Source§

impl RateLimiter

Source

pub fn new(margin: f64) -> Self

Create a new rate limiter with the specified safety margin.

§Arguments
  • margin - Safety margin (0.0 to 1.0) to keep as a buffer
§Examples
use github_bot_sdk::client::RateLimiter;

// Keep 10% buffer
let limiter = RateLimiter::new(0.1);
Source

pub fn update_from_headers( &self, context: &RateLimitContext, headers: &HeaderMap, )

Update rate limit information from response headers.

§Arguments
  • context - The authentication context (app or installation)
  • headers - HTTP response headers containing rate limit info
Source

pub fn can_proceed(&self, context: &RateLimitContext, resource: &str) -> bool

Check if we can proceed with a request for the given context and resource.

§Arguments
  • context - The authentication context (app or installation)
  • resource - The resource type (e.g., “core”, “search”)
§Returns

true if we have sufficient rate limit remaining (considering safety margin), false if we’re at or near the rate limit.

Source

pub fn get_limit( &self, context: &RateLimitContext, resource: &str, ) -> Option<RateLimit>

Get the current rate limit for a context and resource.

§Arguments
  • context - The authentication context (app or installation)
  • resource - The resource type
§Returns

Some(RateLimit) if we have rate limit data for this context/resource, None if we haven’t received rate limit headers yet.

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

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

Source§

type Output = T

Should always be Self
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