pub trait Visitor {
Show 36 methods
// Provided methods
fn visit_expression_in(&mut self, expression: &mut Expression) { ... }
fn visit_expression_out(&mut self, expression: &mut Expression) { ... }
fn visit_field_node(&mut self, node: &mut FieldNode) { ... }
fn visit_last_field_node(&mut self, node: &mut LastFieldNode) { ... }
fn visit_and_node_in(&mut self, node: &mut AndNode) { ... }
fn visit_and_node_out(&mut self, node: &mut AndNode) { ... }
fn visit_or_node_in(&mut self, node: &mut OrNode) { ... }
fn visit_or_node_out(&mut self, node: &mut OrNode) { ... }
fn visit_not_node_in(&mut self, node: &mut NotNode) { ... }
fn visit_not_node_out(&mut self, node: &mut NotNode) { ... }
fn visit_op_node_in(&mut self, node: &mut OpNode) { ... }
fn visit_op_node_out(&mut self, node: &mut OpNode) { ... }
fn visit_literal_node(&mut self, node: &mut LiteralNode) { ... }
fn visit_function_node_in(&mut self, node: &mut FunctionNode) { ... }
fn visit_function_node_out(&mut self, node: &mut FunctionNode) { ... }
fn visit_iif_node_in(&mut self, node: &mut IifNode) { ... }
fn visit_iif_node_out(&mut self, node: &mut IifNode) { ... }
fn visit_list_node_in(&mut self, node: &mut ListNode) { ... }
fn visit_list_node_out(&mut self, node: &mut ListNode) { ... }
fn visit_field_expression(&mut self, expression: &mut Expression) { ... }
fn visit_last_field_expression(&mut self, expression: &mut Expression) { ... }
fn visit_and_expression_in(&mut self, expression: &mut Expression) { ... }
fn visit_and_expression_out(&mut self, expression: &mut Expression) { ... }
fn visit_or_expression_in(&mut self, expression: &mut Expression) { ... }
fn visit_or_expression_out(&mut self, expression: &mut Expression) { ... }
fn visit_not_expression_in(&mut self, expression: &mut Expression) { ... }
fn visit_not_expression_out(&mut self, expression: &mut Expression) { ... }
fn visit_op_expression_in(&mut self, expression: &mut Expression) { ... }
fn visit_op_expression_out(&mut self, expression: &mut Expression) { ... }
fn visit_literal_expression(&mut self, expression: &mut Expression) { ... }
fn visit_function_expression_in(&mut self, expression: &mut Expression) { ... }
fn visit_function_expression_out(&mut self, expression: &mut Expression) { ... }
fn visit_iif_expression_in(&mut self, expression: &mut Expression) { ... }
fn visit_iif_expression_out(&mut self, expression: &mut Expression) { ... }
fn visit_list_expression_in(&mut self, expression: &mut Expression) { ... }
fn visit_list_expression_out(&mut self, expression: &mut Expression) { ... }
}Expand description
Visit nodes in the Expression
Use this to transform expressions or to inspect the structure of expressions without recursively evaluating them.
§Example
use rets_expression::{Expression, Visitor, FunctionNode, LiteralNode};
let mut expression = "5 .IN. (1, 2, Three, LAST Four, Five)"
.parse::<Expression>()
.unwrap();
/// A visitor that rewrites native lists into `LIST` function calls.
struct RewriteNativeListVisitor;
impl Visitor for RewriteNativeListVisitor {
fn visit_list_expression_in(&mut self, expression: &mut Expression) {
let list_expression = std::mem::replace(
expression,
Expression::Literal(LiteralNode::new(serde_json::Value::Null)),
);
let Expression::List(list_node) = list_expression else {
unreachable!()
};
let function_node = FunctionNode::new("LIST", list_node.items);
let function_expression = Expression::from(function_node);
*expression = function_expression;
}
}
expression.accept(&mut RewriteNativeListVisitor);
let serialized = expression.serialize().unwrap();
assert_eq!(serialized, "5 .IN. LIST(1, 2, Three, LAST Four, Five)");Provided Methods§
Sourcefn visit_expression_in(&mut self, expression: &mut Expression)
fn visit_expression_in(&mut self, expression: &mut Expression)
Called when the visitor visits an expression before calling any of the other visit methods
Sourcefn visit_expression_out(&mut self, expression: &mut Expression)
fn visit_expression_out(&mut self, expression: &mut Expression)
Called then the visitor visits an expression after calling all of the other visit methods
Sourcefn visit_field_node(&mut self, node: &mut FieldNode)
fn visit_field_node(&mut self, node: &mut FieldNode)
Called when the visitor visits a FieldNode
Sourcefn visit_last_field_node(&mut self, node: &mut LastFieldNode)
fn visit_last_field_node(&mut self, node: &mut LastFieldNode)
Called when the visitor visits a LastFieldNode
Sourcefn visit_and_node_in(&mut self, node: &mut AndNode)
fn visit_and_node_in(&mut self, node: &mut AndNode)
Called when the visitor visits an AndNode before visiting its children
Sourcefn visit_and_node_out(&mut self, node: &mut AndNode)
fn visit_and_node_out(&mut self, node: &mut AndNode)
Called when the visitor visits an AndNode after visiting its children
Sourcefn visit_or_node_in(&mut self, node: &mut OrNode)
fn visit_or_node_in(&mut self, node: &mut OrNode)
Called when the visitor visits an OrNode before visiting its children
Sourcefn visit_or_node_out(&mut self, node: &mut OrNode)
fn visit_or_node_out(&mut self, node: &mut OrNode)
Called when the visitor visits an OrNode after visiting its children
Sourcefn visit_not_node_in(&mut self, node: &mut NotNode)
fn visit_not_node_in(&mut self, node: &mut NotNode)
Called when the visitor visits a NotNode before visiting its child
Sourcefn visit_not_node_out(&mut self, node: &mut NotNode)
fn visit_not_node_out(&mut self, node: &mut NotNode)
Called when the visitor visits a NotNode after visiting its child
Sourcefn visit_op_node_in(&mut self, node: &mut OpNode)
fn visit_op_node_in(&mut self, node: &mut OpNode)
Called when the visitor visits an OpNode before visiting its children
Sourcefn visit_op_node_out(&mut self, node: &mut OpNode)
fn visit_op_node_out(&mut self, node: &mut OpNode)
Called when the visitor visits an OpNode after visiting its children
Sourcefn visit_literal_node(&mut self, node: &mut LiteralNode)
fn visit_literal_node(&mut self, node: &mut LiteralNode)
Called when the visitor visits a LiteralNode
Sourcefn visit_function_node_in(&mut self, node: &mut FunctionNode)
fn visit_function_node_in(&mut self, node: &mut FunctionNode)
Called when the visitor visits a FunctionNode before visiting its children
Sourcefn visit_function_node_out(&mut self, node: &mut FunctionNode)
fn visit_function_node_out(&mut self, node: &mut FunctionNode)
Called when the visitor visits a FunctionNode after visiting its children
Sourcefn visit_iif_node_in(&mut self, node: &mut IifNode)
fn visit_iif_node_in(&mut self, node: &mut IifNode)
Called when the visitor visits a IifNode before visiting its children
Sourcefn visit_iif_node_out(&mut self, node: &mut IifNode)
fn visit_iif_node_out(&mut self, node: &mut IifNode)
Called when the visitor visits a IifNode after visiting its children
Sourcefn visit_list_node_in(&mut self, node: &mut ListNode)
fn visit_list_node_in(&mut self, node: &mut ListNode)
Called when the visitor visits a ListNode before visiting its children
Sourcefn visit_list_node_out(&mut self, node: &mut ListNode)
fn visit_list_node_out(&mut self, node: &mut ListNode)
Called when the visitor visits a ListNode after visiting its children
Sourcefn visit_field_expression(&mut self, expression: &mut Expression)
fn visit_field_expression(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a FieldNode
Sourcefn visit_last_field_expression(&mut self, expression: &mut Expression)
fn visit_last_field_expression(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a LastFieldNode
Sourcefn visit_and_expression_in(&mut self, expression: &mut Expression)
fn visit_and_expression_in(&mut self, expression: &mut Expression)
Called when the visitor visits ann expression representing a AndNode before visiting its children
Sourcefn visit_and_expression_out(&mut self, expression: &mut Expression)
fn visit_and_expression_out(&mut self, expression: &mut Expression)
Called when the visitor visits ann expression representing a AndNode after visiting its children
Sourcefn visit_or_expression_in(&mut self, expression: &mut Expression)
fn visit_or_expression_in(&mut self, expression: &mut Expression)
Called when the visitor visits ann expression representing a OrNode before visiting its children
Sourcefn visit_or_expression_out(&mut self, expression: &mut Expression)
fn visit_or_expression_out(&mut self, expression: &mut Expression)
Called when the visitor visits ann expression representing a OrNode after visiting its children
Sourcefn visit_not_expression_in(&mut self, expression: &mut Expression)
fn visit_not_expression_in(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a NotNode before visiting its child
Sourcefn visit_not_expression_out(&mut self, expression: &mut Expression)
fn visit_not_expression_out(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a NotNode after visiting its child
Sourcefn visit_op_expression_in(&mut self, expression: &mut Expression)
fn visit_op_expression_in(&mut self, expression: &mut Expression)
Called when the visitor visits ann expression representing a OpNode before visiting its children
Sourcefn visit_op_expression_out(&mut self, expression: &mut Expression)
fn visit_op_expression_out(&mut self, expression: &mut Expression)
Called when the visitor visits ann expression representing a OpNode after visiting its children
Sourcefn visit_literal_expression(&mut self, expression: &mut Expression)
fn visit_literal_expression(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a LiteralNode
Sourcefn visit_function_expression_in(&mut self, expression: &mut Expression)
fn visit_function_expression_in(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a FunctionNode before visiting its children
Sourcefn visit_function_expression_out(&mut self, expression: &mut Expression)
fn visit_function_expression_out(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a FunctionNode after visiting its children
Sourcefn visit_iif_expression_in(&mut self, expression: &mut Expression)
fn visit_iif_expression_in(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a IifNode before visiting its children
Sourcefn visit_iif_expression_out(&mut self, expression: &mut Expression)
fn visit_iif_expression_out(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a IifNode after visiting its children
Sourcefn visit_list_expression_in(&mut self, expression: &mut Expression)
fn visit_list_expression_in(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a ListNode before visiting its children
Sourcefn visit_list_expression_out(&mut self, expression: &mut Expression)
fn visit_list_expression_out(&mut self, expression: &mut Expression)
Called when the visitor visits an expression representing a ListNode after visiting its children