pub struct AppStorageBuilder { /* private fields */ }Expand description
Configures storage resolution without accessing the filesystem.
§Examples
use ailloli_ui_app_storage::AppStorage;
let builder = AppStorage::for_app("example").home_symlink_view(false);
let storage = builder.resolve_with_env(|_| None)?;
assert_eq!(storage.app_id().as_str(), "example");Implementations§
Source§impl AppStorageBuilder
impl AppStorageBuilder
Sourcepub fn home_symlink_view(self, enabled: bool) -> Self
pub fn home_symlink_view(self, enabled: bool) -> Self
Enables or disables creation of the optional compatibility symlink view.
The default is false. This setting alone performs no filesystem work.
§Examples
use ailloli_ui_app_storage::{AppStorage, HomeSymlinkViewState};
let storage = AppStorage::for_app("example").home_symlink_view(false).resolve_with_env(|_| None)?;
assert_eq!(storage.home_symlink_view_status().state(), HomeSymlinkViewState::Disabled);Sourcepub fn home_symlink_root(self, root: impl Into<PathBuf>) -> Self
pub fn home_symlink_root(self, root: impl Into<PathBuf>) -> Self
Overrides the compatibility-view root.
Exact ~ and ~/... prefixes expand from a non-empty HOME; without
one, the path remains textual. This does not enable or create the view.
§Examples
use ailloli_ui_app_storage::AppStorage;
let storage = AppStorage::for_app("example").home_symlink_root("~/view").resolve_with_env(|key| (key == "HOME").then(|| "/var/empty/example-user".into()))?;
assert_eq!(storage.home_symlink_view_status().root.to_string_lossy(), "/var/empty/example-user/view");Sourcepub fn single_dir(self, root: impl Into<PathBuf>) -> Self
pub fn single_dir(self, root: impl Into<PathBuf>) -> Self
Switches to a single explicit root with four category subdirectories.
Exact ~/~/... expansion occurs during resolution. Repeated calls use
the last root.
§Examples
use ailloli_ui_app_storage::AppStorage;
let storage = AppStorage::for_app("example").single_dir("/store").resolve_with_env(|_| None)?;
assert_eq!(storage.cache_dir().to_string_lossy(), "/store/cache");Sourcepub fn resolve(self) -> Result<AppStorage>
pub fn resolve(self) -> Result<AppStorage>
Resolves paths from the current process environment without creating them.
Empty environment values are treated as absent.
§Errors
Returns AppStorageError::InvalidAppId if the builder’s identifier is invalid.
§Examples
use ailloli_ui_app_storage::AppStorage;
let storage = AppStorage::for_app("example").resolve()?;
assert_eq!(storage.app_id().as_str(), "example");Sourcepub fn resolve_with_env(
self,
get: impl FnMut(&str) -> Option<String>,
) -> Result<AppStorage>
pub fn resolve_with_env( self, get: impl FnMut(&str) -> Option<String>, ) -> Result<AppStorage>
Resolves paths using a caller-supplied environment lookup.
In XDG mode each category uses, in order: <APP>_<KIND>_DIR, the
corresponding XDG_*_HOME plus the app id, the conventional path below
HOME, then a category-specific temporary-directory fallback. Only the
first app-specific tier is recorded in diagnostics. Empty strings are
absent. Resolution performs no filesystem writes.
§Errors
Returns AppStorageError::InvalidAppId if the builder’s identifier is invalid.
§Examples
use ailloli_ui_app_storage::AppStorage;
let storage = AppStorage::for_app("my-app").resolve_with_env(|key| match key {
"MY_APP_STATE_DIR" => Some("/override/state".into()),
"HOME" => Some("/var/empty/example-user".into()),
_ => None,
})?;
assert_eq!(storage.state_dir().to_string_lossy(), "/override/state");
assert_eq!(storage.diagnostics().env_overrides.len(), 1);Trait Implementations§
Source§impl Clone for AppStorageBuilder
impl Clone for AppStorageBuilder
Source§fn clone(&self) -> AppStorageBuilder
fn clone(&self) -> AppStorageBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more