mod helpers;
mod multi;
mod reader;
mod single;
use super::context::TransformContext;
use super::editable::EditableNode;
use super::xpath_analyze::StreamableXPath;
pub use helpers::{ElementInfo, PathTracker};
pub use multi::{
process_for_each_multi, process_for_each_multi_with_context, process_streaming_multi,
process_streaming_multi_with_context,
};
pub use reader::{
process_for_each_from_reader, process_for_each_multi_from_reader,
process_streaming_from_reader, process_streaming_multi_from_reader,
};
pub use single::{
process_for_each, process_for_each_with_context, process_streaming,
process_streaming_with_context,
};
pub type MultiHandler<'a> = (&'a StreamableXPath, &'a mut dyn FnMut(&mut EditableNode));
pub type MultiHandlerWithContext<'a> = (
&'a StreamableXPath,
&'a mut dyn FnMut(&mut EditableNode, &TransformContext),
);
pub type MultiTransformHandler<'a> = (&'a StreamableXPath, &'a mut dyn FnMut(&mut EditableNode));
pub type MultiTransformHandlerWithContext<'a> = (
&'a StreamableXPath,
&'a mut dyn FnMut(&mut EditableNode, &TransformContext),
);
pub(crate) struct HandlerState<'a> {
pub(crate) xpath: &'a StreamableXPath,
pub(crate) builder: Option<super::editable::EditableNodeBuilder>,
pub(crate) match_context: Option<TransformContext>,
}
pub(crate) struct TransformHandlerState<'a> {
pub(crate) xpath: &'a StreamableXPath,
pub(crate) builder: Option<super::editable::EditableNodeBuilder>,
pub(crate) match_context: Option<TransformContext>,
pub(crate) match_start_offset: usize,
}
#[cfg(test)]
mod tests;