use vibesql_ast::{
visitor::{ExpressionVisitor, StatementVisitor, VisitResult},
Expression, Statement,
};
pub fn visit_statement<F>(stmt: &Statement, visitor: &mut F)
where
F: FnMut(&Expression),
{
struct ClosureVisitor<'a, F> {
closure: &'a mut F,
}
impl<F: FnMut(&Expression)> ExpressionVisitor for ClosureVisitor<'_, F> {
fn pre_visit_expression(&mut self, expr: &Expression) -> VisitResult {
(self.closure)(expr);
VisitResult::Continue
}
}
impl<F: FnMut(&Expression)> StatementVisitor for ClosureVisitor<'_, F> {}
let mut v = ClosureVisitor { closure: visitor };
vibesql_ast::visitor::walk_statement(&mut v, stmt);
}