diff options
Diffstat (limited to 'src/dirs.rs')
-rw-r--r-- | src/dirs.rs | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/src/dirs.rs b/src/dirs.rs index 285a0d5..2fa6e50 100644 --- a/src/dirs.rs +++ b/src/dirs.rs @@ -37,59 +37,89 @@ pub fn make_all() -> Result<()> { Ok(()) } +#[must_use] pub fn config_file() -> std::path::PathBuf { config_dir().join("config.json") } const INVALID_PATH: &percent_encoding::AsciiSet = &percent_encoding::CONTROLS.add(b'/').add(b'%').add(b':'); +#[must_use] pub fn db_file(server: &str, email: &str) -> std::path::PathBuf { let server = percent_encoding::percent_encode(server.as_bytes(), INVALID_PATH) .to_string(); - cache_dir().join(format!("{}:{}.json", server, email)) + cache_dir().join(format!("{server}:{email}.json")) } +#[must_use] pub fn pid_file() -> std::path::PathBuf { runtime_dir().join("pidfile") } +#[must_use] pub fn agent_stdout_file() -> std::path::PathBuf { data_dir().join("agent.out") } +#[must_use] pub fn agent_stderr_file() -> std::path::PathBuf { data_dir().join("agent.err") } +#[must_use] +pub fn device_id_file() -> std::path::PathBuf { + data_dir().join("device_id") +} + +#[must_use] pub fn socket_file() -> std::path::PathBuf { runtime_dir().join("socket") } +#[must_use] fn config_dir() -> std::path::PathBuf { - let project_dirs = directories::ProjectDirs::from("", "", "rbw").unwrap(); + let project_dirs = + directories::ProjectDirs::from("", "", &profile()).unwrap(); project_dirs.config_dir().to_path_buf() } +#[must_use] fn cache_dir() -> std::path::PathBuf { - let project_dirs = directories::ProjectDirs::from("", "", "rbw").unwrap(); + let project_dirs = + directories::ProjectDirs::from("", "", &profile()).unwrap(); project_dirs.cache_dir().to_path_buf() } +#[must_use] fn data_dir() -> std::path::PathBuf { - let project_dirs = directories::ProjectDirs::from("", "", "rbw").unwrap(); + let project_dirs = + directories::ProjectDirs::from("", "", &profile()).unwrap(); project_dirs.data_dir().to_path_buf() } +#[must_use] fn runtime_dir() -> std::path::PathBuf { - let project_dirs = directories::ProjectDirs::from("", "", "rbw").unwrap(); - match project_dirs.runtime_dir() { - Some(dir) => dir.to_path_buf(), - None => format!( - "{}/rbw-{}", - std::env::temp_dir().to_string_lossy(), - nix::unistd::getuid().as_raw() - ) - .into(), + let project_dirs = + directories::ProjectDirs::from("", "", &profile()).unwrap(); + project_dirs.runtime_dir().map_or_else( + || { + format!( + "{}/{}-{}", + std::env::temp_dir().to_string_lossy(), + &profile(), + rustix::process::getuid().as_raw() + ) + .into() + }, + std::path::Path::to_path_buf, + ) +} + +#[must_use] +pub fn profile() -> String { + match std::env::var("RBW_PROFILE") { + Ok(profile) if !profile.is_empty() => format!("rbw-{profile}"), + _ => "rbw".to_string(), } } |