use std::path::PathBuf;
pub const SYSTEM_SOCKET: &str = "/run/zinit.sock";
pub const USER_SOCKET_SUFFIX: &str = "hero/var/zinit.sock";
pub fn default_path() -> PathBuf {
let system = system_path();
if system.exists() { system } else { user_path() }
}
pub fn system_path() -> PathBuf {
PathBuf::from(SYSTEM_SOCKET)
}
pub fn user_path() -> PathBuf {
if let Some(home) = std::env::var_os("HOME") {
PathBuf::from(home).join(USER_SOCKET_SUFFIX)
} else {
PathBuf::from("/tmp/zinit.sock")
}
}
pub const SYSTEM_CONFIG_DIR: &str = "/etc/zinit/services";
pub const USER_CONFIG_DIR_SUFFIX: &str = "hero/cfg/zinit";
pub fn system_config_dir() -> PathBuf {
PathBuf::from(SYSTEM_CONFIG_DIR)
}
pub fn user_config_dir() -> PathBuf {
if let Some(home) = std::env::var_os("HOME") {
PathBuf::from(home).join(USER_CONFIG_DIR_SUFFIX)
} else {
PathBuf::from("/tmp/zinit/services")
}
}
pub fn config_dirs() -> Vec<PathBuf> {
vec![user_config_dir(), system_config_dir()]
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_system_path() {
assert_eq!(system_path(), PathBuf::from("/run/zinit.sock"));
}
#[test]
fn test_user_path() {
let path = user_path();
assert!(path.to_string_lossy().ends_with(USER_SOCKET_SUFFIX));
}
#[test]
fn test_config_dirs() {
let dirs = config_dirs();
assert_eq!(dirs.len(), 2);
assert!(dirs[0].to_string_lossy().contains(USER_CONFIG_DIR_SUFFIX));
assert_eq!(dirs[1], PathBuf::from(SYSTEM_CONFIG_DIR));
}
}