crate_activity/
fetch_usage.rs1crate::ix!();
2
3pub async fn fetch_usage(user_agent: &str, config_dir: &Path, crate_name: &str)
5 -> Result<Option<CrateResponse>, reqwest::Error>
6{
7 let today = Utc::now().date_naive();
8
9 if let Some(cached) = load_cached_response(config_dir,crate_name, today).await {
10 println!("Loaded cached data for {}", crate_name);
11 return Ok(Some(cached));
12 }
13
14 let url = format!("https://crates.io/api/v1/crates/{}/downloads", crate_name);
15 let client = Client::new();
16
17 let response = client
18 .get(&url)
19 .header("User-Agent", user_agent)
20 .send()
21 .await?;
22
23 if response.status().is_success() {
24 let body = response.text().await?;
25 if let Ok(usage) = serde_json::from_str::<CrateResponse>(&body) {
26 cache_response(&config_dir,crate_name, today, &usage).await.ok();
27 return Ok(Some(usage));
28 }
29 }
30 Ok(None)
31}