ligen_utils/visitors/
mod.rs1pub use enumeration_visitor::*;
4pub use function_visitor::*;
5pub use module_visitor::*;
6pub use parameter_visitor::*;
7pub use library_visitor::*;
8pub use structure_visitor::*;
9pub use import_visitor::*;
10
11use crate::prelude::*;
12
13mod library_visitor;
14mod module_visitor;
15mod enumeration_visitor;
16mod structure_visitor;
17mod function_visitor;
18mod parameter_visitor;
19mod import_visitor;
20
21#[derive(Debug, Clone, Shrinkwrap)]
23#[shrinkwrap(mutable)]
24pub struct Visitor<Parent, Current> {
25 pub parent: Parent,
27 #[shrinkwrap(main_field)]
29 pub current: Current
30}
31
32impl<Parent, Current> Visitor<Parent, Current> {
33 pub fn new(parent: Parent, current: Current) -> Self {
35 Self { parent, current }
36 }
37
38 pub fn child<Child>(&self, current: Child) -> Visitor<Visitor<Parent, Current>, Child>
40 where Parent: Clone,
41 Current: Clone
42 {
43 let parent = self.clone();
44 Visitor { parent, current }
45 }
46}