Skip to main content

saya_cli/
state_path.rs

1use std::{
2    env,
3    path::{Path, PathBuf},
4};
5
6pub(crate) fn state_db_path() -> PathBuf {
7    if let Some(path) = env::var_os("SAYA_STATE_DB") {
8        return PathBuf::from(path);
9    }
10    let xdg = env::var_os("XDG_DATA_HOME");
11    let appdata = env::var_os("APPDATA");
12    let home = env::var_os("HOME");
13    platform_root(
14        xdg.as_deref().map(Path::new),
15        appdata.as_deref().map(Path::new),
16        home.as_deref().map(Path::new),
17    )
18    .join("saya/state.sqlite3")
19}
20
21pub fn resolve_state_db_path(
22    override_path: Option<&str>,
23    xdg: Option<&str>,
24    appdata: Option<&str>,
25    home: Option<&str>,
26) -> PathBuf {
27    if let Some(path) = override_path {
28        return path.into();
29    }
30    platform_root(
31        xdg.map(Path::new),
32        appdata.map(Path::new),
33        home.map(Path::new),
34    )
35    .join("saya/state.sqlite3")
36}
37
38fn platform_root(xdg: Option<&Path>, appdata: Option<&Path>, home: Option<&Path>) -> PathBuf {
39    if let Some(path) = xdg {
40        return path.into();
41    }
42    if let Some(path) = appdata {
43        return path.into();
44    }
45    let home = home.map(PathBuf::from).unwrap_or_else(env::temp_dir);
46    #[cfg(target_os = "macos")]
47    {
48        home.join("Library/Application Support")
49    }
50    #[cfg(not(target_os = "macos"))]
51    {
52        home.join(".local/share")
53    }
54}