fsearch/lib.rs
1//! # fsearch
2//!
3//! A blazingly fast, cross-platform library for file search and duplicate
4//! detection.
5//!
6//! ## Quick start
7//!
8//! ### File search
9//! ```no_run
10//! use fsearch::searcher::{fast_find, SearchOptions};
11//! use std::sync::{Arc, atomic::AtomicBool};
12//!
13//! let opts = SearchOptions::builder("*.rs")
14//! .base_dir("./src")
15//! .max_depth(5)
16//! .case_insensitive(true)
17//! .build();
18//!
19//! let interrupted = Arc::new(AtomicBool::new(false));
20//! let results = fast_find(&opts, interrupted).unwrap();
21//! for m in &results {
22//! println!("{}", m.path().display());
23//! }
24//! ```
25//!
26//! ### Content search
27//! ```no_run
28//! use fsearch::searcher::{fast_find, SearchOptions};
29//! use std::sync::{Arc, atomic::AtomicBool};
30//!
31//! let opts = SearchOptions::builder("TODO")
32//! .base_dir(".")
33//! .max_depth(10)
34//! .search_in_files(true)
35//! .include_patterns(vec!["*.rs".into(), "*.py".into()])
36//! .build();
37//!
38//! let interrupted = Arc::new(AtomicBool::new(false));
39//! let results = fast_find(&opts, interrupted).unwrap();
40//! ```
41//!
42//! ### Duplicate detection
43//! ```no_run
44//! use fsearch::duplicates::{find_duplicates, DuplicateOptions, DuplicateMode, HashAlgorithm};
45//! use std::sync::{Arc, atomic::AtomicBool};
46//!
47//! let opts = DuplicateOptions::builder(".")
48//! .max_depth(10)
49//! .mode(DuplicateMode::Content)
50//! .algorithm(HashAlgorithm::Sha256)
51//! .min_size(1024) // skip files smaller than 1 KiB
52//! .build();
53//!
54//! let interrupted = Arc::new(AtomicBool::new(false));
55//! let (groups, summary) = find_duplicates(&opts, interrupted).unwrap();
56//! println!("Found {} duplicate groups, wasted {}", summary.groups_found, summary.wasted_human());
57//! ```
58
59pub mod binary;
60pub mod colors;
61pub mod config;
62pub mod duplicates;
63pub mod error;
64pub mod output;
65pub mod searcher;
66
67// ── Convenience re-exports ────────────────────────────────────────────────────
68
69pub use config::Config;
70pub use duplicates::{
71 find_duplicates, DuplicateGroup, DuplicateMode, DuplicateOptions, DuplicateSummary,
72 HashAlgorithm,
73};
74pub use error::{FsearchError, FsearchResult};
75pub use searcher::{fast_find, recursive_find, LineMatch, SearchMatch, SearchOptions};