docx_reader/reader/
level_override.rs1use 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}