roan_engine/
path.rs

1use anyhow::Result;
2use std::path::PathBuf;
3
4fn remove_prefix(path: &PathBuf) -> PathBuf {
5    let path_str = path.to_str().unwrap_or("");
6    let normalized_str = if path_str.starts_with(r"\\?\") {
7        &path_str[4..] // Strip the \\?\ prefix
8    } else {
9        path_str
10    };
11    PathBuf::from(normalized_str)
12}
13
14pub fn normalize_path(mut path: PathBuf, root: PathBuf) -> Result<PathBuf> {
15    if path.is_relative() {
16        path = root.join(path);
17    }
18    path = path.canonicalize()?;
19    Ok(remove_prefix(&path))
20}
21
22pub fn canonicalize_path(path: PathBuf) -> Result<PathBuf> {
23    let path = path.canonicalize()?;
24    Ok(remove_prefix(&path))
25}
26
27pub fn normalize_without_canonicalize(mut path: PathBuf, root: PathBuf) -> PathBuf {
28    if path.is_relative() {
29        path = root.join(path);
30    }
31    path
32}