docx_reader/reader/
web_settings.rs1use std::io::Read;
2use std::str::FromStr;
3use xml::reader::{EventReader, XmlEvent};
4
5use crate::reader::{FromXML, ReaderError};
6
7use super::*;
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}