Visitor for FunctionValueDefinition

This commit is contained in:
chriseth
2023-10-10 15:50:50 +02:00
parent 7940c8887f
commit 48d6de72bd

View File

@@ -79,3 +79,35 @@ impl<T> ExpressionVisitable<parsed::Expression<T, Reference>> for Identity<T> {
.try_for_each(move |item| item.visit_expressions(f, o))
}
}
impl<T> ExpressionVisitable<Expression<T>> for FunctionValueDefinition<T> {
fn visit_expressions_mut<F, B>(&mut self, f: &mut F, o: VisitOrder) -> ControlFlow<B>
where
F: FnMut(&mut Expression<T>) -> ControlFlow<B>,
{
match self {
FunctionValueDefinition::Mapping(e)
| FunctionValueDefinition::Query(e)
| FunctionValueDefinition::Expression(e) => e.visit_expressions_mut(f, o),
FunctionValueDefinition::Array(array) => array
.iter_mut()
.flat_map(|a| a.pattern.iter_mut())
.try_for_each(move |item| item.visit_expressions_mut(f, o)),
}
}
fn visit_expressions<F, B>(&self, f: &mut F, o: VisitOrder) -> ControlFlow<B>
where
F: FnMut(&Expression<T>) -> ControlFlow<B>,
{
match self {
FunctionValueDefinition::Mapping(e)
| FunctionValueDefinition::Query(e)
| FunctionValueDefinition::Expression(e) => e.visit_expressions(f, o),
FunctionValueDefinition::Array(array) => array
.iter()
.flat_map(|a| a.pattern().iter())
.try_for_each(move |item| item.visit_expressions(f, o)),
}
}
}