dir_spec 0.5.2

A cross-platform Rust library for resolving XDG and platform-specific directories with proper fallbacks.
Documentation
use std::{env, path::PathBuf};

pub const BIN_HOME: &str = "XDG_BIN_HOME";
pub const CACHE_HOME: &str = "XDG_CACHE_HOME";
pub const CONFIG_HOME: &str = "XDG_CONFIG_HOME";
pub const DATA_HOME: &str = "XDG_DATA_HOME";
pub const DESKTOP_DIR: &str = "XDG_DESKTOP_DIR";
pub const DOCUMENTS_DIR: &str = "XDG_DOCUMENTS_DIR";
pub const DOWNLOAD_DIR: &str = "XDG_DOWNLOAD_DIR";
pub const MUSIC_DIR: &str = "XDG_MUSIC_DIR";
pub const PICTURES_DIR: &str = "XDG_PICTURES_DIR";
pub const PUBLICSHARE_DIR: &str = "XDG_PUBLICSHARE_DIR";
pub const RUNTIME_DIR: &str = "XDG_RUNTIME_DIR";
pub const STATE_HOME: &str = "XDG_STATE_HOME";
pub const TEMPLATES_DIR: &str = "XDG_TEMPLATES_DIR";
pub const VIDEOS_DIR: &str = "XDG_VIDEOS_DIR";

pub fn resolve_path(key: &str) -> Option<PathBuf> {
  env::var_os(key).map(PathBuf::from).filter(|p| p.is_absolute())
}

pub fn resolve_path_with_fallback(key: &str, default: &str) -> Option<PathBuf> {
  resolve_path(key).or_else(|| env::home_dir().map(|p| p.join(default)))
}