wick_asset_reference/
utils.rs

1use std::path::PathBuf;
2
3use normpath::PathExt;
4
5use crate::Error;
6
7type Result<T> = std::result::Result<T, Error>;
8
9#[allow(clippy::option_if_let_else)]
10pub fn normalize_path(path: &std::path::Path, base: Option<PathBuf>) -> Result<PathBuf> {
11  let url = match base {
12    Some(full_url) => {
13      let p = PathBuf::from(&full_url).join(path);
14      p.normalize()
15        .map_err(|e| Error::NormalizationFailure(p.to_string_lossy().to_string(), e.to_string()))?
16        .as_path()
17        .to_owned()
18    }
19    None => {
20      if !path.is_absolute() {
21        std::env::current_dir().unwrap().join(path)
22      } else {
23        PathBuf::from(path)
24      }
25    }
26  };
27  Ok(url)
28}