Skip to main content

docx_rs/reader/
shape.rs

1#![allow(clippy::single_match)]
2
3use std::io::Read;
4use std::str::FromStr;
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}