Skip to main content

visitor

Function visitor 

Source
pub fn visitor<T, B, F1, F2>(enter: F1, leave: F2) -> FnVisitor<T, B, F1, F2>
where T: Any, F1: FnMut(&T) -> ControlFlow<B>, F2: FnMut(&T) -> ControlFlow<B>,
Expand description

Create a visitor that only visits items of a specific type from enter and leave closures.

This is a convenience function for creating simple visitors without defining a new struct and implementing the Visitor trait manually.

ยงExample

use core::ops::ControlFlow;

use traversable::Traversable;
use traversable::Visitor;
use traversable::function::visitor;

#[derive(Traversable)]
struct Item {
    value: i32,
}

let item = Item { value: 10 };
let mut total_value = 0;

let mut visitor = visitor::<Item, (), _, _>(
    |node: &Item| {
        // enter closure
        total_value += node.value;
        ControlFlow::Continue(())
    },
    |_node: &Item| {
        // leave closure
        ControlFlow::Continue(())
    },
);

item.traverse(&mut visitor);
assert_eq!(total_value, 10);