enhanced_magic_string/utils/
common.rs1use std::path::{Component, Path, PathBuf};
2
3pub fn get_relative_path(from: &str, to: &str) -> Option<String> {
4 let from_path = Path::new(from);
5 let to_path = Path::new(to);
6
7 let mut from_iter: Vec<Component> = from_path.components().collect();
8 let mut to_iter: Vec<Component> = to_path.components().collect();
9
10 from_iter.pop();
11
12 while from_iter.len() != 0 && from_iter.first() == to_iter.first() {
13 from_iter.remove(0);
14 to_iter.remove(0);
15 }
16
17 let mut result = PathBuf::new();
18
19 for _ in from_iter {
20 result.push("..");
21 }
22
23 for path in to_iter {
24 result.push(path.as_os_str());
25 }
26
27 Some(result.to_string_lossy().to_string())
28}