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.