use glob::Pattern;
#[derive(Debug, Clone)]
pub(super) enum GlobPattern {
Any,
Glob(Pattern),
}
impl GlobPattern {
pub(super) fn compile(pattern: &str, kind: &str) -> Result<Self, String> {
if pattern == "*" {
return Ok(Self::Any);
}
Pattern::new(pattern)
.map(Self::Glob)
.map_err(|e| format!("invalid {kind} pattern '{pattern}': {e}"))
}
pub(super) fn matches(&self, value: &str) -> bool {
match self {
Self::Any => true,
Self::Glob(pattern) => pattern.matches(value),
}
}
}
pub(super) fn is_glob_pattern(value: &str) -> bool {
value.contains(['*', '?', '['])
}