docx_rs/reader/
paragraph_property_change.rs

1use std::io::Read;
2use std::str::FromStr;
3
4use xml::attribute::OwnedAttribute;
5use xml::reader::{EventReader, XmlEvent};
6
7use super::*;
8
9impl ElementReader for ParagraphPropertyChange {
10    fn read<R: Read>(
11        r: &mut EventReader<R>,
12        attrs: &[OwnedAttribute],
13    ) -> Result<Self, ReaderError> {
14        let mut pc = ParagraphPropertyChange::new();
15        for attr in attrs {
16            let local_name = &attr.name.local_name;
17            if local_name == "author" {
18                pc = pc.author(&attr.value);
19            } else if local_name == "date" {
20                pc = pc.date(&attr.value);
21            }
22        }
23        loop {
24            let e = r.next();
25            match e {
26                Ok(XmlEvent::StartElement { name, .. }) => {
27                    let e = XMLElement::from_str(&name.local_name)
28                        .expect("should convert to XMLElement");
29                    if let XMLElement::ParagraphProperty = e {
30                        if let Ok(p) = ParagraphProperty::read(r, attrs) {
31                            pc = pc.property(p);
32                        }
33                    }
34                }
35                Ok(XmlEvent::EndElement { name, .. }) => {
36                    let e = XMLElement::from_str(&name.local_name).unwrap();
37                    if e == XMLElement::ParagraphPropertyChange {
38                        return Ok(pc);
39                    }
40                }
41                Err(_) => return Err(ReaderError::XMLReadError),
42                _ => {}
43            }
44        }
45    }
46}