kdl-rs/examples/insert-node.rs

43 lines
1.0 KiB
Rust

// Shows how to maintain nodes sorted by value in a
// machine-generated kdl document
use kdl::{KdlDocument, KdlIdentifier, KdlNode};
fn sort_by_name(x: &KdlNode, y: &KdlNode) -> std::cmp::Ordering {
x.name().value().cmp(y.name().value())
}
fn main() -> miette::Result<()> {
let input = r#"
words {
apple // one a day keeps the doctor away
orange
}
"#;
let mut doc: KdlDocument = input.parse()?;
let words_section = doc.get_mut("words").expect("'words' section should exist");
let children = words_section
.children_mut()
.as_mut()
.expect("'words' section should have children");
let word_nodes = children.nodes_mut();
let identifier = KdlIdentifier::from("banana");
let word_node = KdlNode::new(identifier);
word_nodes.push(word_node);
word_nodes.sort_by(sort_by_name);
words_section.autoformat();
println!("{doc}");
// output:
// words {
// apple // one a day keeps the doctor away
// banana
// orange
// }
Ok(())
}