Skip to main content

docx_rs/reader/
web_settings.rs

1use std::io::Read;
2use xml::reader::{EventReader, XmlEvent};
3
4use super::*;
5use crate::reader::{FromXML, ReaderError};
6
7use std::str::FromStr;
8
9impl FromXML for WebSettings {
10    fn from_xml<R: Read>(reader: R) -> Result<Self, ReaderError> {
11        let mut parser = EventReader::new(reader);
12        let mut settings = Self::default();
13        loop {
14            let e = parser.next();
15            match e {
16                Ok(XmlEvent::StartElement {
17                    attributes, name, ..
18                }) => {
19                    let e = XMLElement::from_str(&name.local_name).unwrap();
20                    if let XMLElement::Div = e {
21                        if let Ok(div) = Div::read(&mut parser, &attributes) {
22                            settings.divs.push(div);
23                        }
24                    }
25                }
26                Ok(XmlEvent::EndElement { name, .. }) => {
27                    let e = XMLElement::from_str(&name.local_name).unwrap();
28                    if let XMLElement::WebSettings = e {
29                        break;
30                    }
31                }
32                Ok(XmlEvent::EndDocument { .. }) => break,
33                Err(_) => return Err(ReaderError::XMLReadError),
34                _ => {}
35            }
36        }
37        Ok(settings)
38    }
39}