Skip to main content

docx_rs/reader/
web_settings.rs

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