winure/path-convert/src/main.rs

49 lines
1 KiB
Rust
Raw Normal View History

2024-05-30 10:13:37 -04:00
use std::path::Path;
use pico_args::Arguments;
const DRIVE: &str = "/mnt/c/";
2024-06-05 09:57:29 -04:00
const QUOTED: [&str;2] = [ "-q", "--quotes" ];
pub fn main() {
let mut args = Arguments::from_env();
2024-06-05 09:57:29 -04:00
// handle quote flag
let quotes: &str =
if args.contains(QUOTED) {
if args.contains(QUOTED) { "\"" } // -qq -> "..." (output with double quotes)
else { "'" } // -q -> '...' (output with single quotes)
} else { "" }; // _ -> ... (output with no quotes)
loop {
let next = args.subcommand().unwrap();
2024-05-30 10:13:37 -04:00
if let Some(arg) = next {
let mut output: String;
2024-05-30 15:44:02 -04:00
// canonicalize; windows doesn't recognize symlinks
2024-05-30 10:13:37 -04:00
let path = Path::new(&arg).canonicalize();
if let Ok(target) = path {
output = target.to_string_lossy().to_string();
} else {
output = arg;
}
2024-05-30 10:13:37 -04:00
2024-05-30 15:44:02 -04:00
// simple C-drive substitution
2024-05-30 10:13:37 -04:00
if output.starts_with(DRIVE) {
output = output.replace(DRIVE, "C:\\");
}
2024-05-30 15:44:02 -04:00
// switch out separators
2024-05-30 10:13:37 -04:00
output = output.replace("/", "\\");
2024-05-30 15:44:02 -04:00
// emit to stdout
2024-06-05 09:57:29 -04:00
println!("{quotes}{output}{quotes}");
} else {
break;
}
}
}