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