use std::time::Duration;
use docling_rs::DoclingClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = DoclingClient::new("http://127.0.0.1:5001");
println!("=== Async conversion (wait_for_conversion) ===\n");
let result = client
.wait_for_conversion(
"https://arxiv.org/pdf/2206.01062",
None, Duration::from_secs(300), Some(5.0), )
.await?;
println!("Status: {:?}", result.status);
println!("Processing time: {:.2}s", result.processing_time);
if let Some(md) = &result.document.md_content {
println!(
"Markdown (first 500 chars):\n{}\n",
&md[..md.len().min(500)]
);
}
println!("=== Manual async flow ===\n");
let task = client
.convert_source_async("https://arxiv.org/pdf/2206.01062", None)
.await?;
println!("Task submitted: {}", task.task_id);
println!("Initial status: {}", task.task_status);
loop {
let status = client
.poll_task_status(&task.task_id, Some(5.0))
.await?;
println!(
" Polling... status={}, position={:?}",
status.task_status, status.task_position
);
if let Some(ref meta) = status.task_meta {
println!(
" Progress: {}/{} processed, {} succeeded, {} failed",
meta.num_processed, meta.num_docs, meta.num_succeeded, meta.num_failed
);
}
match status.task_status.as_str() {
"SUCCESS" => break,
"FAILURE" => {
eprintln!("Task failed!");
return Ok(());
}
_ => continue,
}
}
let result = client.get_task_result(&task.task_id).await?;
println!("\nFinal status: {:?}", result.status);
println!("Processing time: {:.2}s", result.processing_time);
Ok(())
}