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