docx_reader/reader/
shape.rs1use std::io::Read;
2use std::str::FromStr;
3use xml::attribute::OwnedAttribute;
4use xml::reader::{EventReader, XmlEvent};
5
6use super::*;
7
8impl ElementReader for Shape {
9 fn read<R: Read>(
10 r: &mut EventReader<R>,
11 attrs: &[OwnedAttribute],
12 ) -> Result<Self, ReaderError> {
13 let mut shape = Shape::new();
14 if let Some(style) = read(attrs, "style") {
15 shape = shape.style(style);
16 }
17
18 loop {
19 let e = r.next();
20 match e {
21 Ok(XmlEvent::StartElement {
22 name, attributes, ..
23 }) => {
24 if let Ok(VXMLElement::ImageData) = VXMLElement::from_str(&name.local_name) {
25 if let Some(id) = read(&attributes, "id") {
26 shape = shape.image_data(id);
27 }
28 }
29 }
30 Ok(XmlEvent::EndElement { name, .. }) => {
31 let e = VXMLElement::from_str(&name.local_name).unwrap();
32 if e == VXMLElement::Shape {
33 return Ok(shape);
34 }
35 }
36 Err(_) => return Err(ReaderError::XMLReadError),
37 _ => {}
38 }
39 }
40 }
41}