From 2678ac1b978b15e028c25fbc74003419ba538ef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Fri, 26 Sep 2025 01:41:48 +0200 Subject: [PATCH] minidom: deduplicate from_reader methods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit skip-changelog: internal stuff Signed-off-by: Maxime “pep” Buquet --- minidom/src/element.rs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/minidom/src/element.rs b/minidom/src/element.rs index 63c281d6390229e5013b29e9a67da4ba412e9e50..45cfcdc7e845c4e6cbf33dd845613787152e51d8 100644 --- a/minidom/src/element.rs +++ b/minidom/src/element.rs @@ -339,9 +339,10 @@ impl Element { namespace.into().compare(self.namespace.as_ref()) } - /// Parse a document from a `io::BufRead`. - pub fn from_reader(reader: R) -> Result { - let mut tree_builder = TreeBuilder::new(); + fn from_reader_inner( + mut tree_builder: TreeBuilder, + reader: R, + ) -> Result { let mut driver = RawReader::new(reader); while let Some(event) = driver.read()? { tree_builder.process_event(event)?; @@ -353,6 +354,11 @@ impl Element { Err(Error::EndOfDocument) } + /// Parse a document from a `io::BufRead`. + pub fn from_reader(reader: R) -> Result { + Element::from_reader_inner(TreeBuilder::new(), reader) + } + /// 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 /// reader. @@ -360,16 +366,8 @@ impl Element { reader: R, prefixes: P, ) -> Result { - let mut tree_builder = TreeBuilder::new().with_prefixes_stack([prefixes.into()].into()); - let mut driver = RawReader::new(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) + let tree_builder = TreeBuilder::new().with_prefixes_stack([prefixes.into()].into()); + Element::from_reader_inner(tree_builder, reader) } /// Output a document to a `io::Writer`.