i6_pack/
utils.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use std::io;
use std::path::{Path, PathBuf};

pub fn remove_extension(filename: &str, extension: &str) -> String {
  filename.strip_suffix(extension).unwrap_or(filename).to_owned()
}

pub fn validate_path(path: &str) -> io::Result<PathBuf> {
  let path = Path::new(path);
  if path.exists() {
    Ok(path.to_path_buf())
  } else {
    Err(io::Error::new(io::ErrorKind::NotFound, "Path does not exist"))
  }
}

pub fn sanitize_output_path(output_path: &str) -> io::Result<PathBuf> {
  let path = Path::new(output_path);
  if path.is_absolute()
    && !path
      .components()
      .any(|comp| matches!(comp, std::path::Component::ParentDir))
  {
    Ok(path.to_path_buf())
  } else {
    Err(io::Error::new(io::ErrorKind::InvalidInput, "Invalid output path"))
  }
}