add new struct, send_request and can_send_request

This commit is contained in:
bitfl0wer 2023-04-14 18:29:20 +02:00
parent 599407373e
commit 91fd86d3fc
1 changed files with 25 additions and 7 deletions

View File

@ -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) {