[go: up one dir, main page]

directories 0.0.3

A minimal library that provides the platform-specific location of configuration, cache etc. directories by leveraging the mechanisms defined by the XDG base directory and the XDG user directory specifications on Linux, the Known Folder API on Windows, and the Standard Directory rules on macOS.
Documentation
use std::env;

use BaseDirectories;

#[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 desktop_dir      = home_dir.join("Desktop");
    let documents_dir    = home_dir.join("Documents");
    let download_dir     = home_dir.join("Downloads");
    let music_dir        = home_dir.join("Music");
    let pictures_dir     = home_dir.join("Pictures");
    let public_dir       = home_dir.join("Public");
    let videos_dir       = home_dir.join("Movies");
    let executables_dir  = home_dir.join("Applications/");
    let fonts_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,
        runtime_dir:      None,
        desktop_dir:      desktop_dir,
        documents_dir:    documents_dir,
        download_dir:     download_dir,
        music_dir:        music_dir,
        pictures_dir:     pictures_dir,
        public_dir:       public_dir,
        templates_dir:    None,
        videos_dir:       videos_dir,
        executables_dir:  Some(executables_dir),
        fonts_dir:        Some(fonts_dir)
    }
}

impl ProjectDirectories {
    pub fn from_unprocessed_string(value: String) -> ProjectDirectories {
        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();

        ProjectDirectories {
            project_name:             value,
            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,
        }
    }

    pub fn from_project_name(project_name: &str) -> ProjectDirectories {
        from_unprocessed_string(name)
    }

    pub fn from_qualified_project_name(qualified_project_name: &str) -> ProjectDirectories {
        from_unprocessed_string(name)
    }
}