pub trait TreeNodeVisitor: Sized {
    type N: TreeNode;

    // Required method
    fn pre_visit(
        &mut self,
        node: &Self::N
    ) -> Result<VisitRecursion, DataFusionError>;

    // Provided method
    fn post_visit(
        &mut self,
        _node: &Self::N
    ) -> Result<VisitRecursion, DataFusionError> { ... }
}
Expand description

Implements the visitor pattern for recursively walking TreeNodes.

TreeNodeVisitor allows keeping the algorithms separate from the code to traverse the structure of the TreeNode tree and makes it easier to add new types of tree node and algorithms.

When passed toTreeNode::visit, TreeNodeVisitor::pre_visit and TreeNodeVisitor::post_visit are invoked recursively on an node tree.

If an Err result is returned, recursion is stopped immediately.

If VisitRecursion::Stop is returned on a call to pre_visit, no children of that tree node are visited, nor is post_visit called on that tree node

If VisitRecursion::Stop is returned on a call to post_visit, no siblings of that tree node are visited, nor is post_visit called on its parent tree node

If VisitRecursion::Skip is returned on a call to pre_visit, no children of that tree node are visited.

Required Associated Types§

source

type N: TreeNode

The node type which is visitable.

Required Methods§

source

fn pre_visit( &mut self, node: &Self::N ) -> Result<VisitRecursion, DataFusionError>

Invoked before any children of node are visited.

Provided Methods§

source

fn post_visit( &mut self, _node: &Self::N ) -> Result<VisitRecursion, DataFusionError>

Invoked after all children of node are visited. Default implementation does nothing.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, 'b> TreeNodeVisitor for GraphvizVisitor<'a, 'b>

source§

impl<'a, 'b> TreeNodeVisitor for IndentVisitor<'a, 'b>