Permalink
Browse files

Rename data_dir to data_local_dir and data_roaming_dir to data_dir, ...

... remove executable_dir on macOS.
  • Loading branch information...
soc committed Feb 28, 2018
1 parent 93d5e32 commit 4c4b4106186f25d4a39f940fcbc1def118bcfb36
Showing with 126 additions and 127 deletions.
  1. +1 −1 Cargo.toml
  2. +6 −6 README.md
  3. +15 −15 src/lib.rs
  4. +37 −37 src/lin.rs
  5. +27 −28 src/mac.rs
  6. +40 −40 src/win.rs
View
@@ -1,6 +1,6 @@
[package]
name = "directories"
version = "0.3.2"
version = "0.4.0"
authors = [ "Simon Ochsenreither <simon@ochsenreither.de>" ]
description = "A tiny library that provides platform-specific locations of config, cache, ... directories on Linux, Windows and macOS by leveraging the mechanisms defined by the XDG base directory and the XDG user directory specifications on Linux, the Known Folder system on Windows, and the Standard Directory rules on macOS."
readme = "README.md"
View
@@ -23,7 +23,7 @@ The library provides the location of these directories by leveraging the mechani
Add the library as a dependency to your project by inserting
```toml
directories = "0.3.2"
directories = "0.4.0"
```
into the `[dependencies]` section of your Cargo.toml file.
@@ -54,9 +54,9 @@ If you want to compute the location of cache, config or data directories for you
| `home_dir` | `$HOME` | `{FOLDERID_Profile}` | `$HOME` |
| `cache_dir` | `$XDG_CACHE_HOME` or `~/.cache/` | `{FOLDERID_LocalAppData}/cache/` | `$HOME/Library/Caches/` |
| `config_dir` | `$XDG_CONFIG_HOME` or `~/.config/` | `{FOLDERID_RoamingAppData}` | `$HOME/Library/Preferences/` |
| `data_dir` | `$XDG_DATA_HOME` or `~/.local/share/` | `{FOLDERID_LocalAppData}` | `$HOME/Library/Application Support/` |
| `data_roaming_dir` | `$XDG_DATA_HOME` or `~/.local/share/` | `{FOLDERID_RoamingAppData}` | `$HOME/Library/Application Support/` |
| `executable_dir` | `Some($XDG_BIN_HOME/../bin/)` or `Some($XDG_DATA_HOME/../bin/)` or `Some($HOME/.local/bin/)` | `None` | `Some($HOME/Applications/)` |
| `data_dir` | `$XDG_DATA_HOME` or `~/.local/share/` | `{FOLDERID_RoamingAppData}` | `$HOME/Library/Application Support/` |
| `data_local_dir` | `$XDG_DATA_HOME` or `~/.local/share/` | `{FOLDERID_LocalAppData}` | `$HOME/Library/Application Support/` |
| `executable_dir` | `Some($XDG_BIN_HOME/../bin/)` or `Some($XDG_DATA_HOME/../bin/)` or `Some($HOME/.local/bin/)` | `None` | `None` |
| `runtime_dir` | `Some($XDG_RUNTIME_DIR)` | `None` | `None` |
| `audio_dir` | `XDG_MUSIC_DIR` | `{FOLDERID_Music}` | `$HOME/Music/` |
| `desktop_dir` | `XDG_DESKTOP_DIR` | `{FOLDERID_Desktop}` | `$HOME/Desktop/` |
@@ -77,8 +77,8 @@ which are derived from the standard directories.
| -------------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------ |
| `project_cache_dir` | `$XDG_CACHE_HOME/_yourprojectname_` or `$HOME/.cache/_yourprojectname_/` | `{FOLDERID_LocalAppData}/_yourprojectname_/cache/` | `$HOME/Library/Caches/_yourprojectname_/` |
| `project_config_dir` | `$XDG_CONFIG_HOME/_yourprojectname_` or `$HOME/.config/_yourprojectname_/` | `{FOLDERID_RoamingAppData}/_yourprojectname_/` | `$HOME/Library/Preferences/_yourprojectname_/` |
| `project_data_dir` | `$XDG_DATA_HOME/_yourprojectname_` or `$HOME/.local/share/_yourprojectname_/` | `{FOLDERID_LocalAppData}/_yourprojectname_/` | `$HOME/Library/Application Support/_yourprojectname_/` |
| `project_data_roaming_dir` | `$XDG_DATA_HOME/_yourprojectname_` or `$HOME/.local/share/_yourprojectname_/` | `{FOLDERID_RoamingAppData}/_yourprojectname_/` | `$HOME/Library/Application Support/_yourprojectname_/` |
| `project_data_dir` | `$XDG_DATA_HOME/_yourprojectname_` or `$HOME/.local/share/_yourprojectname_/` | `{FOLDERID_RoamingAppData}/_yourprojectname_/` | `$HOME/Library/Application Support/_yourprojectname_/` |
| `project_data_local_dir` | `$XDG_DATA_HOME/_yourprojectname_` or `$HOME/.local/share/_yourprojectname_/` | `{FOLDERID_LocalAppData}/_yourprojectname_/` | `$HOME/Library/Application Support/_yourprojectname_/` |
| `project_runtime_dir` | `Some($XDG_RUNTIME_DIR/_yourprojectname_)` or `Some($HOME/.local/share/_yourprojectname_/)` | `None` | `None` |
The specific value of `_yourprojectname_` depends on the function used to create the `ProjectDirectories` struct:
View
@@ -18,7 +18,7 @@ pub struct BaseDirectories {
cache_dir: PathBuf,
config_dir: PathBuf,
data_dir: PathBuf,
data_roaming_dir: PathBuf,
data_local_dir: PathBuf,
executable_dir: Option<PathBuf>,
runtime_dir: Option<PathBuf>,
@@ -39,11 +39,11 @@ pub struct ProjectDirectories {
project_name: String,
// base directories
project_cache_dir: PathBuf,
project_config_dir: PathBuf,
project_data_dir: PathBuf,
project_data_roaming_dir: PathBuf,
project_runtime_dir: Option<PathBuf>,
project_cache_dir: PathBuf,
project_config_dir: PathBuf,
project_data_dir: PathBuf,
project_data_local_dir: PathBuf,
project_runtime_dir: Option<PathBuf>
}
#[deny(missing_docs)]
@@ -84,26 +84,26 @@ impl BaseDirectories {
/// | ------- | ------------------------------------- | --------------------------------------- |
/// | Linux | `$XDG_DATA_HOME` or `~/.local/share/` | /home/eve/.local/share/ |
/// | macOS | `$HOME/Library/Application Support/` | /Users/eve/Library/Application Support/ |
/// | Windows | `{FOLDERID_LocalAppData}` | C:\Users\Eve\AppData\Local\ |
pub fn data_dir(&self) -> &Path {
/// | Windows | `{FOLDERID_RoamingAppData}` | C:\Users\Eve\AppData\Roaming\ |
pub fn data_roaming_dir(&self) -> &Path {
self.data_dir.as_path()
}
/// Returns the path to the user's roaming data directory.
/// Returns the path to the user's local data directory.
///
/// |Platform | Value | Example |
/// | ------- | ------------------------------------- | --------------------------------------- |
/// | Linux | `$XDG_DATA_HOME` or `~/.local/share/` | /home/eve/.local/share/ |
/// | macOS | `$HOME/Library/Application Support/` | /Users/eve/Library/Application Support/ |
/// | Windows | `{FOLDERID_RoamingAppData}` | C:\Users\Eve\AppData\Roaming\ |
pub fn data_roaming_dir(&self) -> &Path {
self.data_roaming_dir.as_path()
/// | Windows | `{FOLDERID_LocalAppData}` | C:\Users\Eve\AppData\Local\ |
pub fn data_dir(&self) -> &Path {
self.data_local_dir.as_path()
}
/// Returns the path to the user's executable directory.
///
/// |Platform | Value | Example |
/// | ------- | -------------------------------------------------------------- | ------------------------ |
/// | Linux | `$XDG_BIN_HOME/` or `$XDG_DATA_HOME/../bin/` or `~/.local/bin` | /home/eve/.local/bin/ |
/// | macOS | `$HOME/Applications/` | /Users/eve/Applications/ |
/// | macOS | | – |
/// | Windows | – | – |
pub fn executable_dir(&self) -> Option<&Path> {
self.executable_dir.as_ref().map(|p| p.as_path())
@@ -224,8 +224,8 @@ impl ProjectDirectories {
pub fn project_data_dir(&self) -> &Path {
self.project_data_dir.as_path()
}
pub fn project_data_roaming_dir(&self) -> &Path {
self.project_data_roaming_dir.as_path()
pub fn project_data_local_dir(&self) -> &Path {
self.project_data_local_dir.as_path()
}
pub fn project_runtime_dir(&self) -> Option<&Path> {
self.project_runtime_dir.as_ref().map(|p| p.as_path())
View
@@ -7,55 +7,55 @@ use ProjectDirectories;
use strip_qualification;
pub fn base_directories() -> BaseDirectories {
let home_dir = env::home_dir().unwrap();
let cache_dir = env::var("XDG_CACHE_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".cache"));
let config_dir = env::var("XDG_CONFIG_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".config"));
let data_dir = env::var("XDG_DATA_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".local/share"));
let data_roaming_dir = data_dir.clone();
let runtime_dir = env::var("XDG_RUNTIME_DIR").ok().and_then(is_absolute_path);
let executable_dir =
let home_dir = env::home_dir().unwrap();
let cache_dir = env::var("XDG_CACHE_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".cache"));
let config_dir = env::var("XDG_CONFIG_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".config"));
let data_dir = env::var("XDG_DATA_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".local/share"));
let data_local_dir = data_dir.clone();
let runtime_dir = env::var("XDG_RUNTIME_DIR").ok().and_then(is_absolute_path);
let executable_dir =
env::var("XDG_BIN_HOME").ok().and_then(is_absolute_path).unwrap_or({
let mut new_dir = data_dir.clone(); new_dir.pop(); new_dir.push("bin"); new_dir });
let font_dir = data_dir.join("fonts");
let font_dir = data_dir.join("fonts");
BaseDirectories {
home_dir: home_dir,
cache_dir: cache_dir,
config_dir: config_dir,
data_dir: data_dir,
data_roaming_dir: data_roaming_dir,
executable_dir: Some(executable_dir),
runtime_dir: runtime_dir,
audio_dir: run_xdg_user_dir_command("MUSIC"),
desktop_dir: run_xdg_user_dir_command("DESKTOP"),
document_dir: run_xdg_user_dir_command("DOCUMENTS"),
download_dir: run_xdg_user_dir_command("DOWNLOAD"),
font_dir: Some(font_dir),
picture_dir: run_xdg_user_dir_command("PICTURES"),
public_dir: run_xdg_user_dir_command("PUBLICSHARE"),
template_dir: Some(run_xdg_user_dir_command("TEMPLATES")),
video_dir: run_xdg_user_dir_command("VIDEOS")
home_dir: home_dir,
cache_dir: cache_dir,
config_dir: config_dir,
data_dir: data_dir,
data_local_dir: data_local_dir,
executable_dir: Some(executable_dir),
runtime_dir: runtime_dir,
audio_dir: run_xdg_user_dir_command("MUSIC"),
desktop_dir: run_xdg_user_dir_command("DESKTOP"),
document_dir: run_xdg_user_dir_command("DOCUMENTS"),
download_dir: run_xdg_user_dir_command("DOWNLOAD"),
font_dir: Some(font_dir),
picture_dir: run_xdg_user_dir_command("PICTURES"),
public_dir: run_xdg_user_dir_command("PUBLICSHARE"),
template_dir: Some(run_xdg_user_dir_command("TEMPLATES")),
video_dir: run_xdg_user_dir_command("VIDEOS")
}
}
impl ProjectDirectories {
pub fn from_unprocessed_string(value: &str) -> ProjectDirectories {
let project_name = String::from(value);
let home_dir = env::home_dir().unwrap();
let project_cache_dir = env::var("XDG_CACHE_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".cache")).join(&value);
let project_config_dir = env::var("XDG_CONFIG_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".config")).join(&value);
let project_data_dir = env::var("XDG_DATA_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".local/share")).join(&value);
let project_roaming_data_dir = project_data_dir.clone();
let project_runtime_dir = env::var("XDG_RUNTIME_DIR").ok().and_then(is_absolute_path).unwrap().join(&value);
let home_dir = env::home_dir().unwrap();
let project_cache_dir = env::var("XDG_CACHE_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".cache")).join(&value);
let project_config_dir = env::var("XDG_CONFIG_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".config")).join(&value);
let project_data_dir = env::var("XDG_DATA_HOME").ok().and_then(is_absolute_path).unwrap_or(home_dir.join(".local/share")).join(&value);
let project_data_local_dir = project_data_dir.clone();
let project_runtime_dir = env::var("XDG_RUNTIME_DIR").ok().and_then(is_absolute_path).unwrap().join(&value);
ProjectDirectories {
project_name: project_name,
project_cache_dir: project_cache_dir,
project_config_dir: project_config_dir,
project_data_dir: project_data_dir,
project_data_roaming_dir: project_roaming_data_dir,
project_runtime_dir: Some(project_runtime_dir)
project_name: project_name,
project_cache_dir: project_cache_dir,
project_config_dir: project_config_dir,
project_data_dir: project_data_dir,
project_data_local_dir: project_data_local_dir,
project_runtime_dir: Some(project_runtime_dir)
}
}
View
@@ -5,28 +5,27 @@ use ProjectDirectories;
#[cfg(target_os = "macos")]
pub fn base_directories() -> BaseDirectories {
let home_dir = env::home_dir().unwrap();
let cache_dir = home_dir.join("Library/Caches");
let config_dir = home_dir.join("Library/Preferences");
let data_dir = home_dir.join("Library/Application Support");
let data_roaming_dir = data_dir.clone();
let audio_dir = home_dir.join("Music");
let desktop_dir = home_dir.join("Desktop");
let document_dir = home_dir.join("Documents");
let download_dir = home_dir.join("Downloads");
let picture_dir = home_dir.join("Pictures");
let public_dir = home_dir.join("Public");
let video_dir = home_dir.join("Movies");
let executable_dir = home_dir.join("Applications");
let font_dir = home_dir.join("Library/Fonts");
let home_dir = env::home_dir().unwrap();
let cache_dir = home_dir.join("Library/Caches");
let config_dir = home_dir.join("Library/Preferences");
let data_dir = home_dir.join("Library/Application Support");
let data_local_dir = data_dir.clone();
let audio_dir = home_dir.join("Music");
let desktop_dir = home_dir.join("Desktop");
let document_dir = home_dir.join("Documents");
let download_dir = home_dir.join("Downloads");
let picture_dir = home_dir.join("Pictures");
let public_dir = home_dir.join("Public");
let video_dir = home_dir.join("Movies");
let font_dir = home_dir.join("Library/Fonts");
BaseDirectories {
home_dir: home_dir,
cache_dir: cache_dir,
config_dir: config_dir,
data_dir: data_dir,
data_roaming_dir: data_roaming_dir,
executable_dir: Some(executable_dir),
data_local_dir: data_local_dir,
executable_dir: None,
runtime_dir: None,
audio_dir: audio_dir,
@@ -43,20 +42,20 @@ pub fn base_directories() -> BaseDirectories {
impl ProjectDirectories {
pub fn from_unprocessed_string(value: &str) -> ProjectDirectories {
let project_name = String::from(value);
let home_dir = env::home_dir().unwrap();
let project_cache_dir = home_dir.join("Library/Caches").join(&value);
let project_config_dir = home_dir.join("Library/Preferences").join(&value);
let project_data_dir = home_dir.join("Library/Application Support").join(&value);
let project_roaming_data_dir = project_data_dir.clone();
let project_name = String::from(value);
let home_dir = env::home_dir().unwrap();
let project_cache_dir = home_dir.join("Library/Caches").join(&value);
let project_config_dir = home_dir.join("Library/Preferences").join(&value);
let project_data_dir = home_dir.join("Library/Application Support").join(&value);
let project_data_local_dir = project_data_dir.clone();
ProjectDirectories {
project_name: project_name,
project_cache_dir: project_cache_dir,
project_config_dir: project_config_dir,
project_data_dir: project_data_dir,
project_data_roaming_dir: project_roaming_data_dir,
project_runtime_dir: None,
project_name: project_name,
project_cache_dir: project_cache_dir,
project_config_dir: project_config_dir,
project_data_dir: project_data_dir,
project_data_local_dir: project_data_local_dir,
project_runtime_dir: None,
}
}
Oops, something went wrong.

0 comments on commit 4c4b410

Please sign in to comment.