crate_activity/
read_config.rs

1crate::ix!();
2
3pub const DEFAULT_USER_AGENT: &'static str = "crate-activity-bot/1.0 (contact@example.com)";
4
5// Read crate names from a config file (~/.published-crates)
6pub 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}