use ragrig::{
ChunkConfig, ChunkedText, Chunker, MarkdownChunker,
parsers::{DocumentParsers, build_parsers, extract_text},
};
use std::env;
use std::path::Path;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let path = env::args()
.nth(1)
.unwrap_or_else(|| {
eprintln!("Usage: cargo run --example minimal -- <file.pdf|file.epub|file.html>");
std::process::exit(1);
});
let path = Path::new(&path);
if !path.exists() {
anyhow::bail!("File not found: {}", path.display());
}
let parsers = DocumentParsers::new(build_parsers());
let config = ChunkConfig::default();
let markdown = extract_text(&parsers, path)?;
println!("{} {} bytes of Markdown extracted", path.display(), markdown.len());
let chunker: Box<dyn Chunker> = Box::new(MarkdownChunker);
let chunks: Vec<ChunkedText> = chunker.chunk(&markdown, &config).await?;
println!(
"{} chunks (strategy='{}', size={}, overlap={})",
chunks.len(),
chunker.name(),
config.size,
config.overlap
);
for (i, chunk) in chunks.iter().take(3).enumerate() {
let section = chunk.section.as_deref().unwrap_or("(no section)");
let preview: String = chunk.text.chars().take(120).collect();
println!("\n── chunk {} [{section}] ──\n{}…", i + 1, preview);
}
if chunks.len() > 3 {
println!("\n… and {} more chunks.", chunks.len() - 3);
}
Ok(())
}