feat untildify

This commit is contained in:
Sathish 2021-09-19 15:16:13 +05:30
parent 60a64b7bf4
commit 65fc61f7e4
3 changed files with 81 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/target
Cargo.lock
.DS_Store

18
Cargo.toml Normal file
View File

@ -0,0 +1,18 @@
[package]
name = "untildify"
version = "0.1.0"
edition = "2018"
license = "MIT"
readme = "README.md"
authors = ["sathishsoundharajan <sathishwelcomez@ymail.com>"]
categories = ["development-tools"]
homepage = "https://github.com/sathishsoundharajan/untildify"
repository = "https://github.com/sathishsoundharajan/untildify"
keywords = ["tilde", "untildify", "~", "utility"]
documentation = "https://docs.rs/untildify"
[badges.maintenance]
status = "actively-developed"
[dependencies]
regex = "1.5.4"

60
src/lib.rs Normal file
View File

@ -0,0 +1,60 @@
use regex::Regex;
use std::env;
use std::path::PathBuf;
pub fn untildify(input_path: &str) -> String {
if input_path.is_empty() {
return String::from(input_path);
}
return match get_host_dir() {
Some(path) => {
let host_dir = path.to_str().unwrap();
let re = Regex::new(r"^~([/\w]+)").unwrap();
match re.captures(input_path) {
Some(captures) => {
return format!("{}{}", host_dir, &captures[1]);
}
None => String::from(input_path),
}
}
None => String::from(input_path),
};
}
#[cfg(any(unix, target_os = "redox"))]
fn get_host_dir() -> Option<PathBuf> {
#[allow(deprecated)]
env::home_dir()
}
#[cfg(test)]
mod tests {
use crate::untildify;
use std::env;
use std::path::Path;
#[test]
fn test_returns_untildfyed_string() {
env::remove_var("HOME");
let home = Path::new("/User/Untildify");
env::set_var("HOME", home.as_os_str());
assert_eq!(untildify("~/Desktop"), "/User/Untildify/Desktop");
assert_eq!(untildify("~/a/b/c/d/e"), "/User/Untildify/a/b/c/d/e");
assert_eq!(untildify("~/"), "/User/Untildify/");
}
#[test]
fn test_returns_empty_string() {
env::remove_var("HOME");
let home = Path::new("/User/Untildify");
env::set_var("HOME", home.as_os_str());
assert_eq!(untildify("Desktop"), "Desktop");
assert_eq!(untildify(""), "");
assert_eq!(untildify("/"), "/");
assert_eq!(untildify("~/Desktop/~/Code"), "/User/Untildify/Desktop/");
}
}