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";
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}