winbrew_engines\windows\exe/
validation.rs1use anyhow::{Result, bail};
2use std::path::Path;
3
4pub(super) fn validate_install_inputs(
5 download_path: &Path,
6 install_dir: &Path,
7 package_name: &str,
8) -> Result<()> {
9 validate_download_path(download_path)?;
10 validate_install_dir(install_dir)?;
11 validate_package_name(package_name)?;
12
13 Ok(())
14}
15
16pub(super) fn validate_download_path(path: &Path) -> Result<()> {
17 if path.as_os_str().is_empty() {
18 bail!("installer path cannot be empty");
19 }
20
21 if !path.exists() {
22 bail!("installer path does not exist: {}", path.display());
23 }
24
25 if !path.is_file() {
26 bail!("installer path is not a file: {}", path.display());
27 }
28
29 Ok(())
30}
31
32pub(super) fn validate_install_dir(path: &Path) -> Result<()> {
33 let path_text = path.to_string_lossy();
34
35 if path.as_os_str().is_empty() || path_text.trim().is_empty() {
36 bail!("install directory cannot be empty");
37 }
38
39 Ok(())
40}
41
42pub(super) fn validate_package_name(package_name: &str) -> Result<()> {
43 let package_name = package_name.trim();
44
45 if package_name.is_empty() {
46 bail!("package name cannot be empty");
47 }
48
49 if package_name.chars().any(|ch| ch.is_control()) {
50 bail!("package name contains invalid control characters");
51 }
52
53 Ok(())
54}