use crate::ast::node::Node;
pub use crate::Result;
pub enum Return<T> {
None,
Unmodified,
ProcessChildren,
Replace(Node<T>),
Unwrap,
Inline(Vec<Node<T>>),
InlineBoxed(Vec<Box<Node<T>>>),
UnwrapWithProcessedChildren,
InlineWithProcessedChildren(Vec<Node<T>>),
ReplaceChildren(Vec<Node<T>>),
}
pub trait Processor<T> {
fn on_node(&mut self, _node: &Node<T>) -> Result<Return<T>> {
Ok(Return::ProcessChildren)
}
fn on_end_of_block(&mut self, _node: &Node<T>) -> Result<Return<T>> {
Ok(Return::None)
}
fn on_processed_node(&mut self, _node: &Node<T>) -> Result<Return<T>> {
Ok(Return::Unmodified)
}
}