pub struct RateLimiter { /* private fields */ }Expand description
In-memory rate limiter that manages token buckets for different endpoints Thread-safe but not cross-process
Implementations§
Source§impl RateLimiter
impl RateLimiter
Sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
examples/rate_limiter_test.rs (line 10)
7async fn main() -> Result<()> {
8 env_logger::init();
9
10 let rate_limiter = rate_limiter::RateLimiter::new();
11
12 for i in 1..=5 {
13 let _ = rate_limiter.wait("func1", 1.0, 15).await?;
14 println!("call {}, time: {}", i, chrono::Local::now());
15 }
16
17 sleep(Duration::from_secs(5));
18
19 for i in 1..=20 {
20 let _ = rate_limiter.wait("func1", 1.0, 15).await?;
21 println!("call {}, time: {}", i, chrono::Local::now());
22 }
23
24 sleep(Duration::from_secs(15));
25
26
27 for i in 1..=20 {
28 let _ = rate_limiter.wait("func1", 1.0, 15).await?;
29 println!("call {}, time: {}", i, chrono::Local::now());
30 }
31
32 Ok(())
33}Sourcepub async fn wait(
&self,
identifier: &str,
rate: f64,
burst: u32,
) -> Result<RateLimitGuard>
pub async fn wait( &self, identifier: &str, rate: f64, burst: u32, ) -> Result<RateLimitGuard>
Wait for a token to become available for the given endpoint and return a guard When the guard is dropped, record_response will be called automatically
Examples found in repository?
examples/rate_limiter_test.rs (line 13)
7async fn main() -> Result<()> {
8 env_logger::init();
9
10 let rate_limiter = rate_limiter::RateLimiter::new();
11
12 for i in 1..=5 {
13 let _ = rate_limiter.wait("func1", 1.0, 15).await?;
14 println!("call {}, time: {}", i, chrono::Local::now());
15 }
16
17 sleep(Duration::from_secs(5));
18
19 for i in 1..=20 {
20 let _ = rate_limiter.wait("func1", 1.0, 15).await?;
21 println!("call {}, time: {}", i, chrono::Local::now());
22 }
23
24 sleep(Duration::from_secs(15));
25
26
27 for i in 1..=20 {
28 let _ = rate_limiter.wait("func1", 1.0, 15).await?;
29 println!("call {}, time: {}", i, chrono::Local::now());
30 }
31
32 Ok(())
33}More examples
examples/sellers_v1_use_raw_api.rs (line 18)
6async fn main() -> Result<()> {
7 let spapi_config = SpapiConfig::from_env()?;
8 let spapi_client = SpapiClient::new(spapi_config.clone())?;
9 {
10 // Internally refresh the access token and create a configuration
11 // Configuration must be created for each API call
12 let configuration = spapi_client.create_configuration().await?;
13
14 // Wait for rate limit before making the API call
15 // When _guard is dropped, the rate limiter will mark the api call as having received a response
16 let _guard = spapi_client
17 .limiter()
18 .wait("get_marketplace_participations", 0.016, 15)
19 .await?;
20
21 // Call the API to get marketplace participations
22 let res = get_marketplace_participations(&configuration).await?;
23
24 println!("Marketplace Participations: {:#?}", res);
25 }
26 Ok(())
27}Sourcepub async fn wait_for_token(
&self,
identifier: &str,
rate: f64,
burst: u32,
) -> Result<()>
👎Deprecated since 0.1.4: Use wait() instead.
pub async fn wait_for_token( &self, identifier: &str, rate: f64, burst: u32, ) -> Result<()>
wait() instead.Wait for a token to become available for the given endpoint This method will block until a token is available
Sourcepub async fn check_token_availability(&self, identifier: &str) -> Result<bool>
pub async fn check_token_availability(&self, identifier: &str) -> Result<bool>
Check if a token is available without consuming it
Sourcepub async fn get_token_status(&self) -> Result<HashMap<String, (f64, f64, u32)>>
pub async fn get_token_status(&self) -> Result<HashMap<String, (f64, f64, u32)>>
Get current token status for all endpoints Returns (tokens, rate, burst) for each endpoint
Sourcepub async fn active_buckets_count(&self) -> usize
pub async fn active_buckets_count(&self) -> usize
Get the number of active buckets
Sourcepub async fn record_response(&self, identifier: &str) -> Result<()>
👎Deprecated since 0.1.4: Use wait() instead.
pub async fn record_response(&self, identifier: &str) -> Result<()>
wait() instead.Record that a response was received for the given endpoint This updates the last_response_time used for enforcing minimum intervals
Trait Implementations§
Auto Trait Implementations§
impl Freeze for RateLimiter
impl !RefUnwindSafe for RateLimiter
impl Send for RateLimiter
impl Sync for RateLimiter
impl Unpin for RateLimiter
impl !UnwindSafe for RateLimiter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more