// Helper functions to get directory paths dynamically // Priority: Environment Variable > User Home Directory + Standard Path use std::env; use std::path::PathBuf; /// Get user home directory pub fn get_home_dir() -> PathBuf { dirs::home_dir() .unwrap_or_else(|| PathBuf::from(".")) } /// Get Momentry Core root directory /// Priority: MOMENTRY_CORE_ROOT env var > ~/momentry_core pub fn get_momentry_core_root() -> String { env::var("MOMENTRY_CORE_ROOT") .unwrap_or_else(|_| { format!("{}/momentry_core", get_home_dir().display()) }) } /// Get MarkBase root directory /// Priority: MARKBASE_ROOT env var > ~/markbase pub fn get_markbase_root() -> String { env::var("MARKBASE_ROOT") .unwrap_or_else(|_| { format!("{}/markbase", get_home_dir().display()) }) } /// Get Studio root directory /// Priority: MOMENTRY_STUDIO_ROOT env var > ~/momentry_studio pub fn get_studio_root() -> String { env::var("MOMENTRY_STUDIO_ROOT") .unwrap_or_else(|_| { format!("{}/momentry_studio", get_home_dir().display()) }) } /// Get Momentry root directory /// Priority: MOMENTRY_ROOT env var > ~/momentry pub fn get_momentry_root() -> String { env::var("MOMENTRY_ROOT") .unwrap_or_else(|_| { format!("{}/momentry", get_home_dir().display()) }) } /// Get storage root directory /// Priority: STORAGE_ROOT env var > ~/momentry/var/sftpgo/data pub fn get_storage_root() -> String { env::var("STORAGE_ROOT") .unwrap_or_else(|_| { format!("{}/momentry/var/sftpgo/data", get_home_dir().display()) }) } /// Get MarkBaseEngine root directory /// Priority: MARKBASE_ENGINE_ROOT env var > ~/MarkBaseEngine pub fn get_markbase_engine_root() -> String { env::var("MARKBASE_ENGINE_ROOT") .unwrap_or_else(|_| { format!("{}/MarkBaseEngine", get_home_dir().display()) }) } /// Get worker PID file path pub fn get_worker_pid_file() -> String { format!("{}/logs/worker_3002.pid", get_momentry_core_root()) } /// Get worker log file path pub fn get_worker_log_file() -> String { format!("{}/logs/worker_3002.log", get_momentry_core_root()) } #[cfg(test)] mod path_tests { use super::*; #[test] fn test_get_home_dir() { let home = get_home_dir(); assert!(home.exists() || home.to_str() == Some(".")); } #[test] fn test_get_momentry_core_root_without_env() { env::remove_var("MOMENTRY_CORE_ROOT"); let root = get_momentry_core_root(); assert!(root.contains("momentry_core")); } #[test] fn test_get_momentry_core_root_with_env() { env::set_var("MOMENTRY_CORE_ROOT", "/custom/path/core"); let root = get_momentry_core_root(); assert_eq!(root, "/custom/path/core"); env::remove_var("MOMENTRY_CORE_ROOT"); } }