docx_reader/reader/
header.rs

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