docx_rs/reader/
comments.rs

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