49 lines
1.1 KiB
Rust
49 lines
1.1 KiB
Rust
//! 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());
|
|
}
|
|
}
|