docx_rs/reader/
frame_property.rs1use 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}