use std::path::PathBuf;
const SOCKET_NAME: &str = "daemon.sock";
const FALLBACK_BASE: &str = "~/.cache/hallouminate";
pub fn daemon_socket_path() -> PathBuf {
if let Some(explicit) = std::env::var_os("HALLOUMINATE_SOCKET")
&& !explicit.is_empty()
{
return PathBuf::from(explicit);
}
if let Some(runtime) = std::env::var_os("XDG_RUNTIME_DIR")
&& !runtime.is_empty()
{
let mut p = PathBuf::from(runtime);
p.push("hallouminate");
p.push(SOCKET_NAME);
return p;
}
let base = shellexpand::tilde(FALLBACK_BASE).into_owned();
PathBuf::from(base).join(SOCKET_NAME)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn socket_path_is_named_daemon_sock() {
let p = daemon_socket_path();
assert_eq!(p.file_name().and_then(|s| s.to_str()), Some(SOCKET_NAME));
}
}