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