//! Contains low-level parsers of different XML pieces.
use crate::errors::SyntaxError;
mod element;
mod pi;
pub use element::ElementParser;
pub use pi::PiParser;
/// Used to decouple reading of data from data source and parsing XML structure from it.
/// This is a state preserved between getting chunks of bytes from the reader.
///
/// This trait is implemented for every parser that processes piece of XML grammar.
pub trait Parser {
/// Process new data and try to determine end of the parsed thing.
///
/// Returns position of the end of thing in `bytes` in case of successful search
/// and `None` otherwise.
///
/// # Parameters
/// - `bytes`: a slice to find the end of a thing.
/// Should contain text in ASCII-compatible encoding
fn feed(&mut self, bytes: &[u8]) -> Option<usize>;
/// Returns parse error produced by this parser in case of reaching end of
/// input without finding the end of a parsed thing.
fn eof_error() -> SyntaxError;
}