Skip to main content

agentzero_core/common/
paths.rs

1use std::path::{Path, PathBuf};
2
3pub const ENV_DATA_DIR: &str = "AGENTZERO_DATA_DIR";
4pub const ENV_CONFIG_PATH: &str = "AGENTZERO_CONFIG";
5pub const DEFAULT_DATA_DIR_NAME: &str = ".agentzero";
6pub const DEFAULT_CONFIG_FILE: &str = "agentzero.toml";
7pub const DEFAULT_SQLITE_FILE: &str = "agentzero.db";
8
9pub fn data_dir_for_home(home_dir: &Path) -> PathBuf {
10    home_dir.join(DEFAULT_DATA_DIR_NAME)
11}
12
13pub fn default_data_dir() -> Option<PathBuf> {
14    dirs::home_dir().map(|home| data_dir_for_home(&home))
15}
16
17pub fn default_config_path() -> Option<PathBuf> {
18    default_data_dir().map(|dir| dir.join(DEFAULT_CONFIG_FILE))
19}
20
21pub fn default_sqlite_path() -> Option<PathBuf> {
22    default_data_dir().map(|dir| dir.join(DEFAULT_SQLITE_FILE))
23}
24
25#[cfg(test)]
26mod tests {
27    use super::{
28        data_dir_for_home, default_config_path, default_data_dir, default_sqlite_path,
29        DEFAULT_CONFIG_FILE, DEFAULT_DATA_DIR_NAME, DEFAULT_SQLITE_FILE,
30    };
31    use std::path::PathBuf;
32
33    #[test]
34    fn data_dir_for_home_joins_expected_segment_success_path() {
35        let home = PathBuf::from("/tmp/home");
36        let data_dir = data_dir_for_home(&home);
37        assert_eq!(data_dir, home.join(DEFAULT_DATA_DIR_NAME));
38    }
39
40    #[test]
41    fn default_paths_share_same_data_dir_root_success_path() {
42        if let (Some(data_dir), Some(config_path), Some(sqlite_path)) = (
43            default_data_dir(),
44            default_config_path(),
45            default_sqlite_path(),
46        ) {
47            assert_eq!(config_path, data_dir.join(DEFAULT_CONFIG_FILE));
48            assert_eq!(sqlite_path, data_dir.join(DEFAULT_SQLITE_FILE));
49        }
50    }
51}