use rclean::{PatternType, Glob, GlobSetBuilder, Regex};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("RDedupe Pattern Matching Examples\n");
let files = vec![
"src/main.rs".to_string(),
"src/lib.rs".to_string(),
"tests/test_utils.rs".to_string(),
"examples/basic.rs".to_string(),
"README.md".to_string(),
"Cargo.toml".to_string(),
"build.rs".to_string(),
".gitignore".to_string(),
"docs/guide.md".to_string(),
];
println!("Example 1: Literal pattern matching");
let literal_pattern = PatternType::Literal("src".to_string());
let matches = rclean::find_advanced(&files, &literal_pattern);
println!("Files containing 'src': {:?}", matches);
println!("\nExample 2: Glob pattern matching");
let mut builder = GlobSetBuilder::new();
builder.add(Glob::new("*.rs")?);
builder.add(Glob::new("**/*.md")?);
let globset = builder.build()?;
let glob_pattern = PatternType::Glob(globset);
let matches = rclean::find_advanced(&files, &glob_pattern);
println!("Files matching '*.rs' or '**/*.md': {:?}", matches);
println!("\nExample 3: Regex pattern matching");
let regex = Regex::new(r"^(src|tests)/.*\.rs$")?;
let regex_pattern = PatternType::Regex(regex);
let matches = rclean::find_advanced(&files, ®ex_pattern);
println!("Files matching regex '^(src|tests)/.*\\.rs$': {:?}", matches);
println!("\nExample 4: Complex glob patterns");
let mut builder = GlobSetBuilder::new();
builder.add(Glob::new("**/test*.rs")?);
builder.add(Glob::new("!.gitignore")?); let globset = builder.build()?;
let pattern = PatternType::Glob(globset);
let matches = rclean::find_advanced(&files, &pattern);
println!("Files matching '**/test*.rs': {:?}", matches);
println!("\nExample 5: Case sensitivity in patterns");
let pattern1 = PatternType::Literal("README".to_string());
let pattern2 = PatternType::Literal("readme".to_string());
let matches1 = rclean::find_advanced(&files, &pattern1);
let matches2 = rclean::find_advanced(&files, &pattern2);
println!("Files containing 'README': {:?}", matches1);
println!("Files containing 'readme': {:?}", matches2);
Ok(())
}