minidom: deduplicate from_reader methods

Maxime “pep” Buquet created

skip-changelog: internal stuff

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>

Change summary

minidom/src/element.rs | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)

Detailed changes

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<R: io::BufRead>(reader: R) -> Result<Element> {
-        let mut tree_builder = TreeBuilder::new();
+    fn from_reader_inner<R: io::BufRead>(
+        mut tree_builder: TreeBuilder,
+        reader: R,
+    ) -> Result<Element> {
         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<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
     /// 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<Element> {
-        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`.