umya_spreadsheet/structs/
pivot_cache_definition.rs1use 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 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 self.cache_source.write_to(writer);
224
225 self.cache_fields.write_to(writer);
227
228 write_end_tag(writer, "pivotTableDefinition");
229 }
230}