pub struct APIKeyPool { /* private fields */ }
Expand description
A pool of API keys.
Implementations§
Source§impl APIKeyPool
impl APIKeyPool
Sourcepub fn new() -> Self
pub fn new() -> Self
Returns an empty API key pool.
Examples found in repository?
examples/api-key-pool.rs (line 19)
7async fn main() {
8 // Create a RateLimitPolicy to be applied to all API keys.
9 // Note: An APIPool can have APIKeys with different RateLimitPolicies.
10 // For the sake of simplicity, this example assumes identical policies.
11 let pol = RateLimitPolicy::new(1, Duration::seconds(2));
12
13 // Create the APIKeys.
14 let api1 = APIKey::new("1", pol);
15 let api2 = APIKey::new("2", pol);
16 let api3 = APIKey::new("3", pol);
17
18 // Create the APIKeyPool.
19 let mut pool = APIKeyPool::new();
20 pool.add_key(api1).await;
21 pool.add_key(api2).await;
22 pool.add_key(api3).await;
23
24 // Simulate 20 requests.
25 let mut ctr = 0;
26 while ctr < 20 {
27 // Use the APIKey if available (according to its respective RateLimitPolicy) or sleep.
28 if let Some(key) = pool.poll_for_key().await {
29 println!("{}", key);
30 ctr += 1;
31 } else {
32 println!("Have to sleep.");
33 time::sleep(time::Duration::from_millis(500)).await;
34 }
35 }
36}
Sourcepub async fn add_key(&mut self, key: APIKey)
pub async fn add_key(&mut self, key: APIKey)
Examples found in repository?
examples/api-key-pool.rs (line 20)
7async fn main() {
8 // Create a RateLimitPolicy to be applied to all API keys.
9 // Note: An APIPool can have APIKeys with different RateLimitPolicies.
10 // For the sake of simplicity, this example assumes identical policies.
11 let pol = RateLimitPolicy::new(1, Duration::seconds(2));
12
13 // Create the APIKeys.
14 let api1 = APIKey::new("1", pol);
15 let api2 = APIKey::new("2", pol);
16 let api3 = APIKey::new("3", pol);
17
18 // Create the APIKeyPool.
19 let mut pool = APIKeyPool::new();
20 pool.add_key(api1).await;
21 pool.add_key(api2).await;
22 pool.add_key(api3).await;
23
24 // Simulate 20 requests.
25 let mut ctr = 0;
26 while ctr < 20 {
27 // Use the APIKey if available (according to its respective RateLimitPolicy) or sleep.
28 if let Some(key) = pool.poll_for_key().await {
29 println!("{}", key);
30 ctr += 1;
31 } else {
32 println!("Have to sleep.");
33 time::sleep(time::Duration::from_millis(500)).await;
34 }
35 }
36}
Sourcepub async fn poll_for_key(&mut self) -> Option<String>
pub async fn poll_for_key(&mut self) -> Option<String>
Checks the API key pool for any available API keys, and returns the API key if available.
Examples found in repository?
examples/api-key-pool.rs (line 28)
7async fn main() {
8 // Create a RateLimitPolicy to be applied to all API keys.
9 // Note: An APIPool can have APIKeys with different RateLimitPolicies.
10 // For the sake of simplicity, this example assumes identical policies.
11 let pol = RateLimitPolicy::new(1, Duration::seconds(2));
12
13 // Create the APIKeys.
14 let api1 = APIKey::new("1", pol);
15 let api2 = APIKey::new("2", pol);
16 let api3 = APIKey::new("3", pol);
17
18 // Create the APIKeyPool.
19 let mut pool = APIKeyPool::new();
20 pool.add_key(api1).await;
21 pool.add_key(api2).await;
22 pool.add_key(api3).await;
23
24 // Simulate 20 requests.
25 let mut ctr = 0;
26 while ctr < 20 {
27 // Use the APIKey if available (according to its respective RateLimitPolicy) or sleep.
28 if let Some(key) = pool.poll_for_key().await {
29 println!("{}", key);
30 ctr += 1;
31 } else {
32 println!("Have to sleep.");
33 time::sleep(time::Duration::from_millis(500)).await;
34 }
35 }
36}
Trait Implementations§
Source§impl Default for APIKeyPool
impl Default for APIKeyPool
Source§fn default() -> APIKeyPool
fn default() -> APIKeyPool
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for APIKeyPool
impl !RefUnwindSafe for APIKeyPool
impl Send for APIKeyPool
impl Sync for APIKeyPool
impl Unpin for APIKeyPool
impl !UnwindSafe for APIKeyPool
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