syntree 0.18.0

A memory efficient syntax tree for language developers.
Documentation
use anyhow::Result;

fn main() -> Result<()> {
    let mut tree = syntree::Builder::new();

    tree.open("root1")?;

    tree.open("child1")?;
    tree.close()?;

    tree.open("child2")?;
    tree.close()?;

    tree.close()?;

    tree.open("root2")?;
    tree.close()?;

    let tree = tree.build()?;
    let mut it = tree.children();

    assert_eq!(it.next().map(|n| n.value()), Some("root1"));
    assert_eq!(it.next().map(|n| n.value()), Some("root2"));
    assert!(it.next().is_none());
    Ok(())
}