add new struct, send_request and can_send_request
This commit is contained in:
parent
599407373e
commit
91fd86d3fc
32
src/limit.rs
32
src/limit.rs
|
@ -7,10 +7,14 @@ use std::collections::{HashMap, VecDeque};
|
||||||
// request checks for all the request limiters that apply, and blocks if any of the limiters are 0
|
// request checks for all the request limiters that apply, and blocks if any of the limiters are 0
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
|
||||||
|
pub struct TypedRequest {
|
||||||
|
request: RequestBuilder,
|
||||||
|
limit_type: LimitType,
|
||||||
|
}
|
||||||
pub struct LimitedRequester {
|
pub struct LimitedRequester {
|
||||||
http: Client,
|
http: Client,
|
||||||
requests: VecDeque<RequestBuilder>,
|
requests: VecDeque<TypedRequest>,
|
||||||
last_reset_epoch: i64,
|
|
||||||
limits_rate: HashMap<LimitType, Limit>,
|
limits_rate: HashMap<LimitType, Limit>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,13 +28,16 @@ impl LimitedRequester {
|
||||||
LimitedRequester {
|
LimitedRequester {
|
||||||
http: Client::new(),
|
http: Client::new(),
|
||||||
requests: VecDeque::new(),
|
requests: VecDeque::new(),
|
||||||
last_reset_epoch: chrono::Utc::now().timestamp(),
|
|
||||||
limits_rate: Limits::check_limits(api_url).await,
|
limits_rate: Limits::check_limits(api_url).await,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_to_queue(request: RequestBuilder, queue: &mut VecDeque<RequestBuilder>) {
|
pub async fn send_request(&mut self, request: RequestBuilder, limit_type: LimitType) {
|
||||||
queue.push_back(request);
|
self.requests.push_back(TypedRequest {
|
||||||
|
request: request,
|
||||||
|
limit_type: limit_type,
|
||||||
|
});
|
||||||
|
// TODO: Implement
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_limit_entry(entry: &mut Limit, reset: u64, remaining: u64, limit: u64) {
|
fn update_limit_entry(entry: &mut Limit, reset: u64, remaining: u64, limit: u64) {
|
||||||
|
@ -44,8 +51,19 @@ impl LimitedRequester {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn decrement_limit_entry(entry: &mut Limit) {
|
pub fn can_send_request(self, limit_type: LimitType) -> bool {
|
||||||
entry.remaining -= 1;
|
let limits = self.limits_rate.get(&limit_type);
|
||||||
|
|
||||||
|
match limits {
|
||||||
|
Some(limit) => {
|
||||||
|
if limit.remaining > 0 {
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => false,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_limits(&mut self, response: Response, limit_type: LimitType) {
|
fn update_limits(&mut self, response: Response, limit_type: LimitType) {
|
||||||
|
|
Loading…
Reference in New Issue