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§
Sourcefn compose<V: Visitor<'a, Context>>(
self,
other: V,
) -> ComposedVisitor<'a, Context, Self, V>
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.
Sourcefn enter_document(
&mut self,
_ctx: &mut Context,
_document: &'a Document<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
Called after a Document and its child nodes were visited.
Sourcefn enter_operation(
&mut self,
_ctx: &mut Context,
_operation: &'a OperationDefinition<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
Called after an OperationDefinition and its child node were visited.
Sourcefn enter_fragment(
&mut self,
_ctx: &mut Context,
_fragment: &'a FragmentDefinition<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
Called after a FragmentDefinition node and its child nodes were visited.
Sourcefn enter_variable_definition(
&mut self,
_ctx: &mut Context,
_var_def: &'a VariableDefinition<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
Called after a VariableDefinition node and its child nodes were visited.
Sourcefn enter_selection_set(
&mut self,
_ctx: &mut Context,
_selection_set: &'a SelectionSet<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
Called after a SelectionSet node and its child nodes were visited.
Sourcefn enter_fragment_spread(
&mut self,
_ctx: &mut Context,
_fragment_spread: &'a FragmentSpread<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
Called after a FragmentSpread node and its child nodes were visited.
Sourcefn enter_inline_fragment(
&mut self,
_ctx: &mut Context,
_inline_fragment: &'a InlineFragment<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
Called after an InlineFragment node and its child nodes were visited.
Sourcefn enter_field(
&mut self,
_ctx: &mut Context,
_field: &'a Field<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
Called after a Field node and its child nodes were visited.
Sourcefn enter_directive(
&mut self,
_ctx: &mut Context,
_directive: &'a Directive<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
Called after a Directive node and its child nodes were visited.
Sourcefn enter_argument(
&mut self,
_ctx: &mut Context,
_argument: &'a Argument<'a>,
_info: &VisitInfo,
) -> VisitFlow
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.
Sourcefn leave_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
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.