agentzero_core/common/
paths.rs1use 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}