use std::io;
use thiserror::Error;
use walkdir;
#[derive(Error, Debug)]
pub enum GlobError {
#[error("IO error: {0}")]
Io(#[from] io::Error),
#[error("Regex error: {0}")]
Regex(#[from] regex::Error),
#[error("Invalid pattern: {0}")]
InvalidPattern(String),
#[error("Walkdir error: {0}")]
Walkdir(#[from] walkdir::Error),
#[error("Other error: {0}")]
Other(String),
#[error("Brace expansion exceeded maximum depth")]
BraceExpansionDepth,
#[error("Brace expansion exceeded maximum expansions")]
BraceExpansionCount,
#[error("Regex pattern too complex or long")]
RegexTooComplex,
#[error("Path traversal not allowed")]
PathTraversal,
#[error("Symlink cycle detected")]
SymlinkCycle,
#[error("Operation timed out")]
Timeout,
#[error("Permission denied")]
PermissionDenied,
}