use tarzi::{FetchMode, Format, Result, SearchEngine, WebFetcher, config::Config};
#[tokio::main]
async fn main() -> Result<()> {
tracing_subscriber::fmt::init();
println!("=== Tarzi Modular Example ===\n");
let mut config = Config::load().unwrap_or_default();
config.fetcher.web_driver = "chromedriver".to_string();
println!("1. Fetching content with different modes:");
let mut fetcher = WebFetcher::from_config(&config);
let test_url = tarzi::constants::HTTPBIN_HTML_URL;
match fetcher
.fetch(test_url, FetchMode::PlainRequest, Format::Html)
.await
{
Ok(content) => println!(" Plain request: {} characters", content.len()),
Err(e) => println!(" Plain request failed: {e}"),
}
match fetcher
.fetch(test_url, FetchMode::BrowserHeadless, Format::Markdown)
.await
{
Ok(content) => println!(" Browser headless: {} characters", content.len()),
Err(e) => println!(" Browser headless failed: {e}"),
}
println!();
println!("2. Searching and fetching content:");
let mut search_engine = SearchEngine::from_config(&config);
let query = "agentic AI";
match search_engine.search(query, 3).await {
Ok(results) => {
println!("Found {} results:", results.len());
for (i, result) in results.iter().enumerate() {
println!("{}. {}", i + 1, result.title);
println!(" URL: {}", result.url);
println!(" Snippet: {}", result.snippet);
}
}
Err(e) => {
eprintln!("Search failed: {e}");
}
}
println!();
println!("3. Search and fetch content for each result:");
let results = search_engine
.search_with_content(query, 3, FetchMode::BrowserHeadless, Format::Markdown)
.await?;
println!("Found {} results with content:", results.len());
for (i, (result, content)) in results.iter().enumerate() {
println!("{}. {}", i + 1, result.title);
println!(" URL: {}", result.url);
println!(" Content length: {} characters", content.len());
}
println!();
println!("=== Example completed ===");
Ok(())
}