sakurs_cli/input/
glob_resolver.rs

1//! File pattern resolution using glob
2
3use anyhow::{Context, Result};
4use glob::glob;
5use std::path::PathBuf;
6
7/// Resolve file patterns to actual file paths
8pub fn resolve_patterns(patterns: &[String]) -> Result<Vec<PathBuf>> {
9    let mut files = Vec::new();
10
11    for pattern in patterns {
12        let paths = glob(pattern).with_context(|| format!("Invalid glob pattern: {pattern}"))?;
13
14        for path_result in paths {
15            let path =
16                path_result.with_context(|| format!("Error resolving pattern: {pattern}"))?;
17
18            if path.is_file() {
19                files.push(path);
20            }
21        }
22    }
23
24    if files.is_empty() {
25        anyhow::bail!("No files found matching the provided patterns");
26    }
27
28    // Remove duplicates and sort
29    files.sort();
30    files.dedup();
31
32    Ok(files)
33}