docx_rs/reader/
frame_property.rs

1use std::io::Read;
2use std::str::FromStr;
3
4use xml::attribute::OwnedAttribute;
5use xml::reader::EventReader;
6
7use super::*;
8
9impl ElementReader for FrameProperty {
10    fn read<R: Read>(
11        _r: &mut EventReader<R>,
12        attrs: &[OwnedAttribute],
13    ) -> Result<Self, ReaderError> {
14        let mut fp = FrameProperty::new();
15        for a in attrs {
16            let local_name = &a.name.local_name;
17            let e = XMLElement::from_str(local_name).unwrap();
18            match e {
19                XMLElement::Wrap => {
20                    fp = fp.wrap(a.value.clone());
21                }
22                XMLElement::HeightRule => {
23                    fp = fp.h_rule(a.value.clone());
24                }
25                XMLElement::HAnchor => {
26                    fp = fp.h_anchor(a.value.clone());
27                }
28                XMLElement::VAnchor => {
29                    fp = fp.v_anchor(a.value.clone());
30                }
31                XMLElement::HSpace => {
32                    if let Ok(s) = f64::from_str(&a.value) {
33                        fp = fp.h_space(s as i32)
34                    }
35                }
36                XMLElement::VSpace => {
37                    if let Ok(s) = f64::from_str(&a.value) {
38                        fp = fp.v_space(s as i32)
39                    }
40                }
41                XMLElement::XAlign => fp = fp.x_align(a.value.clone()),
42                XMLElement::YAlign => fp = fp.y_align(a.value.clone()),
43                XMLElement::W => {
44                    if let Ok(s) = f64::from_str(&a.value) {
45                        fp = fp.width(s as u32)
46                    }
47                }
48                XMLElement::H => {
49                    if let Ok(s) = f64::from_str(&a.value) {
50                        fp = fp.height(s as u32)
51                    }
52                }
53                XMLElement::X => {
54                    if let Ok(s) = f64::from_str(&a.value) {
55                        fp = fp.x(s as i32)
56                    }
57                }
58                XMLElement::Y => {
59                    if let Ok(s) = f64::from_str(&a.value) {
60                        fp = fp.y(s as i32)
61                    }
62                }
63                _ => {}
64            }
65        }
66        Ok(fp)
67    }
68}