//! Example demonstrating basic Terrace parsing in Rust. use terrace::{TerraceDocument, StringReader}; #[tokio::main] async fn main() { let content = r#" config database host localhost port 5432 name mydb server port 3000 host 0.0.0.0 ssl enabled "#; println!("Parsing Terrace document:"); println!("{}", content); println!("Results:"); let reader = StringReader::new(content); let mut doc = TerraceDocument::with_reader(reader); while let Some(node) = doc.next().await { if !node.is_empty() { println!("{:indent$}{}: '{}'", "", node.head(), node.tail(), indent = node.level() * 2); } } println!("\n--- Filtering Example ---"); // Example of filtering let reader2 = StringReader::new(content); let doc2 = TerraceDocument::with_reader(reader2); let port_nodes = doc2.filter(|node| node.head() == "port").await; println!("Found {} port configurations:", port_nodes.len()); for node in port_nodes { println!(" Port: {} (level {})", node.tail(), node.level()); } }