Skip to main content

AppPaths

Struct AppPaths 

Source
pub struct AppPaths { /* private fields */ }
Expand description

The four directories the daemon owns.

Resolved once and passed down, rather than recomputed at each use. Two resolutions in one process must agree, and the cheapest way to guarantee that is to only resolve once.

Implementations§

Source§

impl AppPaths

Source

pub fn from_directories( config: impl Into<PathBuf>, state: impl Into<PathBuf>, runtime: impl Into<PathBuf>, logs: impl Into<PathBuf>, ) -> Self

Rebuilds a previously resolved four-directory layout.

Service registrations use this to carry the installing operator’s application-data directories across the account boundary to the daemon. It is deliberately distinct from Self::rooted_at: these paths are already the four leaves, and forcing them under a new root would point the service at a second SQLite database.

Source

pub fn discover() -> Result<Self, PathsError>

Resolves the platform-standard locations for this account.

§Errors

PathsError::NoHomeDirectory when the operating system reports no home directory, which is the only way this can fail: nothing is touched on disk here. Use AppPaths::create_all for that.

Source

pub fn rooted_at(root: impl AsRef<Path>) -> Self

Places all four directories under one root, using the names 05-infrastructure.md gives them.

This is how a test gets a disposable layout and how a service that was installed against an explicitly configured root reproduces it. It is deliberately not what AppPaths::discover falls back to: a relative root passed here stays relative, and that is the caller’s decision to make rather than a default anything acquires by accident.

Source

pub fn config_dir(&self) -> &Path

Non-secret TOML configuration and the SQLite database.

Source

pub fn state_dir(&self) -> &Path

The agent lock, the attempt journal, and the retained runner package cache.

Source

pub fn runtime_dir(&self) -> &Path

Per-attempt disposable runner workspaces.

Source

pub fn logs_dir(&self) -> &Path

Rotating redacted agent diagnostics.

Source

pub fn all(&self) -> [(&'static str, &Path); 4]

The four directories, paired with the name each is known by. Ordered as 05-infrastructure.md lists them.

Source

pub fn create_all(&self) -> Result<(), PathsError>

Creates every directory that does not already exist.

Idempotent, and restrictive where the platform expresses that through mode bits: on Unix each leaf is created at 0700, so a runner workspace, an attempt journal, and a diagnostics file are not readable by other local accounts. Intermediate directories — ~/.local, ~/.config — are left alone, because they are shared with every other application and are not this program’s to tighten.

The mode is passed to mkdir(2) rather than applied with a following chmod, for the same reason crate::process::RestrictiveHandoff passes it to open(2): the two-step version leaves a window in which state/ and runtime/ exist at the umask default — typically 0755 — and those are the directories holding the attempt journal and the runner workspaces. A directory that was already there is still tightened, which is what keeps this idempotent and what upgrades a tree created by an earlier version.

On Windows the per-account AppData tree already denies other non-administrative users, and the one file whose exposure actually matters gets an explicit DACL of its own rather than relying on that: see crate::process::RestrictiveHandoff.

§Errors

PathsError::Create, naming which of the four failed and why.

Trait Implementations§

Source§

impl Clone for AppPaths

Source§

fn clone(&self) -> AppPaths

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AppPaths

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for AppPaths

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for AppPaths

Source§

impl PartialEq for AppPaths

Source§

fn eq(&self, other: &AppPaths) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for AppPaths

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more