docx_reader/reader/
header.rs1use std::io::Read;
2use std::str::FromStr;
3use xml::reader::{EventReader, XmlEvent};
4
5use crate::reader::*;
6
7use super::{Paragraph, Table};
8
9impl FromXML for Header {
10 fn from_xml<R: Read>(reader: R) -> Result<Self, ReaderError> {
11 let mut parser = EventReader::new(reader);
12 let mut header = Self::default();
13 loop {
14 let e = parser.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::Paragraph => {
22 let p = Paragraph::read(&mut parser, &attributes)?;
23 header = header.add_paragraph(p);
24 continue;
25 }
26 XMLElement::Table => {
27 let t = Table::read(&mut parser, &attributes)?;
28 header = header.add_table(t);
29 continue;
30 }
31 _ => {}
32 }
33 }
34 Ok(XmlEvent::EndDocument) => break,
35 Err(_) => return Err(ReaderError::XMLReadError),
36 _ => {}
37 }
38 }
39 Ok(header)
40 }
41}