Struct AppPaths
pub struct AppPaths { /* private fields */ }Expand description
Where one app keeps its files, the same API on every target:
| Linux | macOS | Web | |
|---|---|---|---|
data | $XDG_DATA_HOME/<id> | ~/Library/Application Support/<id> | opfs://<profile>/<id>/data |
config | $XDG_CONFIG_HOME/<id> | ~/Library/Application Support/<id> | opfs://<profile>/<id>/config |
cache | $XDG_CACHE_HOME/<id> | ~/Library/Caches/<id> | opfs://<profile>/<id>/cache |
state | $XDG_STATE_HOME/<id> | ~/Library/Application Support/<id> | opfs://<profile>/<id>/state |
runtime | $XDG_RUNTIME_DIR/<id> | $TMPDIR/<id> | memory, for the page’s lifetime |
user_dir | xdg-user-dirs | ~/Documents, … | unsupported |
On native targets these are exactly data_dir and the
other per-user directories with the id joined on. When one does not
resolve (no home directory), durable storage falls back to memory rather
than to a path relative to wherever the process started.
The id is one path component, typically the app’s reverse-DNS id. Bytes
that cannot appear in one (/, \, :, %, control characters) are
percent-escaped, as are the ids ., .. and the empty id, so no id can
name a location outside its own.
Implementations§
§impl AppPaths
impl AppPaths
pub fn for_app(id: &str) -> AppPaths
pub fn for_app(id: &str) -> AppPaths
The app’s locations in this user’s (or on the web, the page’s profile’s) storage.
pub fn under(root: impl Into<PathBuf>, id: &str) -> AppPaths
pub fn under(root: impl Into<PathBuf>, id: &str) -> AppPaths
Everything below root/<id>: data, config, cache, state and
runtime subdirectories, and no user folders, workspace or fonts.
For tests and for hosts that give each app a sandbox directory.
pub fn with_profile(self, profile: &str) -> AppPaths
pub fn with_profile(self, profile: &str) -> AppPaths
Keep web storage in profile’s tree. Native per-user directories
belong to one profile already, so native targets and scoped paths
resolve as before.
pub fn data(&self) -> Location
pub fn data(&self) -> Location
Durable files the app owns: documents, databases, downloads it manages.
pub fn state(&self) -> Location
pub fn state(&self) -> Location
State worth keeping across restarts but not worth backing up: history, window layout, logs.
pub fn runtime(&self) -> Result<Location, Unsupported<Feature>>
pub fn runtime(&self) -> Result<Location, Unsupported<Feature>>
Scratch space for this login session (on the web, this page).
§Errors
[Unsupported] when the session has no private runtime directory
(Linux without $XDG_RUNTIME_DIR, macOS without $TMPDIR).
pub fn user_dir(&self, dir: UserDir) -> Result<Location, Unsupported<Feature>>
pub fn user_dir(&self, dir: UserDir) -> Result<Location, Unsupported<Feature>>
One of the user’s content folders.
§Errors
[Unsupported] on the web, for scoped paths, and when the user has
no such folder (disabled in user-dirs.dirs, or no home directory).
pub fn workspace_root(&self) -> Result<Location, Unsupported<Feature>>
pub fn workspace_root(&self) -> Result<Location, Unsupported<Feature>>
The collaborative workspace the host mounted for this app:
$TILO_WORKSPACE_ROOT when absolute, else /var/workspace on a Tilo
Linux session ($TILO_WORKSPACE_ID set).
§Errors
[Unsupported] on the web, for scoped paths, and when no workspace
is mounted.
pub fn font_root(&self) -> Result<Location, Unsupported<Feature>>
pub fn font_root(&self) -> Result<Location, Unsupported<Feature>>
The directory holding the Tilo font catalog: where the OS image
installs it on Linux, the app bundle’s Contents/Resources/fonts on
macOS. Only the location is resolved; readers verify what they use.
§Errors
[Unsupported] on the web (fonts arrive as data), for scoped paths,
and on macOS when the app does not run from a bundle.
Trait Implementations§
impl Eq for AppPaths
impl StructuralPartialEq for AppPaths
Auto Trait Implementations§
impl Freeze for AppPaths
impl RefUnwindSafe for AppPaths
impl Send for AppPaths
impl Sync for AppPaths
impl Unpin for AppPaths
impl UnsafeUnpin for AppPaths
impl UnwindSafe for AppPaths
Blanket Implementations§
§impl<T> AnyEq for T
impl<T> AnyEq for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more