crate_activity/
read_config.rs1crate::ix!();
2
3pub const DEFAULT_USER_AGENT: &'static str = "crate-activity-bot/1.0 (contact@example.com)";
4
5pub async fn read_crate_list(config_dir: &Path) -> Vec<String> {
7 let crate_list_file = config_dir.join("crate_list.txt");
8
9 if let Ok(file) = File::open(&crate_list_file).await {
10 let mut lines = BufReader::new(file).lines();
11 let mut crate_list = Vec::new();
12
13 while let Some(line) = lines.next_line().await.unwrap_or(None) {
14 let trimmed = line.trim();
15 if !trimmed.is_empty() {
16 crate_list.push(trimmed.to_string());
17 }
18 }
19 crate_list
20 } else {
21 eprintln!("Warning: Could not find {}, using default crate list.", crate_list_file.display());
22 vec![
23 "serde".to_string(),
24 "tokio".to_string(),
25 ]
26 }
27}
28
29pub async fn read_user_agent(config_dir: &Path) -> String {
30 let user_agent_file = config_dir.join("user_agent.txt");
31
32 if let Ok(contents) = fs::read_to_string(&user_agent_file).await {
33 contents.trim().to_string()
34 } else {
35 eprintln!(
36 "Warning: Could not find {}, using default user agent.",
37 user_agent_file.display()
38 );
39 DEFAULT_USER_AGENT.to_string()
40 }
41}
42
43pub async fn ensure_config_structure(config_dir: &Path) -> io::Result<()> {
44 fs::create_dir_all(config_dir.join("cache")).await?;
45 if !config_dir.join("crate_list.txt").exists() {
46 fs::write(config_dir.join("crate_list.txt"), "serde\ntokio\n").await?;
47 }
48 if !config_dir.join("user_agent.txt").exists() {
49 fs::write(config_dir.join("user_agent.txt"), DEFAULT_USER_AGENT).await?;
50 }
51 Ok(())
52}