Skip to main content

Visitor

Trait Visitor 

Source
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§

Source

fn visit_expression_in(&mut self, expression: &mut Expression)

Called when the visitor visits an expression before calling any of the other visit methods

Source

fn visit_expression_out(&mut self, expression: &mut Expression)

Called then the visitor visits an expression after calling all of the other visit methods

Source

fn visit_field_node(&mut self, node: &mut FieldNode)

Called when the visitor visits a FieldNode

Source

fn visit_last_field_node(&mut self, node: &mut LastFieldNode)

Called when the visitor visits a LastFieldNode

Source

fn visit_and_node_in(&mut self, node: &mut AndNode)

Called when the visitor visits an AndNode before visiting its children

Source

fn visit_and_node_out(&mut self, node: &mut AndNode)

Called when the visitor visits an AndNode after visiting its children

Source

fn visit_or_node_in(&mut self, node: &mut OrNode)

Called when the visitor visits an OrNode before visiting its children

Source

fn visit_or_node_out(&mut self, node: &mut OrNode)

Called when the visitor visits an OrNode after visiting its children

Source

fn visit_not_node_in(&mut self, node: &mut NotNode)

Called when the visitor visits a NotNode before visiting its child

Source

fn visit_not_node_out(&mut self, node: &mut NotNode)

Called when the visitor visits a NotNode after visiting its child

Source

fn visit_op_node_in(&mut self, node: &mut OpNode)

Called when the visitor visits an OpNode before visiting its children

Source

fn visit_op_node_out(&mut self, node: &mut OpNode)

Called when the visitor visits an OpNode after visiting its children

Source

fn visit_literal_node(&mut self, node: &mut LiteralNode)

Called when the visitor visits a LiteralNode

Source

fn visit_function_node_in(&mut self, node: &mut FunctionNode)

Called when the visitor visits a FunctionNode before visiting its children

Source

fn visit_function_node_out(&mut self, node: &mut FunctionNode)

Called when the visitor visits a FunctionNode after visiting its children

Source

fn visit_iif_node_in(&mut self, node: &mut IifNode)

Called when the visitor visits a IifNode before visiting its children

Source

fn visit_iif_node_out(&mut self, node: &mut IifNode)

Called when the visitor visits a IifNode after visiting its children

Source

fn visit_list_node_in(&mut self, node: &mut ListNode)

Called when the visitor visits a ListNode before visiting its children

Source

fn visit_list_node_out(&mut self, node: &mut ListNode)

Called when the visitor visits a ListNode after visiting its children

Source

fn visit_field_expression(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a FieldNode

Source

fn visit_last_field_expression(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a LastFieldNode

Source

fn visit_and_expression_in(&mut self, expression: &mut Expression)

Called when the visitor visits ann expression representing a AndNode before visiting its children

Source

fn visit_and_expression_out(&mut self, expression: &mut Expression)

Called when the visitor visits ann expression representing a AndNode after visiting its children

Source

fn visit_or_expression_in(&mut self, expression: &mut Expression)

Called when the visitor visits ann expression representing a OrNode before visiting its children

Source

fn visit_or_expression_out(&mut self, expression: &mut Expression)

Called when the visitor visits ann expression representing a OrNode after visiting its children

Source

fn visit_not_expression_in(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a NotNode before visiting its child

Source

fn visit_not_expression_out(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a NotNode after visiting its child

Source

fn visit_op_expression_in(&mut self, expression: &mut Expression)

Called when the visitor visits ann expression representing a OpNode before visiting its children

Source

fn visit_op_expression_out(&mut self, expression: &mut Expression)

Called when the visitor visits ann expression representing a OpNode after visiting its children

Source

fn visit_literal_expression(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a LiteralNode

Source

fn visit_function_expression_in(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a FunctionNode before visiting its children

Source

fn visit_function_expression_out(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a FunctionNode after visiting its children

Source

fn visit_iif_expression_in(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a IifNode before visiting its children

Source

fn visit_iif_expression_out(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a IifNode after visiting its children

Source

fn visit_list_expression_in(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a ListNode before visiting its children

Source

fn visit_list_expression_out(&mut self, expression: &mut Expression)

Called when the visitor visits an expression representing a ListNode after visiting its children

Implementors§