docx_reader/reader/
rels.rs1use std::io::Read;
2use xml::reader::{EventReader, XmlEvent};
3
4use crate::reader::{FromXML, ReaderError};
5
6use super::*;
7
8impl FromXML for Rels {
9 fn from_xml<R: Read>(reader: R) -> Result<Self, ReaderError> {
10 let parser = EventReader::new(reader);
11 let mut s = Self::default();
12 let mut depth = 0;
13 for e in parser {
14 match e {
15 Ok(XmlEvent::StartElement { attributes, .. }) => {
16 if depth == 1 {
17 let mut rel_type = "".to_owned();
18 let mut target = "".to_owned();
19 for attr in attributes {
20 let name: &str = &attr.name.local_name;
21 if name == "Type" {
22 rel_type = attr.value.clone();
23 } else if name == "Target" {
24 target = attr.value.clone();
25 }
26 }
27 s = s.add_rel(rel_type, target);
28 }
29 depth += 1;
30 }
31 Ok(XmlEvent::EndElement { .. }) => {
32 depth -= 1;
33 }
34 Err(_) => return Err(ReaderError::XMLReadError),
35 _ => {}
36 }
37 }
38 Ok(s)
39 }
40}