use crate::nodes::node::Node;
#[allow(dead_code)]
pub fn visit(node: &Node, f: &mut impl FnMut(&Node)) {
f(node);
match node {
Node::Anchored(inner, _) | Node::Tagged(inner, _) => {
visit(inner, f);
}
Node::Mapping(pairs) => {
for (k, v) in pairs {
visit(k, f);
visit(v, f);
}
}
Node::Array(items) | Node::Set(items) => {
for it in items {
visit(it, f);
}
}
Node::Document(nodes) | Node::Documents(nodes) => {
for n in nodes {
visit(n, f);
}
}
_ => {}
}
}
#[allow(dead_code)]
pub fn visit_with_depth(node: &Node, depth: usize, f: &mut impl FnMut(&Node, usize)) {
f(node, depth);
match node {
Node::Anchored(inner, _) | Node::Tagged(inner, _) => {
visit_with_depth(inner, depth + 1, f);
}
Node::Mapping(pairs) => {
for (k, v) in pairs {
visit_with_depth(k, depth + 1, f);
visit_with_depth(v, depth + 1, f);
}
}
Node::Array(items) | Node::Set(items) => {
for it in items {
visit_with_depth(it, depth + 1, f);
}
}
Node::Document(nodes) | Node::Documents(nodes) => {
for n in nodes {
visit_with_depth(n, depth + 1, f);
}
}
_ => {}
}
}
#[allow(dead_code)]
pub fn visit_mut(node: &mut Node, f: &mut impl FnMut(&mut Node)) {
f(node);
match node {
Node::Anchored(inner, _) | Node::Tagged(inner, _) => {
visit_mut(inner.as_mut(), f);
}
Node::Mapping(pairs) => {
for (k, v) in pairs.iter_mut() {
visit_mut(k, f);
visit_mut(v, f);
}
}
Node::Array(items) | Node::Set(items) => {
for it in items.iter_mut() {
visit_mut(it, f);
}
}
Node::Document(nodes) | Node::Documents(nodes) => {
for n in nodes.iter_mut() {
visit_mut(n, f);
}
}
_ => {}
}
}