fsearch/lib.rs
1//! # fsearch
2//!
3//! A blazingly fast, cross-platform library for **file search** and
4//! **duplicate detection**, supporting multiple root directories.
5//!
6//! ## File search — single directory
7//! ```no_run
8//! use fsearch::searcher::{fast_find, SearchOptions};
9//! use std::sync::{Arc, atomic::AtomicBool};
10//!
11//! let opts = SearchOptions::builder("*.rs")
12//! .base_dir("./src")
13//! .max_depth(5)
14//! .build();
15//!
16//! let results = fast_find(&opts, Arc::new(AtomicBool::new(false))).unwrap();
17//! for m in &results { println!("{}", m.path().display()); }
18//! ```
19//!
20//! ## File search — multiple directories
21//! ```no_run
22//! use fsearch::searcher::{fast_find, SearchOptions};
23//! use std::sync::{Arc, atomic::AtomicBool};
24//!
25//! let opts = SearchOptions::builder("TODO")
26//! .base_dirs(vec!["./src", "./tests", "./benches"])
27//! .search_in_files(true)
28//! .max_depth(10)
29//! .build();
30//!
31//! let results = fast_find(&opts, Arc::new(AtomicBool::new(false))).unwrap();
32//! ```
33//!
34//! ## Duplicate detection — multiple directories
35//! ```no_run
36//! use fsearch::duplicates::{find_duplicates, DuplicateOptions, DuplicateMode};
37//! use std::sync::{Arc, atomic::AtomicBool};
38//!
39//! // Detect cross-directory duplicates (e.g. local Photos vs NAS backup)
40//! let opts = DuplicateOptions::builder(vec!["~/Photos", "/mnt/nas/Photos"])
41//! .max_depth(10)
42//! .mode(DuplicateMode::Content)
43//! .min_size(1024)
44//! .build();
45//!
46//! let (groups, summary) = find_duplicates(&opts, Arc::new(AtomicBool::new(false))).unwrap();
47//! println!("{} groups, {} wasted", summary.groups_found, summary.wasted_human());
48//! ```
49
50pub mod binary;
51pub mod colors;
52pub mod config;
53pub mod duplicates;
54pub mod error;
55pub mod output;
56pub mod searcher;
57
58// ── Convenience re-exports ────────────────────────────────────────────────────
59
60pub use config::Config;
61pub use duplicates::{
62 find_duplicates, DuplicateGroup, DuplicateMode, DuplicateOptions, DuplicateSummary,
63 HashAlgorithm,
64};
65pub use error::{FsearchError, FsearchResult};
66pub use searcher::{fast_find, recursive_find, LineMatch, SearchMatch, SearchOptions};