saya_cli/interactive/
session_paths.rs1use std::{
2 env,
3 path::{Path, PathBuf},
4};
5
6pub fn default_history_file() -> PathBuf {
8 let session_dir = default_session_dir();
9 match session_dir.parent() {
10 Some(parent) => parent.join("input_history"),
11 None => session_dir.join("input_history"),
12 }
13}
14
15pub fn default_session_dir() -> PathBuf {
16 let override_dir = env::var_os("SAYA_SESSION_DIR").map(PathBuf::from);
17 let xdg = env::var_os("XDG_DATA_HOME").map(PathBuf::from);
18 let appdata = env::var_os("APPDATA").map(PathBuf::from);
19 let home = env::var_os("HOME").map(PathBuf::from);
20 resolve_paths(
21 override_dir.as_deref(),
22 xdg.as_deref(),
23 appdata.as_deref(),
24 home.as_deref(),
25 )
26}
27
28pub fn resolve_session_dir(
29 override_dir: Option<&str>,
30 xdg: Option<&str>,
31 appdata: Option<&str>,
32 home: Option<&str>,
33) -> PathBuf {
34 resolve_paths(
35 override_dir.map(Path::new),
36 xdg.map(Path::new),
37 appdata.map(Path::new),
38 home.map(Path::new),
39 )
40}
41
42fn resolve_paths(
43 override_dir: Option<&Path>,
44 xdg: Option<&Path>,
45 appdata: Option<&Path>,
46 home: Option<&Path>,
47) -> PathBuf {
48 if let Some(path) = override_dir {
49 return path.into();
50 }
51 if let Some(path) = xdg {
52 return path.join("saya/sessions");
53 }
54 if let Some(path) = appdata {
55 return path.join("saya/sessions");
56 }
57 home.map(|path| path.join(".local/share/saya/sessions"))
58 .unwrap_or_else(|| PathBuf::from(".local/share/saya/sessions"))
59}