1use std::path::PathBuf;
2
3pub fn data_dir() -> PathBuf {
4 if let Ok(dir) = std::env::var("SYSPULSE_DATA_DIR") {
5 return PathBuf::from(dir);
6 }
7 #[cfg(unix)]
8 {
9 dirs::home_dir().unwrap_or_default().join(".syspulse")
10 }
11 #[cfg(windows)]
12 {
13 dirs::data_local_dir().unwrap_or_default().join("syspulse")
14 }
15}
16
17pub fn db_path() -> PathBuf {
18 data_dir().join("syspulse.db")
19}
20
21pub fn logs_dir() -> PathBuf {
22 data_dir().join("logs")
23}
24
25pub fn daemon_log_dir(name: &str) -> PathBuf {
26 logs_dir().join(name)
27}
28
29pub fn socket_path() -> PathBuf {
30 #[cfg(unix)]
31 {
32 data_dir().join("syspulse.sock")
33 }
34 #[cfg(windows)]
35 {
36 PathBuf::from(r"\\.\pipe\syspulse")
37 }
38}
39
40pub fn pid_path() -> PathBuf {
41 data_dir().join("syspulse.pid")
42}
43
44pub fn ensure_dirs() -> std::io::Result<()> {
45 std::fs::create_dir_all(data_dir())?;
46 std::fs::create_dir_all(logs_dir())?;
47 Ok(())
48}