use super::IRNode;
pub fn walk_ir_mut<F>(node: &mut IRNode, f: &mut F)
where
F: FnMut(&mut IRNode),
{
f(node);
match node {
IRNode::Element(element) => {
for child in &mut element.ir_children {
walk_ir_mut(child, f);
}
}
IRNode::ForEach { template, .. } => {
for child in template {
walk_ir_mut(child, f);
}
}
IRNode::Conditional {
branches, fallback, ..
} => {
for branch in branches {
for child in &mut branch.children {
walk_ir_mut(child, f);
}
}
if let Some(fb) = fallback {
for child in fb {
walk_ir_mut(child, f);
}
}
}
IRNode::Router {
routes, fallback, ..
} => {
for route in routes {
for child in &mut route.children {
walk_ir_mut(child, f);
}
}
if let Some(fb) = fallback {
for child in fb {
walk_ir_mut(child, f);
}
}
}
}
}
pub fn walk_ir<F>(node: &IRNode, f: &mut F)
where
F: FnMut(&IRNode),
{
f(node);
match node {
IRNode::Element(element) => {
for child in &element.ir_children {
walk_ir(child, f);
}
}
IRNode::ForEach { template, .. } => {
for child in template {
walk_ir(child, f);
}
}
IRNode::Conditional {
branches, fallback, ..
} => {
for branch in branches {
for child in &branch.children {
walk_ir(child, f);
}
}
if let Some(fb) = fallback {
for child in fb {
walk_ir(child, f);
}
}
}
IRNode::Router {
routes, fallback, ..
} => {
for route in routes {
for child in &route.children {
walk_ir(child, f);
}
}
if let Some(fb) = fallback {
for child in fb {
walk_ir(child, f);
}
}
}
}
}