idml 0.5.3

Parser for Indented Delimiter Markup Language
Documentation
use idml::{parse, Node};

fn with_name(node: &Node, name: &str) -> Vec<String> {
  node.with_name(name).map(|node| node.name().to_string()).collect::<Vec<String>>()
}

fn with_names(node: &Node, names: &[&str]) -> Vec<String> {
  node.with_names(names).map(|node| node.name().to_string()).collect::<Vec<String>>()
}

fn excluding_name(node: &Node, name: &str) -> Vec<String> {
  node.excluding_name(name).map(|node| node.name().to_string()).collect::<Vec<String>>()
}

fn excluding_names(node: &Node, names: &[&str]) -> Vec<String> {
  node.excluding_names(names).map(|node| node.name().to_string()).collect::<Vec<String>>()
}

#[test]
fn _0001() {
  let input = r#".A
    .B
    .B
    .C
    .D
    .D
    .D
"#;
  let root = parse(input).unwrap();
  assert_eq!(1, root.children().count());
  assert_eq!(1, root.child_count());
  let node = root.children().next().unwrap();
  assert_eq!(6, node.children().count());
  assert_eq!(6, node.child_count());
  assert_eq!('.', node.delimiter());
  assert_eq!("A", node.name());
  assert_eq!("\n", node.content());
  assert_eq!("", node.text());
  assert_eq!(vec!["B", "B"], with_name(node, "B"));
  assert_eq!(vec!["C"], with_name(node, "C"));
  assert_eq!(vec!["D", "D", "D"], with_name(node, "D"));
  assert!(with_name(node, "E").is_empty());
}

#[test]
fn _0002() {
  let input = r#".A
    .B
    .B
    .C
    .D
    .D
    .D
"#;
  let root = parse(input).unwrap();
  let node = root.children().next().unwrap();
  assert_eq!(vec!["C", "D", "D", "D"], excluding_name(node, "B"));
  assert_eq!(vec!["B", "B", "D", "D", "D"], excluding_name(node, "C"));
  assert_eq!(vec!["B", "B", "C"], excluding_name(node, "D"));
}

#[test]
fn _0003() {
  let input = r#".A
    .B
    .B
    .C
    .D
    .D
    .D
"#;
  let root = parse(input).unwrap();
  let node = root.children().next().unwrap();
  assert_eq!(vec!["B", "B"], with_names(node, &["B"]));
  assert_eq!(vec!["B", "B", "D", "D", "D"], with_names(node, &["B", "D"]));
  assert_eq!(vec!["B", "B", "C"], with_names(node, &["C", "B"]));
}

#[test]
fn _0004() {
  let input = r#".A
    .B
    .B
    .C
    .D
    .D
    .D
"#;
  let root = parse(input).unwrap();
  let node = root.children().next().unwrap();
  assert_eq!(vec!["C", "D", "D", "D"], excluding_names(node, &["B"]));
  assert_eq!(vec!["C"], excluding_names(node, &["B", "D"]));
  assert_eq!(vec!["D", "D", "D"], excluding_names(node, &["C", "B"]));
}