absolutize path common functions

This commit is contained in:
veeso
2021-08-24 09:29:40 +02:00
parent 91ce709d7b
commit 78b918087e

43
src/utils/path.rs Normal file
View File

@@ -0,0 +1,43 @@
//! # Path
//!
//! Path related utilities
use std::path::{Path, PathBuf};
/// ### absolutize
///
/// Absolutize target path if relative.
/// For example:
///
/// ```rust
/// assert_eq!(absolutize(&Path::new("/home/omar"), &Path::new("readme.txt")).as_path(), Path::new("/home/omar/readme.txt"));
/// assert_eq!(absolutize(&Path::new("/home/omar"), &Path::new("/tmp/readme.txt")).as_path(), Path::new("/tmp/readme.txt"));
/// ```
pub fn absolutize(wrkdir: &Path, target: &Path) -> PathBuf {
match target.is_absolute() {
true => target.to_path_buf(),
false => {
let mut p: PathBuf = wrkdir.to_path_buf();
p.push(target);
p
}
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn absolutize_path() {
assert_eq!(
absolutize(&Path::new("/home/omar"), &Path::new("readme.txt")).as_path(),
Path::new("/home/omar/readme.txt")
);
assert_eq!(
absolutize(&Path::new("/home/omar"), &Path::new("/tmp/readme.txt")).as_path(),
Path::new("/tmp/readme.txt")
);
}
}