toasty_core/stmt/
node.rs

1use super::{Visit, VisitMut};
2use std::fmt;
3
4pub trait Node: fmt::Debug {
5    fn visit<V: Visit>(&self, visit: V)
6    where
7        Self: Sized;
8
9    fn visit_mut<V: VisitMut>(&mut self, visit: V);
10}
11
12impl<T: Node> Node for Option<T> {
13    fn visit<V: Visit>(&self, visit: V)
14    where
15        Self: Sized,
16    {
17        if let Some(node) = self {
18            node.visit(visit);
19        }
20    }
21
22    fn visit_mut<V: VisitMut>(&mut self, visit: V) {
23        if let Some(node) = self {
24            node.visit_mut(visit);
25        }
26    }
27}
28
29impl<T: Node> Node for &mut T {
30    fn visit<V: Visit>(&self, visit: V)
31    where
32        Self: Sized,
33    {
34        (**self).visit(visit)
35    }
36
37    fn visit_mut<V: VisitMut>(&mut self, visit: V) {
38        (**self).visit_mut(visit)
39    }
40}