umya_spreadsheet/structs/
cache_field.rs

1// cacheField
2use crate::reader::driver::*;
3use crate::structs::SharedItems;
4use crate::structs::StringValue;
5use crate::structs::UInt32Value;
6use crate::writer::driver::*;
7use quick_xml::events::{BytesStart, Event};
8use quick_xml::Reader;
9use quick_xml::Writer;
10use std::io::Cursor;
11
12#[derive(Clone, Default, Debug)]
13pub struct CacheField {
14    name: StringValue,
15    number_format_id: UInt32Value,
16    shared_items: SharedItems,
17}
18impl CacheField {
19    pub fn get_name(&self) -> &str {
20        self.name.get_value_str()
21    }
22
23    pub(crate) fn set_name<S: Into<String>>(&mut self, value: S) -> &mut Self {
24        self.name.set_value(value);
25        self
26    }
27
28    pub fn get_number_format_id(&self) -> &u32 {
29        self.number_format_id.get_value()
30    }
31
32    pub fn set_number_format_id(&mut self, value: u32) -> &mut Self {
33        self.number_format_id.set_value(value);
34        self
35    }
36
37    pub fn get_shared_items(&self) -> &SharedItems {
38        &self.shared_items
39    }
40
41    pub fn get_shared_items_mut(&mut self) -> &mut SharedItems {
42        &mut self.shared_items
43    }
44
45    pub fn set_shared_items(&mut self, value: SharedItems) -> &mut Self {
46        self.shared_items = value;
47        self
48    }
49
50    pub(crate) fn set_attributes<R: std::io::BufRead>(
51        &mut self,
52        reader: &mut Reader<R>,
53        e: &BytesStart,
54    ) {
55        set_string_from_xml!(self, e, name, "name");
56        set_string_from_xml!(self, e, number_format_id, "numFmtId");
57
58        xml_read_loop!(
59            reader,
60            Event::Empty(ref e) => {
61                if e.name().into_inner() == b"sharedItems" {
62                    let mut obj = SharedItems::default();
63                    obj.set_attributes(reader, e);
64                    self.set_shared_items(obj);
65                }
66            },
67            Event::End(ref e) => {
68                if e.name().into_inner() == b"cacheField" {
69                    return
70                }
71            },
72            Event::Eof => panic!("Error: Could not find {} end element", "cacheField")
73        );
74    }
75
76    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
77        // pivotField
78        write_start_tag(
79            writer,
80            "pivotField",
81            vec![
82                ("name", self.name.get_value_str()),
83                ("numFmtId", &self.number_format_id.get_value_string()),
84            ],
85            false,
86        );
87
88        // sharedItems
89        self.shared_items.write_to(writer);
90
91        write_end_tag(writer, "pivotField");
92    }
93}