1 use std::env; 2 use std::path::PathBuf; 3 home_dir() -> Option<PathBuf>4pub fn home_dir() -> Option<PathBuf> { dirs_sys_next::home_dir() } cache_dir() -> Option<PathBuf>5pub fn cache_dir() -> Option<PathBuf> { env::var_os("XDG_CACHE_HOME") .and_then(dirs_sys_next::is_absolute_path).or_else(|| home_dir().map(|h| h.join(".cache"))) } config_dir() -> Option<PathBuf>6pub fn config_dir() -> Option<PathBuf> { env::var_os("XDG_CONFIG_HOME").and_then(dirs_sys_next::is_absolute_path).or_else(|| home_dir().map(|h| h.join(".config"))) } data_dir() -> Option<PathBuf>7pub fn data_dir() -> Option<PathBuf> { env::var_os("XDG_DATA_HOME") .and_then(dirs_sys_next::is_absolute_path).or_else(|| home_dir().map(|h| h.join(".local/share"))) } data_local_dir() -> Option<PathBuf>8pub fn data_local_dir() -> Option<PathBuf> { data_dir() } runtime_dir() -> Option<PathBuf>9pub fn runtime_dir() -> Option<PathBuf> { env::var_os("XDG_RUNTIME_DIR").and_then(dirs_sys_next::is_absolute_path) } executable_dir() -> Option<PathBuf>10pub fn executable_dir() -> Option<PathBuf> { 11 env::var_os("XDG_BIN_HOME").and_then(dirs_sys_next::is_absolute_path).or_else(|| { 12 data_dir().map(|mut e| { e.pop(); e.push("bin"); e }) 13 }) 14 } audio_dir() -> Option<PathBuf>15pub fn audio_dir() -> Option<PathBuf> { dirs_sys_next::user_dir("MUSIC") } desktop_dir() -> Option<PathBuf>16pub fn desktop_dir() -> Option<PathBuf> { dirs_sys_next::user_dir("DESKTOP") } document_dir() -> Option<PathBuf>17pub fn document_dir() -> Option<PathBuf> { dirs_sys_next::user_dir("DOCUMENTS") } download_dir() -> Option<PathBuf>18pub fn download_dir() -> Option<PathBuf> { dirs_sys_next::user_dir("DOWNLOAD") } font_dir() -> Option<PathBuf>19pub fn font_dir() -> Option<PathBuf> { data_dir().map(|d| d.join("fonts")) } picture_dir() -> Option<PathBuf>20pub fn picture_dir() -> Option<PathBuf> { dirs_sys_next::user_dir("PICTURES") } public_dir() -> Option<PathBuf>21pub fn public_dir() -> Option<PathBuf> { dirs_sys_next::user_dir("PUBLICSHARE") } template_dir() -> Option<PathBuf>22pub fn template_dir() -> Option<PathBuf> { dirs_sys_next::user_dir("TEMPLATES") } video_dir() -> Option<PathBuf>23pub fn video_dir() -> Option<PathBuf> { dirs_sys_next::user_dir("VIDEOS") } 24 25 #[cfg(test)] 26 mod tests { 27 #[test] test_file_user_dirs_exists()28 fn test_file_user_dirs_exists() { 29 let user_dirs_file = crate::config_dir().unwrap().join("user-dirs.dirs"); 30 println!("{:?} exists: {:?}", user_dirs_file, user_dirs_file.exists()); 31 } 32 } 33