Struct RateLimiter

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

Rate limiter for KiteConnect API endpoints

This struct provides intelligent rate limiting for all KiteConnect API calls to ensure compliance with official API limits and prevent API key suspension.

§Features

  • Per-category limits: Different limits for quotes, historical data, orders, etc.
  • Automatic delays: Inserts precise delays when limits would be exceeded
  • Thread-safe: Supports concurrent requests from multiple threads
  • Configurable: Can be enabled/disabled as needed
  • Zero-overhead: Minimal performance impact when limits aren’t reached

§Rate Limit Categories

CategoryLimit (req/sec)Endpoints
Quote1Real-time quotes, LTP, OHLC
Historical3Historical candle data
Orders10Order placement/modification
Standard10All other endpoints

§Usage

The rate limiter is automatically integrated into KiteConnect and requires no manual configuration. It’s enabled by default and operates transparently.

§Example

use kiteconnect_async_wasm::connect::rate_limiter::RateLimiter;
use kiteconnect_async_wasm::connect::endpoints::KiteEndpoint;

let rate_limiter = RateLimiter::new(true); // enabled

// Check if request can proceed immediately
let can_proceed = rate_limiter.can_request_immediately(&KiteEndpoint::Quote).await;
if can_proceed {
    println!("Request can be made immediately");
}

// Wait for rate limit compliance and make request
rate_limiter.wait_for_request(&KiteEndpoint::Quote).await;
println!("Request made with rate limiting");

§Performance

  • Fast path: When limits aren’t reached, overhead is ~1-2 microseconds
  • Memory: Uses minimal memory (only active categories tracked)
  • Scalability: Handles hundreds of concurrent requests efficiently

Implementations§

Source§

impl RateLimiter

Source

pub fn new(enabled: bool) -> Self

Create a new rate limiter

Source

pub async fn wait_for_request(&self, endpoint: &KiteEndpoint)

Wait for rate limit compliance before making a request

This method will return immediately if no delay is needed, or will sleep for the required duration to comply with rate limits.

§Arguments
  • endpoint - The endpoint being accessed
§Example
use kiteconnect_async_wasm::connect::{RateLimiter, KiteEndpoint};

let rate_limiter = RateLimiter::new(true);

// This will wait if needed to comply with rate limits
rate_limiter.wait_for_request(&KiteEndpoint::Quote).await;

// Now it's safe to make the API request
println!("Making quote request...");
Source

pub async fn can_request_immediately(&self, endpoint: &KiteEndpoint) -> bool

Check if a request can be made without waiting

Returns true if the request can be made immediately, false if rate limiting would cause a delay.

Source

pub async fn get_delay_for_request(&self, endpoint: &KiteEndpoint) -> Duration

Get the delay required before making a request

Returns Duration::ZERO if no delay is needed.

Source

pub async fn get_stats(&self) -> RateLimiterStats

Get rate limiter statistics

Returns information about current rate limiter state for monitoring.

Source

pub fn set_enabled(&mut self, enabled: bool)

Enable or disable rate limiting

Source

pub fn is_enabled(&self) -> bool

Check if rate limiting is enabled

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

impl<T> ErasedDestructor for T
where T: 'static,