[][src]Struct xdg::BaseDirectories

pub struct BaseDirectories { /* fields omitted */ }

BaseDirectories allows to look up paths to configuration, data, cache and runtime files in well-known locations according to the [X Desktop Group Base Directory specification][xdg-basedir]. [xdg-basedir]: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

The Base Directory specification defines four kinds of files:

Examples

To configure paths for application myapp:

extern crate xdg;
let xdg_dirs = xdg::BaseDirectories::with_prefix("myapp").unwrap();

To store configuration:

let config_path = xdg_dirs.place_config_file("config.ini")
                          .expect("cannot create configuration directory");
let mut config_file = try!(File::create(config_path));
try!(write!(&mut config_file, "configured = 1"));

The config.ini file will appear in the proper location for desktop configuration files, most likely ~/.config/myapp/config.ini. The leading directories will be automatically created.

To retrieve supplementary data:

let logo_path = xdg_dirs.find_data_file("logo.png")
                        .expect("application data not present");
let mut logo_file = try!(File::open(logo_path));
let mut logo = Vec::new();
try!(logo_file.read_to_end(&mut logo));

The logo.png will be searched in the proper locations for supplementary data files, most likely ~/.local/share/myapp/logo.png, then /usr/local/share/myapp/logo.png and /usr/share/myapp/logo.png.

Methods

impl BaseDirectories[src]

pub fn new() -> Result<BaseDirectories, BaseDirectoriesError>[src]

Reads the process environment, determines the XDG base directories, and returns a value that can be used for lookup. The following environment variables are examined:

  • HOME; if not set: use the same fallback as std::env::home_dir(); if still not available: return an error.
  • XDG_DATA_HOME; if not set: assumed to be $HOME/.local/share.
  • XDG_CONFIG_HOME; if not set: assumed to be $HOME/.config.
  • XDG_CACHE_HOME; if not set: assumed to be $HOME/.cache.
  • XDG_DATA_DIRS; if not set: assumed to be /usr/local/share:/usr/share.
  • XDG_CONFIG_DIRS; if not set: assumed to be /etc/xdg.
  • XDG_RUNTIME_DIR; if not accessible or permissions are not 0700: record as inaccessible (can be queried with has_runtime_directory).

As per specification, if an environment variable contains a relative path, the behavior is the same as if it was not set.

pub fn with_prefix<P>(
    prefix: P
) -> Result<BaseDirectories, BaseDirectoriesError> where
    P: AsRef<Path>, 
[src]

Same as new(), but prefix is implicitly prepended to every path that is looked up.

pub fn with_profile<P1, P2>(
    prefix: P1,
    profile: P2
) -> Result<BaseDirectories, BaseDirectoriesError> where
    P1: AsRef<Path>,
    P2: AsRef<Path>, 
[src]

Same as with_prefix(), with profile also implicitly prepended to every path that is looked up, but only for user-specific directories.

This allows each user to have mutliple "profiles" with different user-specific data.

For example:

let dirs = BaseDirectories::with_profile("program-name", "profile-name")
                           .unwrap();
dirs.find_data_file("bar.jpg");
dirs.find_config_file("foo.conf");

will find /usr/share/program-name/bar.jpg (without profile-name) and ~/.config/program-name/profile-name/foo.conf.

pub fn has_runtime_directory(&self) -> bool[src]

Returns true if XDG_RUNTIME_DIR is available, false otherwise.

pub fn place_config_file<P>(&self, path: P) -> Result<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, returns an absolute path in XDG_CONFIG_HOME where a configuration file may be stored. Leading directories in the returned path are pre-created; if that is not possible, an error is returned.

pub fn place_data_file<P>(&self, path: P) -> Result<PathBuf> where
    P: AsRef<Path>, 
[src]

Like place_config_file(), but for a data file in XDG_DATA_HOME.

pub fn place_cache_file<P>(&self, path: P) -> Result<PathBuf> where
    P: AsRef<Path>, 
[src]

Like place_config_file(), but for a cache file in XDG_CACHE_HOME.

pub fn place_runtime_file<P>(&self, path: P) -> Result<PathBuf> where
    P: AsRef<Path>, 
[src]

Like place_config_file(), but for a runtime file in XDG_RUNTIME_DIR. If XDG_RUNTIME_DIR is not available, returns an error.

pub fn find_config_file<P>(&self, path: P) -> Option<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, returns an absolute path to an existing configuration file, or None. Searches XDG_CONFIG_HOME and then XDG_CONFIG_DIRS.

Important traits for FileFindIterator
pub fn find_config_files<P>(&self, path: P) -> FileFindIterator where
    P: AsRef<Path>, 
[src]

Given a relative path path, returns an iterator yielding absolute paths to existing configuration files, in XDG_CONFIG_DIRS and XDG_CONFIG_HOME. Paths are produced in order from lowest priority to highest.

pub fn find_data_file<P>(&self, path: P) -> Option<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, returns an absolute path to an existing data file, or None. Searches XDG_DATA_HOME and then XDG_DATA_DIRS.

Important traits for FileFindIterator
pub fn find_data_files<P>(&self, path: P) -> FileFindIterator where
    P: AsRef<Path>, 
[src]

Given a relative path path, returns an iterator yielding absolute paths to existing data files, in XDG_DATA_DIRS and XDG_DATA_HOME. Paths are produced in order from lowest priority to highest.

pub fn find_cache_file<P>(&self, path: P) -> Option<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, returns an absolute path to an existing cache file, or None. Searches XDG_CACHE_HOME.

pub fn find_runtime_file<P>(&self, path: P) -> Option<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, returns an absolute path to an existing runtime file, or None. Searches XDG_RUNTIME_DIR. If XDG_RUNTIME_DIR is not available, returns None.

pub fn create_config_directory<P>(&self, path: P) -> Result<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, returns an absolute path to a configuration directory in XDG_CONFIG_HOME. The directory and all directories leading to it are created if they did not exist; if that is not possible, an error is returned.

pub fn create_data_directory<P>(&self, path: P) -> Result<PathBuf> where
    P: AsRef<Path>, 
[src]

Like create_config_directory(), but for a data directory in XDG_DATA_HOME.

pub fn create_cache_directory<P>(&self, path: P) -> Result<PathBuf> where
    P: AsRef<Path>, 
[src]

Like create_config_directory(), but for a cache directory in XDG_CACHE_HOME.

pub fn create_runtime_directory<P>(&self, path: P) -> Result<PathBuf> where
    P: AsRef<Path>, 
[src]

Like create_config_directory(), but for a runtime directory in XDG_RUNTIME_DIR. If XDG_RUNTIME_DIR is not available, returns an error.

pub fn list_config_files<P>(&self, path: P) -> Vec<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, list absolute paths to all files in directories with path path in XDG_CONFIG_HOME and XDG_CONFIG_DIRS.

pub fn list_config_files_once<P>(&self, path: P) -> Vec<PathBuf> where
    P: AsRef<Path>, 
[src]

Like list_config_files, but only the first occurence of every distinct filename is returned.

pub fn list_data_files<P>(&self, path: P) -> Vec<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, lists absolute paths to all files in directories with path path in XDG_DATA_HOME and XDG_DATA_DIRS.

pub fn list_data_files_once<P>(&self, path: P) -> Vec<PathBuf> where
    P: AsRef<Path>, 
[src]

Like list_data_files, but only the first occurence of every distinct filename is returned.

pub fn list_cache_files<P>(&self, path: P) -> Vec<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, lists absolute paths to all files in directories with path path in XDG_CACHE_HOME.

pub fn list_runtime_files<P>(&self, path: P) -> Vec<PathBuf> where
    P: AsRef<Path>, 
[src]

Given a relative path path, lists absolute paths to all files in directories with path path in XDG_RUNTIME_DIR. If XDG_RUNTIME_DIR is not available, returns an empty Vec.

pub fn get_data_home(&self) -> PathBuf[src]

Returns the user-specific data directory (set by XDG_DATA_HOME).

pub fn get_config_home(&self) -> PathBuf[src]

Returns the user-specific configuration directory (set by XDG_CONFIG_HOME).

pub fn get_cache_home(&self) -> PathBuf[src]

Returns the user-specific directory for non-essential (cached) data (set by XDG_CACHE_HOME).

pub fn get_data_dirs(&self) -> Vec<PathBuf>[src]

Returns a preference ordered (preferred to less preferred) list of supplementary data directories, ordered by preference (set by XDG_DATA_DIRS).

pub fn get_config_dirs(&self) -> Vec<PathBuf>[src]

Returns a preference ordered (preferred to less preferred) list of supplementary configuration directories (set by XDG_CONFIG_DIRS).

Trait Implementations

impl Clone for BaseDirectories[src]

impl Debug for BaseDirectories[src]

Auto Trait Implementations

impl Send for BaseDirectories

impl Unpin for BaseDirectories

impl Sync for BaseDirectories

impl UnwindSafe for BaseDirectories

impl RefUnwindSafe for BaseDirectories

Blanket Implementations

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]