Skip to main content

AppDirectories

Struct AppDirectories 

Source
pub struct AppDirectories {
    pub extensions_dir: PathBuf,
    pub storage_dir: PathBuf,
    pub logs_dir: PathBuf,
}
Expand description

Re-export of AppDirectories — platform-aware directory resolution.

See AppDirectories::resolve for the full resolution logic including environment variable overrides and user configuration files. Application directories derived from configuration.

AppDirectories holds the resolved filesystem paths that DSCode uses to store extensions, persistent data, and log files. Paths are resolved at construction time from a priority chain of environment variables, user configuration, and platform defaults.

§Resolution priority (highest to lowest)

  1. Environment variable override — e.g. DSCODE_EXTENSIONS_DIR for the extensions directory.
  2. User config file~/.dscode/config.json, which may specify custom paths under a "paths" object.
  3. Platform default~/.dscode/extensions, ~/.dscode/storage, and ~/.dscode/logs respectively.

§User Configuration

Reads ~/.dscode/config.json for custom paths:

{
  "paths": {
    "extensionsDir": "/custom/extensions",
    "storageDir": "/custom/storage",
    "logsDir": "/custom/logs"
  }
}

Both camelCase and snake_case keys are accepted.

§Invariants

  • All three directory paths exist on disk after AppDirectories::resolve returns Ok. Directories are created automatically if they do not exist.
  • Tilde (~) prefixes in user-configured paths are expanded to the home directory.
  • Paths are canonicalised when possible; if canonicalisation fails (e.g. the path does not yet exist on some platforms), the original path is kept unchanged.

Fields§

§extensions_dir: PathBuf

Directory where installed extensions are stored.

Can be overridden by the DSCODE_EXTENSIONS_DIR environment variable.

§storage_dir: PathBuf

Directory for persistent application storage (e.g. workspace state, user preferences).

§logs_dir: PathBuf

Directory where log files are written.

Implementations§

Source§

impl AppDirectories

Source

pub fn resolve() -> Result<Self, String>

Resolve directories from user configuration and environment overrides.

The method applies the priority chain (environment variable > user config > platform default) for each of the three directory paths, expands ~ prefixes, creates directories that do not yet exist, and canonicalises the resulting paths.

§Errors

Returns Err(String) if:

  • A ~ path cannot be expanded because the home directory is unavailable.
  • A directory cannot be created due to a filesystem permission error.
§Example
use dscode_core::AppDirectories;

let dirs = AppDirectories::resolve().expect("failed to resolve dirs");
println!("Extensions: {:?}", dirs.extensions_dir);

Trait Implementations§

Source§

impl Clone for AppDirectories

Source§

fn clone(&self) -> AppDirectories

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 AppDirectories

Source§

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

Formats the value using the given formatter. Read more

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<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> 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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