Skip to main content

docx_rs/reader/
level_override.rs

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