1use std::path::{Path, PathBuf};
2
3use crate::error::Result;
4use anyhow::anyhow;
5
6pub fn normalize_path<P: AsRef<Path>>(path: P) -> Result<PathBuf> {
7 Ok(PathBuf::from(normalize_path_string(&path_to_string(
8 path.as_ref(),
9 )?)))
10}
11
12pub fn normalize_path_string(path_str: &str) -> String {
13 normalize_slashes(path_str)
14}
15
16fn normalize_slashes(path_string: &str) -> String {
17 #[cfg(unix)]
18 return path_string.replace('\\', "/");
19 #[cfg(windows)]
20 path_string.replace('/', "\\")
21}
22
23pub fn path_to_string<P: AsRef<Path>>(path: P) -> Result<String> {
24 let path_ref = path.as_ref();
25 path_ref
26 .to_str()
27 .map(str::to_owned)
28 .ok_or_else(|| anyhow!("error while converting path {}", path_ref.display()))
29}