umya_spreadsheet/structs/drawing/
stretch.rs

1// a:stretch
2use super::fill_rectangle::FillRectangle;
3use crate::reader::driver::*;
4use crate::writer::driver::*;
5use quick_xml::events::{BytesStart, Event};
6use quick_xml::Reader;
7use quick_xml::Writer;
8use std::io::Cursor;
9
10#[derive(Clone, Default, Debug)]
11pub struct Stretch {
12    fill_rectangle: Option<Box<FillRectangle>>,
13}
14
15impl Stretch {
16    #[inline]
17    pub fn get_fill_rectangle(&self) -> Option<&FillRectangle> {
18        self.fill_rectangle.as_deref()
19    }
20
21    #[inline]
22    pub fn get_fill_rectangle_mut(&mut self) -> Option<&mut FillRectangle> {
23        self.fill_rectangle.as_deref_mut()
24    }
25
26    #[inline]
27    pub fn set_fill_rectangle(&mut self, value: FillRectangle) {
28        self.fill_rectangle = Some(Box::new(value));
29    }
30
31    pub(crate) fn set_attributes<R: std::io::BufRead>(
32        &mut self,
33        reader: &mut Reader<R>,
34        _e: &BytesStart,
35    ) {
36        xml_read_loop!(
37            reader,
38            Event::Empty(ref e) => {
39                if e.name().into_inner() == b"a:fillRect" {
40                    let mut fill_rectangle = FillRectangle::default();
41                    fill_rectangle.set_attributes(reader, e);
42                    self.set_fill_rectangle(fill_rectangle);
43                }
44            },
45            Event::End(ref e) => {
46                if e.name().into_inner() == b"a:stretch" {
47                    return;
48                }
49            },
50            Event::Eof => panic!("Error: Could not find {} end element", "a:stretch")
51        );
52    }
53
54    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
55        // a:stretch
56        match &self.fill_rectangle {
57            Some(v) => {
58                write_start_tag(writer, "a:stretch", vec![], false);
59                v.write_to(writer);
60                write_end_tag(writer, "a:stretch");
61            }
62            None => {
63                write_start_tag(writer, "a:stretch", vec![], true);
64            }
65        }
66    }
67}