docx-rs/docx-core/src/reader/frame_property.rs

69 lines
2.2 KiB
Rust

use std::io::Read;
use std::str::FromStr;
use xml::attribute::OwnedAttribute;
use xml::reader::EventReader;
use super::*;
impl ElementReader for FrameProperty {
fn read<R: Read>(
_r: &mut EventReader<R>,
attrs: &[OwnedAttribute],
) -> Result<Self, ReaderError> {
let mut fp = FrameProperty::new();
for a in attrs {
let local_name = &a.name.local_name;
let e = XMLElement::from_str(local_name).unwrap();
match e {
XMLElement::Wrap => {
fp = fp.wrap(a.value.clone());
}
XMLElement::HeightRule => {
fp = fp.h_rule(a.value.clone());
}
XMLElement::HAnchor => {
fp = fp.h_anchor(a.value.clone());
}
XMLElement::VAnchor => {
fp = fp.v_anchor(a.value.clone());
}
XMLElement::HSpace => {
if let Ok(s) = f64::from_str(&a.value) {
fp = fp.h_space(s as i32)
}
}
XMLElement::VSpace => {
if let Ok(s) = f64::from_str(&a.value) {
fp = fp.v_space(s as i32)
}
}
XMLElement::XAlign => fp = fp.x_align(a.value.clone()),
XMLElement::YAlign => fp = fp.y_align(a.value.clone()),
XMLElement::W => {
if let Ok(s) = f64::from_str(&a.value) {
fp = fp.width(s as u32)
}
}
XMLElement::H => {
if let Ok(s) = f64::from_str(&a.value) {
fp = fp.height(s as u32)
}
}
XMLElement::X => {
if let Ok(s) = f64::from_str(&a.value) {
fp = fp.x(s as i32)
}
}
XMLElement::Y => {
if let Ok(s) = f64::from_str(&a.value) {
fp = fp.y(s as i32)
}
}
_ => {}
}
}
Ok(fp)
}
}