docx_reader/reader/
web_settings.rs

1use 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}