enhanced_magic_string/utils/
common.rs

1use 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}