minidom: deduplicate from_reader methods

skip-changelog: internal stuff

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2025-09-26 01:41:48 +02:00 • committed by pep
commit 2678ac1b97

View file

@ -339,9 +339,10 @@ impl Element {
namespace.into().compare(self.namespace.as_ref()) namespace.into().compare(self.namespace.as_ref())
} }
/// Parse a document from a `io::BufRead`. fn from_reader_inner<R: io::BufRead>(
pub fn from_reader<R: io::BufRead>(reader: R) -> Result<Element> { mut tree_builder: TreeBuilder,
let mut tree_builder = TreeBuilder::new(); reader: R,
) -> Result<Element> {
let mut driver = RawReader::new(reader); let mut driver = RawReader::new(reader);
while let Some(event) = driver.read()? { while let Some(event) = driver.read()? {
tree_builder.process_event(event)?; tree_builder.process_event(event)?;
@ -353,6 +354,11 @@ impl Element {
Err(Error::EndOfDocument) Err(Error::EndOfDocument)
} }
/// Parse a document from a `io::BufRead`.
pub fn from_reader<R: io::BufRead>(reader: R) -> Result<Element> {
Element::from_reader_inner(TreeBuilder::new(), reader)
}
/// Parse a document from a `io::BufRead`, allowing Prefixes to be specified. Useful to provide /// Parse a document from a `io::BufRead`, allowing Prefixes to be specified. Useful to provide
/// knowledge of namespaces that would have been declared on parent elements not present in the /// knowledge of namespaces that would have been declared on parent elements not present in the
/// reader. /// reader.
@ -360,16 +366,8 @@ impl Element {
reader: R, reader: R,
prefixes: P, prefixes: P,
) -> Result<Element> { ) -> Result<Element> {
let mut tree_builder = TreeBuilder::new().with_prefixes_stack([prefixes.into()].into()); let tree_builder = TreeBuilder::new().with_prefixes_stack([prefixes.into()].into());
let mut driver = RawReader::new(reader); Element::from_reader_inner(tree_builder, reader)
while let Some(event) = driver.read()? {
tree_builder.process_event(event)?;
if let Some(root) = tree_builder.root.take() {
return Ok(root);
}
}
Err(Error::EndOfDocument)
} }
/// Output a document to a `io::Writer`. /// Output a document to a `io::Writer`.