//! # fsindex
//!
//! Fast, powerful filesystem indexing with .gitignore support.
//!
//! ## Quick Start
//!
//! ```no_run
//! use fsindex::{FileIndexer, Config};
//!
//! let indexer = FileIndexer::new("./src");
//!
//! // Iterate over all files
//! for file in indexer.files() {
//!     println!("{}: {} bytes", file.path.display(), file.metadata.size);
//! }
//! ```
//!
//! ## With Configuration
//!
//! ```no_run
//! use fsindex::{FileIndexer, Config};
//!
//! let config = Config::builder()
//!     .respect_gitignore(true)
//!     .include_hidden(false)
//!     .max_depth(Some(10))
//!     .extensions(vec!["rs", "toml"])
//!     .build();
//!
//! let indexer = FileIndexer::with_config("./", config);
//!
//! for file in indexer.files() {
//!     println!("{}", file.path.display());
//! }
//! ```

mod config;
mod error;
mod indexer;
mod language;
mod state;
mod streaming;
mod structure;
mod watcher;

pub use config::{Config, ConfigBuilder};
pub use error::{Error, Result};
pub use indexer::{ContentChunk, FileIndexer, FileIter, FileMetadata, IndexedFile};
pub use language::Language;
pub use state::{FileDiff, FileEntry, IndexState};
pub use streaming::{ContentStream, FileLine, LineStream, StreamChunk, StreamExt};
pub use structure::{CodeStructure, Symbol, SymbolKind};
pub use watcher::{EventKind, FileEvent, FileWatcher};
