umya_spreadsheet/structs/
worksheet_source.rs

1// worksheetSource
2use crate::helper::const_str::*;
3use crate::reader::driver::*;
4use crate::structs::Address;
5use crate::writer::driver::*;
6use quick_xml::events::{BytesStart, Event};
7use quick_xml::Reader;
8use quick_xml::Writer;
9use std::io::Cursor;
10
11#[derive(Clone, Default, Debug)]
12pub struct WorksheetSource {
13    address: Address,
14}
15
16impl WorksheetSource {
17    pub fn get_address(&self) -> &Address {
18        &self.address
19    }
20
21    pub fn get_address_mut(&mut self) -> &mut Address {
22        &mut self.address
23    }
24
25    pub fn set_address(&mut self, value: Address) -> &mut Self {
26        self.address = value;
27        self
28    }
29
30    pub(crate) fn set_attributes<R: std::io::BufRead>(
31        &mut self,
32        _reader: &mut Reader<R>,
33        e: &BytesStart,
34    ) {
35        let mut address = Address::default();
36        if let Some(v) = get_attribute(e, b"ref") {
37            address.get_range_mut().set_range(v);
38        }
39        if let Some(v) = get_attribute(e, b"sheet") {
40            address.set_sheet_name(v);
41        }
42        self.set_address(address);
43    }
44
45    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
46        // worksheetSource
47        let mut attributes: Vec<(&str, &str)> = Vec::new();
48        let ref_str = self.address.get_range().get_range();
49        attributes.push(("ref", &ref_str));
50        if self.address.get_sheet_name() != "" {
51            attributes.push(("sheet", self.address.get_sheet_name()));
52        }
53        write_start_tag(writer, "worksheetSource", attributes, true);
54    }
55}