use std::path::PathBuf;
mod root;
pub use root::{
clear_state_dir, clear_writable_state_dir, set_state_dir, set_writable_state_dir, state_dir,
writable_state_dir,
};
pub fn assets_dir() -> Option<PathBuf> {
state_dir().map(|d| d.join("assets"))
}
pub fn data_dir() -> Option<PathBuf> {
state_dir().map(|d| d.join("data"))
}
pub fn saves_dir() -> Option<PathBuf> {
writable_state_dir().map(|d| d.join("saves"))
}
pub fn preview_saves_dir() -> Option<PathBuf> {
writable_state_dir().map(|d| d.join("preview-saves"))
}
pub fn settings_path() -> Option<PathBuf> {
writable_state_dir().map(|d| d.join("settings"))
}
pub fn crashes_dir() -> Option<PathBuf> {
writable_state_dir().map(|d| d.join("crashes"))
}
pub fn worlds_dir() -> Option<PathBuf> {
state_dir().map(|d| d.join("worlds"))
}
pub fn cache_dir() -> Option<PathBuf> {
state_dir().map(|d| d.join("cache"))
}
pub fn thumbnails_dir() -> Option<PathBuf> {
state_dir().map(|d| d.join("thumbnails"))
}
pub fn shader_cache_dir() -> Option<PathBuf> {
writable_state_dir().map(|d| d.join("shader-cache"))
}
pub fn pipeline_cache_dir() -> Option<PathBuf> {
writable_state_dir().map(|d| d.join("pipeline-cache"))
}
pub fn bundled_shader_cache_dir() -> Option<PathBuf> {
state_dir().map(|d| d.join("shader-cache"))
}
#[cfg(test)]
mod tests {
use super::*;
use std::path::Path;
#[test]
fn installed_roots_redirect_every_state_dir() {
let flat = Path::new("/tmp/flat-probe");
set_state_dir(flat);
assert_eq!(state_dir().as_deref(), Some(flat));
assert_eq!(data_dir().unwrap(), flat.join("data"));
assert_eq!(cache_dir().unwrap(), flat.join("cache"));
assert_eq!(assets_dir().unwrap(), flat.join("assets"));
assert_eq!(worlds_dir().unwrap(), flat.join("worlds"));
assert_eq!(writable_state_dir().as_deref(), Some(flat));
assert_eq!(saves_dir().unwrap(), flat.join("saves"));
assert_eq!(settings_path().unwrap(), flat.join("settings"));
assert_eq!(crashes_dir().unwrap(), flat.join("crashes"));
let writable = Path::new("/tmp/per-user-probe");
set_writable_state_dir(writable);
assert_eq!(writable_state_dir().as_deref(), Some(writable));
assert_eq!(saves_dir().unwrap(), writable.join("saves"));
assert_eq!(settings_path().unwrap(), writable.join("settings"));
assert_eq!(crashes_dir().unwrap(), writable.join("crashes"));
assert_eq!(shader_cache_dir().unwrap(), writable.join("shader-cache"));
assert_eq!(
bundled_shader_cache_dir().unwrap(),
flat.join("shader-cache")
);
assert_eq!(data_dir().unwrap(), flat.join("data"));
clear_writable_state_dir();
assert_eq!(saves_dir().unwrap(), flat.join("saves"));
clear_state_dir();
assert_eq!(state_dir(), None);
for path in [
data_dir(),
cache_dir(),
assets_dir(),
worlds_dir(),
saves_dir(),
preview_saves_dir(),
settings_path(),
crashes_dir(),
thumbnails_dir(),
shader_cache_dir(),
pipeline_cache_dir(),
bundled_shader_cache_dir(),
writable_state_dir(),
] {
assert_eq!(path, None);
}
}
}