Trait Visitor

Source
pub trait Visitor<'a, Context = ()>: Sized {
Show 21 methods // Provided methods fn compose<V: Visitor<'a, Context>>( self, other: V, ) -> ComposedVisitor<'a, Context, Self, V> { ... } fn enter_document( &mut self, _ctx: &mut Context, _document: &'a Document<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_document( &mut self, _ctx: &mut Context, _document: &'a Document<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn enter_operation( &mut self, _ctx: &mut Context, _operation: &'a OperationDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_operation( &mut self, _ctx: &mut Context, _operation: &'a OperationDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn enter_fragment( &mut self, _ctx: &mut Context, _fragment: &'a FragmentDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_fragment( &mut self, _ctx: &mut Context, _fragment: &'a FragmentDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn enter_variable_definition( &mut self, _ctx: &mut Context, _var_def: &'a VariableDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_variable_definition( &mut self, _ctx: &mut Context, _var_def: &'a VariableDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn enter_selection_set( &mut self, _ctx: &mut Context, _selection_set: &'a SelectionSet<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_selection_set( &mut self, _ctx: &mut Context, _selection_set: &'a SelectionSet<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn enter_fragment_spread( &mut self, _ctx: &mut Context, _fragment_spread: &'a FragmentSpread<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_fragment_spread( &mut self, _ctx: &mut Context, _fragment_spread: &'a FragmentSpread<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn enter_inline_fragment( &mut self, _ctx: &mut Context, _inline_fragment: &'a InlineFragment<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_inline_fragment( &mut self, _ctx: &mut Context, _inline_fragment: &'a InlineFragment<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn enter_field( &mut self, _ctx: &mut Context, _field: &'a Field<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_field( &mut self, _ctx: &mut Context, _field: &'a Field<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn enter_directive( &mut self, _ctx: &mut Context, _directive: &'a Directive<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_directive( &mut self, _ctx: &mut Context, _directive: &'a Directive<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn enter_argument( &mut self, _ctx: &mut Context, _argument: &'a Argument<'a>, _info: &VisitInfo, ) -> VisitFlow { ... } fn leave_argument( &mut self, _ctx: &mut Context, _argument: &'a Argument<'a>, _info: &VisitInfo, ) -> VisitFlow { ... }
}
Expand description

Trait for a visitor that carries methods that are called as callback while AST nodes implementing the visitor pattern are traversed.

While the AST is traversed in depth-first order, callbacks that are prefixed with enter_ are called from top-to-bottom while the traversal is recursing, while callbacks that are prefixed with leave_ are called from bottom-to-top while the traversal is returning.

All callbacks have a default no-op implementation that returns VisitFlow::Next. The VisitFlow signals are returned from callbacks to alter the traversal and either continue it (Next), skip over a node during an enter_ callback with (Skip), or abort traversal entirely (Break).

The visitor must implement the Visitor trait which may also define a custom context structure that can be passed to the visit method. By default the context is an empty unit ().

This pattern is applicable to any AST node that implements the VisitNode trait.

Provided Methods§

Source

fn compose<V: Visitor<'a, Context>>( self, other: V, ) -> ComposedVisitor<'a, Context, Self, V>

Combines two visitors into one that will run both the original and passed visitor concurrently.

Both visitors must accept the same Context type.

Source

fn enter_document( &mut self, _ctx: &mut Context, _document: &'a Document<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when a Document is visited and before its child nodes are visited.

Source

fn leave_document( &mut self, _ctx: &mut Context, _document: &'a Document<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after a Document and its child nodes were visited.

Source

fn enter_operation( &mut self, _ctx: &mut Context, _operation: &'a OperationDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when an OperationDefinition node is visited and before its child nodes are visited.

Source

fn leave_operation( &mut self, _ctx: &mut Context, _operation: &'a OperationDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after an OperationDefinition and its child node were visited.

Source

fn enter_fragment( &mut self, _ctx: &mut Context, _fragment: &'a FragmentDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when a FragmentDefinition node is visited and before its child nodes are visited.

Source

fn leave_fragment( &mut self, _ctx: &mut Context, _fragment: &'a FragmentDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after a FragmentDefinition node and its child nodes were visited.

Source

fn enter_variable_definition( &mut self, _ctx: &mut Context, _var_def: &'a VariableDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when a VariableDefinition node is visited and before its child nodes are visited.

Source

fn leave_variable_definition( &mut self, _ctx: &mut Context, _var_def: &'a VariableDefinition<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after a VariableDefinition node and its child nodes were visited.

Source

fn enter_selection_set( &mut self, _ctx: &mut Context, _selection_set: &'a SelectionSet<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when a SelectionSet node is visited and before its child nodes are visited.

Source

fn leave_selection_set( &mut self, _ctx: &mut Context, _selection_set: &'a SelectionSet<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after a SelectionSet node and its child nodes were visited.

Source

fn enter_fragment_spread( &mut self, _ctx: &mut Context, _fragment_spread: &'a FragmentSpread<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when a FragmentSpread node is visited and before its child nodes are visited.

Source

fn leave_fragment_spread( &mut self, _ctx: &mut Context, _fragment_spread: &'a FragmentSpread<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after a FragmentSpread node and its child nodes were visited.

Source

fn enter_inline_fragment( &mut self, _ctx: &mut Context, _inline_fragment: &'a InlineFragment<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when an InlineFragment node is visited and before its child nodes are visited.

Source

fn leave_inline_fragment( &mut self, _ctx: &mut Context, _inline_fragment: &'a InlineFragment<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after an InlineFragment node and its child nodes were visited.

Source

fn enter_field( &mut self, _ctx: &mut Context, _field: &'a Field<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when a Field node is visited and before its child nodes are visited.

Source

fn leave_field( &mut self, _ctx: &mut Context, _field: &'a Field<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after a Field node and its child nodes were visited.

Source

fn enter_directive( &mut self, _ctx: &mut Context, _directive: &'a Directive<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when a Directive node is visited and before its child nodes are visited.

Source

fn leave_directive( &mut self, _ctx: &mut Context, _directive: &'a Directive<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after a Directive node and its child nodes were visited.

Source

fn enter_argument( &mut self, _ctx: &mut Context, _argument: &'a Argument<'a>, _info: &VisitInfo, ) -> VisitFlow

Called when an Argument node is visited and before its child nodes are visited.

Source

fn leave_argument( &mut self, _ctx: &mut Context, _argument: &'a Argument<'a>, _info: &VisitInfo, ) -> VisitFlow

Called after an Argument node and its child nodes were visited.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§