@@ -14,13 +14,17 @@ use super::{HttpClient, HttpResponse};
1414
1515pub struct RateLimitClient < T : HttpClient > {
1616 inner : T ,
17- limiter : RateLimiter < NotKeyed , InMemoryState , DefaultClock > ,
17+ limiter : Option < RateLimiter < NotKeyed , InMemoryState , DefaultClock > > ,
1818}
1919
2020impl < T : HttpClient > RateLimitClient < T > {
2121 pub fn new ( inner : T , request_interval_ms : u64 ) -> Self {
22- let quota = Quota :: with_period ( Duration :: from_millis ( request_interval_ms) ) . unwrap ( ) ;
23- let limiter = RateLimiter :: direct ( quota) ;
22+ let limiter = if request_interval_ms == 0 {
23+ None
24+ } else {
25+ let quota = Quota :: with_period ( Duration :: from_millis ( request_interval_ms) ) . unwrap ( ) ;
26+ Some ( RateLimiter :: direct ( quota) )
27+ } ;
2428 Self { inner, limiter }
2529 }
2630}
@@ -30,10 +34,12 @@ impl<T: HttpClient> HttpClient for RateLimitClient<T> {
3034 where
3135 S : for < ' a > Deserialize < ' a > ,
3236 {
33- while let Err ( e) = self . limiter . check ( ) {
34- let time = e. wait_time_from ( Instant :: now ( ) ) ;
35- debug ! ( "waiting for {time:?}" ) ;
36- std:: thread:: sleep ( time) ;
37+ if let Some ( limiter) = self . limiter {
38+ while let Err ( e) = limiter. check ( ) {
39+ let time = e. wait_time_from ( Instant :: now ( ) ) ;
40+ debug ! ( "waiting for rate limit: {time:?}" ) ;
41+ std:: thread:: sleep ( time) ;
42+ }
3743 }
3844 self . inner . get ( path)
3945 }
0 commit comments