docx_reader/reader/
level_override.rs

1use std::io::Read;
2use std::str::FromStr;
3use xml::attribute::OwnedAttribute;
4use xml::reader::{EventReader, XmlEvent};
5
6use super::*;
7
8impl ElementReader for LevelOverride {
9	fn read<R: Read>(
10		r: &mut EventReader<R>,
11		attrs: &[OwnedAttribute],
12	) -> Result<Self, ReaderError> {
13		if let Ok(level) = usize::from_str(&attrs[0].value) {
14			let mut o = LevelOverride::new(level);
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						match e {
23							XMLElement::StartOverride => {
24								if let Ok(val) = usize::from_str(&attributes[0].value) {
25									o = o.start(val);
26								}
27								continue;
28							}
29							XMLElement::Level => {
30								if let Ok(lvl) = Level::read(r, &attributes) {
31									o = o.level(lvl);
32								}
33								continue;
34							}
35							_ => {}
36						}
37					}
38					Ok(XmlEvent::EndElement { name, .. }) => {
39						let e = XMLElement::from_str(&name.local_name).unwrap();
40						if e == XMLElement::LvlOverride {
41							return Ok(o);
42						}
43					}
44					Err(_) => return Err(ReaderError::XMLReadError),
45					_ => {}
46				}
47			}
48		} else {
49			Err(ReaderError::XMLReadError)
50		}
51	}
52}