pub use enumeration_visitor::*;
pub use function_visitor::*;
pub use module_visitor::*;
pub use parameter_visitor::*;
pub use library_visitor::*;
pub use structure_visitor::*;
pub use import_visitor::*;
use crate::prelude::*;
mod library_visitor;
mod module_visitor;
mod enumeration_visitor;
mod structure_visitor;
mod function_visitor;
mod parameter_visitor;
mod import_visitor;
#[derive(Debug, Clone, Shrinkwrap)]
#[shrinkwrap(mutable)]
pub struct Visitor<Parent, Current> {
pub parent: Parent,
#[shrinkwrap(main_field)]
pub current: Current
}
impl<Parent, Current> Visitor<Parent, Current> {
pub fn new(parent: Parent, current: Current) -> Self {
Self { parent, current }
}
pub fn child<Child>(&self, current: Child) -> Visitor<Visitor<Parent, Current>, Child>
where Parent: Clone,
Current: Clone
{
let parent = self.clone();
Visitor { parent, current }
}
}