use std::path::{Path, PathBuf};
fn expand_tilde(p: &Path) -> PathBuf {
if let Some(s) = p.to_str()
&& s.starts_with("~")
{
return PathBuf::from(shellexpand::tilde(s).into_owned());
}
p.to_path_buf()
}
pub fn resolve_relative(base_dir: &Path, maybe_path: &Option<PathBuf>) -> Option<PathBuf> {
maybe_path.as_ref().map(|p| {
let expanded = expand_tilde(p);
if expanded.is_absolute() {
expanded
} else {
base_dir.join(expanded)
}
})
}
pub fn to_absolute(dir: &Path) -> Option<PathBuf> {
let expanded = expand_tilde(dir);
if expanded.is_absolute() {
Some(expanded)
} else {
None
}
}