Skip to main content

docx_rs/reader/
comments.rs

1use std::io::Read;
2use std::str::FromStr;
3
4use super::*;
5
6impl FromXML for Comments {
7    fn from_xml<R: Read>(reader: R) -> Result<Self, ReaderError> {
8        let mut r = EventReader::new(reader);
9        let mut comments: Vec<Comment> = vec![];
10        loop {
11            let e = r.next();
12            match e {
13                Ok(XmlEvent::StartElement {
14                    name, attributes, ..
15                }) => {
16                    let e = XMLElement::from_str(&name.local_name)
17                        .expect("should convert to XMLElement");
18                    if let XMLElement::Comment = e {
19                        comments.push(Comment::read(&mut r, &attributes)?);
20                    }
21                }
22                Ok(XmlEvent::EndElement { name, .. }) => {
23                    let e = XMLElement::from_str(&name.local_name).unwrap();
24                    if e == XMLElement::Comments {
25                        return Ok(Comments { comments });
26                    }
27                }
28                Ok(XmlEvent::EndDocument { .. }) => {
29                    return Ok(Comments { comments });
30                }
31                Err(_) => return Err(ReaderError::XMLReadError),
32                _ => {}
33            }
34        }
35    }
36}