twitter_internal_api/utils/
headers.rs1use reqwest::header::{HeaderMap, HeaderName};
2use serde::{Deserialize, Serialize};
3
4#[derive(Deserialize, Serialize, Clone, Debug)]
5pub struct RateLimitHeaders {
6 pub rate_limit_limit: Option<i64>,
7 pub rate_limit_remaining: Option<i64>,
8 pub rate_limit_rest: Option<i64>,
9}
10
11#[tracing::instrument(name = "extract_headers", skip_all)]
12pub fn extract_headers(headers: HeaderMap) -> RateLimitHeaders {
13 let mut output = RateLimitHeaders {
14 rate_limit_limit: None,
15 rate_limit_remaining: None,
16 rate_limit_rest: None,
17 };
18 for (key, value) in headers.into_iter() {
19 let key = key
20 .unwrap_or(HeaderName::from_static("tmp"))
21 .as_str()
22 .to_lowercase();
23 let value = value.to_str().unwrap_or_default();
24 match key.as_str() {
25 "x-rate-limit-limit" => {
26 let v = value.parse::<i64>().unwrap_or(1);
27 output.rate_limit_limit = Some(v);
28 }
29 "x-rate-limit-remaining" => {
30 let v = value.parse::<i64>().unwrap_or(1);
31 output.rate_limit_remaining = Some(v);
32 }
33 "x-rate-limit-reset" => {
34 let v = value.parse::<i64>().unwrap_or(1);
35 output.rate_limit_rest = Some(v);
36 }
37 _ => {}
38 }
39 }
40 output
41}