xml_data/parser/
extensions.rs

1use crate::{
2	parser::{
3		ElementParser,
4		ElementState,
5	},
6	Result,
7	errors,
8};
9
10/// extend `ElementParser` trait with convenience methods
11pub trait ElementParserExt: ElementParser {
12	/// Full parsing of an element (fails hard if the tag doesn't work out)
13	///
14	/// If you need to handle `parse_element_start` failures (e.g. by trying a different state) you
15	/// can't use this method.
16	fn parse_element<E: ElementState>(self, tag: &str) -> Result<E::Output> {
17		let mut state = match E::parse_element_start(tag) {
18			Some(s) => s,
19			None => return Err(errors::unexpected_element(tag)),
20		};
21		self.parse_element_state(&mut state)?;
22		state.parse_element_finish()
23	}
24}
25
26impl<P: ElementParser> ElementParserExt for P {
27}