docx_rs/reader/
doc_defaults.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 DocDefaults {
10    fn read<R: Read>(
11        r: &mut EventReader<R>,
12        _attrs: &[OwnedAttribute],
13    ) -> Result<Self, ReaderError> {
14        let mut doc_defaults = DocDefaults::new();
15        loop {
16            let e = r.next();
17            match e {
18                Ok(XmlEvent::StartElement {
19                    attributes, name, ..
20                }) => {
21                    let e = XMLElement::from_str(&name.local_name).unwrap();
22                    if let XMLElement::RunProperty = e {
23                        let run_pr = RunProperty::read(r, &attributes)?;
24                        doc_defaults = doc_defaults.run_property(run_pr);
25                        continue;
26                    }
27                    if let XMLElement::ParagraphProperty = e {
28                        let paragraph_pr = ParagraphProperty::read(r, &attributes)?;
29                        doc_defaults = doc_defaults.paragraph_property(paragraph_pr);
30                        continue;
31                    }
32                }
33                Ok(XmlEvent::EndElement { name, .. }) => {
34                    let e = XMLElement::from_str(&name.local_name).unwrap();
35                    if let XMLElement::DocDefaults = e {
36                        return Ok(doc_defaults);
37                    }
38                }
39                Err(_) => return Err(ReaderError::XMLReadError),
40                _ => {}
41            }
42        }
43    }
44}