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