umya_spreadsheet/structs/
pivot_cache_definition.rs

1// pivotCacheDefinition
2use crate::helper::const_str::*;
3use crate::reader::driver::*;
4use crate::structs::ByteValue;
5use crate::structs::CacheFields;
6use crate::structs::CacheSource;
7use crate::structs::DoubleValue;
8use crate::structs::StringValue;
9use crate::structs::UInt32Value;
10use crate::writer::driver::*;
11use quick_xml::events::{BytesStart, Event};
12use quick_xml::Reader;
13use quick_xml::Writer;
14use std::io::Cursor;
15
16#[derive(Clone, Default, Debug)]
17pub struct PivotCacheDefinition {
18    id: StringValue,
19    refreshed_by: StringValue,
20    refreshed_date: DoubleValue,
21    created_version: ByteValue,
22    refreshed_version: ByteValue,
23    min_refreshable_version: ByteValue,
24    record_count: UInt32Value,
25    cache_source: CacheSource,
26    cache_fields: CacheFields,
27}
28
29impl PivotCacheDefinition {
30    #[inline]
31    pub fn get_id(&self) -> &str {
32        self.id.get_value_str()
33    }
34
35    #[inline]
36    pub fn set_id<S: Into<String>>(&mut self, value: S) -> &mut Self {
37        self.id.set_value(value);
38        self
39    }
40
41    #[inline]
42    pub fn get_refreshed_by(&self) -> &str {
43        self.refreshed_by.get_value_str()
44    }
45
46    #[inline]
47    pub fn set_refreshed_by<S: Into<String>>(&mut self, value: S) -> &mut Self {
48        self.refreshed_by.set_value(value);
49        self
50    }
51
52    #[inline]
53    pub fn get_refreshed_date(&self) -> &f64 {
54        self.refreshed_date.get_value()
55    }
56
57    #[inline]
58    pub fn set_refreshed_date(&mut self, value: f64) -> &mut Self {
59        self.refreshed_date.set_value(value);
60        self
61    }
62
63    #[inline]
64    pub fn get_created_version(&self) -> &u8 {
65        self.created_version.get_value()
66    }
67
68    #[inline]
69    pub fn set_created_version(&mut self, value: u8) -> &mut Self {
70        self.created_version.set_value(value);
71        self
72    }
73
74    #[inline]
75    pub fn get_refreshed_version(&self) -> &u8 {
76        self.refreshed_version.get_value()
77    }
78
79    #[inline]
80    pub fn set_refreshed_version(&mut self, value: u8) -> &mut Self {
81        self.refreshed_version.set_value(value);
82        self
83    }
84
85    #[inline]
86    pub fn get_min_refreshable_version(&self) -> &u8 {
87        self.min_refreshable_version.get_value()
88    }
89
90    #[inline]
91    pub fn set_min_refreshable_version(&mut self, value: u8) -> &mut Self {
92        self.min_refreshable_version.set_value(value);
93        self
94    }
95
96    #[inline]
97    pub fn get_record_count(&self) -> &u32 {
98        self.record_count.get_value()
99    }
100
101    #[inline]
102    pub fn set_record_count(&mut self, value: u32) -> &mut Self {
103        self.record_count.set_value(value);
104        self
105    }
106
107    #[inline]
108    pub fn get_cache_source(&self) -> &CacheSource {
109        &self.cache_source
110    }
111
112    #[inline]
113    pub fn get_cache_source_mut(&mut self) -> &mut CacheSource {
114        &mut self.cache_source
115    }
116
117    #[inline]
118    pub fn set_cache_source(&mut self, value: CacheSource) -> &mut Self {
119        self.cache_source = value;
120        self
121    }
122
123    #[inline]
124    pub fn get_cache_fields(&self) -> &CacheFields {
125        &self.cache_fields
126    }
127
128    #[inline]
129    pub fn get_cache_fields_mut(&mut self) -> &mut CacheFields {
130        &mut self.cache_fields
131    }
132
133    #[inline]
134    pub fn set_cache_fields(&mut self, value: CacheFields) -> &mut Self {
135        self.cache_fields = value;
136        self
137    }
138
139    #[inline]
140    pub(crate) fn set_attributes<R: std::io::BufRead>(
141        &mut self,
142        reader: &mut Reader<R>,
143        e: &BytesStart,
144    ) {
145        set_string_from_xml!(self, e, id, "r:id");
146        set_string_from_xml!(self, e, refreshed_by, "refreshedBy");
147        set_string_from_xml!(self, e, refreshed_date, "refreshedDate");
148        set_string_from_xml!(self, e, created_version, "createdVersion");
149        set_string_from_xml!(self, e, refreshed_version, "refreshedVersion");
150        set_string_from_xml!(self, e, min_refreshable_version, "minRefreshableVersion");
151        set_string_from_xml!(self, e, record_count, "recordCount");
152
153        xml_read_loop!(
154            reader,
155            Event::Empty(ref e) => {
156                if e.name().into_inner() == b"cacheSource" {
157                    let mut obj = CacheSource::default();
158                    obj.set_attributes(reader, e, true);
159                    self.set_cache_source(obj);
160                }
161            },
162            Event::Start(ref e) => {
163                if e.name().into_inner() == b"cacheSource" {
164                    let mut obj = CacheSource::default();
165                    obj.set_attributes(reader, e, false);
166                    self.set_cache_source(obj);
167                }
168                if e.name().into_inner() == b"cacheFields" {
169                    let mut obj = CacheFields::default();
170                    obj.set_attributes(reader, e);
171                    self.set_cache_fields(obj);
172                }
173            },
174            Event::End(ref e) => {
175                if e.name().into_inner() == b"pivotTableDefinition" {
176                    return
177                }
178            },
179            Event::Eof => panic!("Error: Could not find {} end element", "pivotTableDefinition")
180        );
181    }
182
183    #[inline]
184    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
185        // pivotTableDefinition
186        let mut attributes: Vec<(&str, &str)> = Vec::new();
187        attributes.push(("xmlns", SHEET_MAIN_NS));
188        attributes.push(("xmlns:r", REL_OFC_NS));
189        attributes.push(("xmlns:mc", MC_NS));
190        attributes.push(("mc:Ignorable", "xr"));
191        attributes.push(("xmlns:xr", SHEET_MS_REVISION_NS));
192
193        if self.id.has_value() {
194            attributes.push(("r:id", self.id.get_value_str()));
195        }
196        if self.refreshed_by.has_value() {
197            attributes.push(("refreshedBy", self.refreshed_by.get_value_str()));
198        }
199        let refreshed_date_str = self.refreshed_date.get_value_string();
200        if self.refreshed_date.has_value() {
201            attributes.push(("refreshedDate", &refreshed_date_str));
202        }
203        let created_version_str = self.created_version.get_value_string();
204        if self.created_version.has_value() {
205            attributes.push(("createdVersion", &created_version_str));
206        }
207        let refreshed_version_str = self.refreshed_version.get_value_string();
208        if self.refreshed_version.has_value() {
209            attributes.push(("refreshedVersion", &refreshed_version_str));
210        }
211        let min_refreshable_version_str = self.min_refreshable_version.get_value_string();
212        if self.min_refreshable_version.has_value() {
213            attributes.push(("minRefreshableVersion", &min_refreshable_version_str));
214        }
215        let record_count_str = self.record_count.get_value_string();
216        if self.record_count.has_value() {
217            attributes.push(("recordCount", &record_count_str));
218        }
219
220        write_start_tag(writer, "pivotTableDefinition", attributes, false);
221
222        // cacheSource
223        self.cache_source.write_to(writer);
224
225        // cacheFields
226        self.cache_fields.write_to(writer);
227
228        write_end_tag(writer, "pivotTableDefinition");
229    }
230}