Skip to main content

excelize_rs/xml/
pivot_cache.rs

1//! Pivot cache definition part (`xl/pivotCache/pivotCacheDefinitionN.xml`).
2//!
3//! Ported from Go `xmlPivotCache.go`.
4
5use serde::{Deserialize, Serialize};
6
7use super::common::{AttrValInt, XlsxExtLst};
8
9/// Directly maps the `pivotCacheDefinition` element.
10#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
11#[serde(rename = "pivotCacheDefinition")]
12pub struct XlsxPivotCacheDefinition {
13    #[serde(rename = "@xmlns", default, skip_serializing_if = "Option::is_none")]
14    pub xmlns: Option<String>,
15    #[serde(rename = "@xmlns:r", default, skip_serializing_if = "Option::is_none")]
16    pub xmlns_r: Option<String>,
17    #[serde(rename = "@r:id", default, skip_serializing_if = "Option::is_none")]
18    pub rid: Option<String>,
19    #[serde(rename = "@invalid", default, skip_serializing_if = "Option::is_none")]
20    pub invalid: Option<bool>,
21    #[serde(rename = "@saveData", default)]
22    pub save_data: bool,
23    #[serde(
24        rename = "@refreshOnLoad",
25        default,
26        skip_serializing_if = "Option::is_none"
27    )]
28    pub refresh_on_load: Option<bool>,
29    #[serde(
30        rename = "@optimizeMemory",
31        default,
32        skip_serializing_if = "Option::is_none"
33    )]
34    pub optimize_memory: Option<bool>,
35    #[serde(
36        rename = "@enableRefresh",
37        default,
38        skip_serializing_if = "Option::is_none"
39    )]
40    pub enable_refresh: Option<bool>,
41    #[serde(
42        rename = "@refreshedBy",
43        default,
44        skip_serializing_if = "Option::is_none"
45    )]
46    pub refreshed_by: Option<String>,
47    #[serde(
48        rename = "@refreshedDate",
49        default,
50        skip_serializing_if = "Option::is_none"
51    )]
52    pub refreshed_date: Option<f64>,
53    #[serde(
54        rename = "@refreshedDateIso",
55        default,
56        skip_serializing_if = "Option::is_none"
57    )]
58    pub refreshed_date_iso: Option<f64>,
59    #[serde(rename = "@backgroundQuery", default)]
60    pub background_query: bool,
61    #[serde(
62        rename = "@missingItemsLimit",
63        default,
64        skip_serializing_if = "Option::is_none"
65    )]
66    pub missing_items_limit: Option<i32>,
67    #[serde(
68        rename = "@createdVersion",
69        default,
70        skip_serializing_if = "Option::is_none"
71    )]
72    pub created_version: Option<i32>,
73    #[serde(
74        rename = "@refreshedVersion",
75        default,
76        skip_serializing_if = "Option::is_none"
77    )]
78    pub refreshed_version: Option<i32>,
79    #[serde(
80        rename = "@minRefreshableVersion",
81        default,
82        skip_serializing_if = "Option::is_none"
83    )]
84    pub min_refreshable_version: Option<i32>,
85    #[serde(
86        rename = "@recordCount",
87        default,
88        skip_serializing_if = "Option::is_none"
89    )]
90    pub record_count: Option<i32>,
91    #[serde(
92        rename = "@upgradeOnRefresh",
93        default,
94        skip_serializing_if = "Option::is_none"
95    )]
96    pub upgrade_on_refresh: Option<bool>,
97    #[serde(
98        rename = "@tupleCache",
99        default,
100        skip_serializing_if = "Option::is_none"
101    )]
102    pub tuple_cache_attr: Option<bool>,
103    #[serde(
104        rename = "@supportSubquery",
105        default,
106        skip_serializing_if = "Option::is_none"
107    )]
108    pub support_subquery: Option<bool>,
109    #[serde(
110        rename = "@supportAdvancedDrill",
111        default,
112        skip_serializing_if = "Option::is_none"
113    )]
114    pub support_advanced_drill: Option<bool>,
115    #[serde(
116        rename = "cacheSource",
117        default,
118        skip_serializing_if = "Option::is_none"
119    )]
120    pub cache_source: Option<XlsxCacheSource>,
121    #[serde(
122        rename = "cacheFields",
123        default,
124        skip_serializing_if = "Option::is_none"
125    )]
126    pub cache_fields: Option<XlsxCacheFields>,
127    #[serde(
128        rename = "cacheHierarchies",
129        default,
130        skip_serializing_if = "Option::is_none"
131    )]
132    pub cache_hierarchies: Option<XlsxCacheHierarchies>,
133    #[serde(rename = "kpis", default, skip_serializing_if = "Option::is_none")]
134    pub kpis: Option<XlsxKpis>,
135    #[serde(
136        rename = "tupleCache",
137        default,
138        skip_serializing_if = "Option::is_none"
139    )]
140    pub tuple_cache: Option<XlsxTupleCache>,
141    #[serde(
142        rename = "calculatedItems",
143        default,
144        skip_serializing_if = "Option::is_none"
145    )]
146    pub calculated_items: Option<XlsxCalculatedItems>,
147    #[serde(
148        rename = "calculatedMembers",
149        default,
150        skip_serializing_if = "Option::is_none"
151    )]
152    pub calculated_members: Option<XlsxCalculatedMembers>,
153    #[serde(
154        rename = "dimensions",
155        default,
156        skip_serializing_if = "Option::is_none"
157    )]
158    pub dimensions: Option<XlsxDimensions>,
159    #[serde(
160        rename = "measureGroups",
161        default,
162        skip_serializing_if = "Option::is_none"
163    )]
164    pub measure_groups: Option<XlsxMeasureGroups>,
165    #[serde(rename = "maps", default, skip_serializing_if = "Option::is_none")]
166    pub maps: Option<XlsxMaps>,
167    #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
168    pub ext_lst: Option<XlsxExtLst>,
169}
170
171/// Description of the data source whose data is stored in the pivot cache.
172#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
173pub struct XlsxCacheSource {
174    #[serde(rename = "@type", default)]
175    pub r#type: String,
176    #[serde(
177        rename = "@connectionId",
178        default,
179        skip_serializing_if = "Option::is_none"
180    )]
181    pub connection_id: Option<i32>,
182    #[serde(
183        rename = "worksheetSource",
184        default,
185        skip_serializing_if = "Option::is_none"
186    )]
187    pub worksheet_source: Option<XlsxWorksheetSource>,
188    #[serde(
189        rename = "consolidation",
190        default,
191        skip_serializing_if = "Option::is_none"
192    )]
193    pub consolidation: Option<XlsxConsolidation>,
194    #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
195    pub ext_lst: Option<XlsxExtLst>,
196}
197
198/// Location of the source of the data stored in the cache.
199#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
200pub struct XlsxWorksheetSource {
201    #[serde(rename = "@r:id", default, skip_serializing_if = "Option::is_none")]
202    pub rid: Option<String>,
203    #[serde(rename = "@ref", default, skip_serializing_if = "Option::is_none")]
204    pub r#ref: Option<String>,
205    #[serde(rename = "@name", default, skip_serializing_if = "Option::is_none")]
206    pub name: Option<String>,
207    #[serde(rename = "@sheet", default, skip_serializing_if = "Option::is_none")]
208    pub sheet: Option<String>,
209}
210
211/// Description of the PivotCache source using multiple consolidation ranges.
212#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
213pub struct XlsxConsolidation {}
214
215/// Collection of field definitions in the source data.
216#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
217pub struct XlsxCacheFields {
218    #[serde(rename = "@count", default)]
219    pub count: i32,
220    #[serde(rename = "cacheField", default)]
221    pub cache_field: Vec<XlsxCacheField>,
222}
223
224/// Single field in the PivotCache.
225#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
226pub struct XlsxCacheField {
227    #[serde(rename = "@name", default)]
228    pub name: String,
229    #[serde(rename = "@caption", default, skip_serializing_if = "Option::is_none")]
230    pub caption: Option<String>,
231    #[serde(
232        rename = "@propertyName",
233        default,
234        skip_serializing_if = "Option::is_none"
235    )]
236    pub property_name: Option<String>,
237    #[serde(
238        rename = "@serverField",
239        default,
240        skip_serializing_if = "Option::is_none"
241    )]
242    pub server_field: Option<bool>,
243    #[serde(
244        rename = "@uniqueList",
245        default,
246        skip_serializing_if = "Option::is_none"
247    )]
248    pub unique_list: Option<bool>,
249    #[serde(rename = "@numFmtId", default)]
250    pub num_fmt_id: i32,
251    #[serde(rename = "@formula", default, skip_serializing_if = "Option::is_none")]
252    pub formula: Option<String>,
253    #[serde(rename = "@sqlType", default, skip_serializing_if = "Option::is_none")]
254    pub sql_type: Option<i32>,
255    #[serde(
256        rename = "@hierarchy",
257        default,
258        skip_serializing_if = "Option::is_none"
259    )]
260    pub hierarchy: Option<i32>,
261    #[serde(rename = "@level", default, skip_serializing_if = "Option::is_none")]
262    pub level: Option<i32>,
263    #[serde(
264        rename = "@databaseField",
265        default,
266        skip_serializing_if = "Option::is_none"
267    )]
268    pub database_field: Option<bool>,
269    #[serde(
270        rename = "@mappingCount",
271        default,
272        skip_serializing_if = "Option::is_none"
273    )]
274    pub mapping_count: Option<i32>,
275    #[serde(
276        rename = "@memberPropertyField",
277        default,
278        skip_serializing_if = "Option::is_none"
279    )]
280    pub member_property_field: Option<bool>,
281    #[serde(
282        rename = "sharedItems",
283        default,
284        skip_serializing_if = "Option::is_none"
285    )]
286    pub shared_items: Option<XlsxSharedItems>,
287    #[serde(
288        rename = "fieldGroup",
289        default,
290        skip_serializing_if = "Option::is_none"
291    )]
292    pub field_group: Option<XlsxFieldGroup>,
293    #[serde(rename = "mpMap", default, skip_serializing_if = "Option::is_none")]
294    pub mp_map: Option<XlsxX>,
295    #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
296    pub ext_lst: Option<XlsxExtLst>,
297}
298
299/// Collection of unique items for a field in the PivotCacheDefinition.
300#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
301pub struct XlsxSharedItems {
302    #[serde(
303        rename = "@containsSemiMixedTypes",
304        default,
305        skip_serializing_if = "Option::is_none"
306    )]
307    pub contains_semi_mixed_types: Option<bool>,
308    #[serde(
309        rename = "@containsNonDate",
310        default,
311        skip_serializing_if = "Option::is_none"
312    )]
313    pub contains_non_date: Option<bool>,
314    #[serde(
315        rename = "@containsDate",
316        default,
317        skip_serializing_if = "Option::is_none"
318    )]
319    pub contains_date: Option<bool>,
320    #[serde(
321        rename = "@containsString",
322        default,
323        skip_serializing_if = "Option::is_none"
324    )]
325    pub contains_string: Option<bool>,
326    #[serde(
327        rename = "@containsBlank",
328        default,
329        skip_serializing_if = "Option::is_none"
330    )]
331    pub contains_blank: Option<bool>,
332    #[serde(
333        rename = "@containsMixedTypes",
334        default,
335        skip_serializing_if = "Option::is_none"
336    )]
337    pub contains_mixed_types: Option<bool>,
338    #[serde(
339        rename = "@containsNumber",
340        default,
341        skip_serializing_if = "Option::is_none"
342    )]
343    pub contains_number: Option<bool>,
344    #[serde(
345        rename = "@containsInteger",
346        default,
347        skip_serializing_if = "Option::is_none"
348    )]
349    pub contains_integer: Option<bool>,
350    #[serde(rename = "@minValue", default, skip_serializing_if = "Option::is_none")]
351    pub min_value: Option<f64>,
352    #[serde(rename = "@maxValue", default, skip_serializing_if = "Option::is_none")]
353    pub max_value: Option<f64>,
354    #[serde(rename = "@minDate", default, skip_serializing_if = "Option::is_none")]
355    pub min_date: Option<String>,
356    #[serde(rename = "@maxDate", default, skip_serializing_if = "Option::is_none")]
357    pub max_date: Option<String>,
358    #[serde(rename = "@count", default)]
359    pub count: i32,
360    #[serde(rename = "@longText", default, skip_serializing_if = "Option::is_none")]
361    pub long_text: Option<bool>,
362    #[serde(rename = "$value", default)]
363    pub items: Vec<XlsxSharedItem>,
364}
365
366/// A shared item in the pivot table cache field.
367#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
368#[serde(rename_all = "lowercase")]
369pub enum XlsxSharedItem {
370    M(XlsxSharedItemData),
371    N(XlsxSharedItemData),
372    B(XlsxSharedItemData),
373    E(XlsxSharedItemData),
374    S(XlsxSharedItemData),
375    D(XlsxSharedItemData),
376}
377
378/// Attributes and child elements shared by all shared item variants.
379#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
380pub struct XlsxSharedItemData {
381    #[serde(rename = "@v", default, skip_serializing_if = "Option::is_none")]
382    pub v: Option<String>,
383    #[serde(rename = "@xmlns", default, skip_serializing_if = "Option::is_none")]
384    pub xmlns: Option<String>,
385    #[serde(rename = "@u", default, skip_serializing_if = "Option::is_none")]
386    pub u: Option<bool>,
387    #[serde(rename = "@f", default, skip_serializing_if = "Option::is_none")]
388    pub f: Option<bool>,
389    #[serde(rename = "@c", default, skip_serializing_if = "Option::is_none")]
390    pub c: Option<String>,
391    #[serde(rename = "@cp", default, skip_serializing_if = "Option::is_none")]
392    pub cp: Option<i32>,
393    #[serde(rename = "@in", default, skip_serializing_if = "Option::is_none")]
394    pub r#in: Option<i32>,
395    #[serde(rename = "@bc", default, skip_serializing_if = "Option::is_none")]
396    pub bc: Option<String>,
397    #[serde(rename = "@fc", default, skip_serializing_if = "Option::is_none")]
398    pub fc: Option<String>,
399    #[serde(rename = "@i", default, skip_serializing_if = "Option::is_none")]
400    pub i: Option<bool>,
401    #[serde(rename = "@un", default, skip_serializing_if = "Option::is_none")]
402    pub un: Option<bool>,
403    #[serde(rename = "@st", default, skip_serializing_if = "Option::is_none")]
404    pub st: Option<bool>,
405    #[serde(rename = "@b", default, skip_serializing_if = "Option::is_none")]
406    pub b: Option<bool>,
407    #[serde(rename = "tpls", default, skip_serializing_if = "Option::is_none")]
408    pub tpls: Option<XlsxTuples>,
409    #[serde(rename = "x", default, skip_serializing_if = "Option::is_none")]
410    pub x: Option<AttrValInt>,
411}
412
413/// Members for the OLAP sheet data entry, also known as a tuple.
414#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
415pub struct XlsxTuples {}
416
417/// Collection of properties for a field group.
418#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
419pub struct XlsxFieldGroup {}
420
421/// Collection of OLAP hierarchies in the PivotCache.
422#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
423pub struct XlsxCacheHierarchies {}
424
425/// Collection of Key Performance Indicators defined on the OLAP server.
426#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
427pub struct XlsxKpis {}
428
429/// Cache of OLAP sheet data members, or tuples.
430#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
431pub struct XlsxTupleCache {}
432
433/// Collection of calculated items.
434#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
435pub struct XlsxCalculatedItems {}
436
437/// Collection of calculated members in an OLAP PivotTable.
438#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
439pub struct XlsxCalculatedMembers {}
440
441/// Collection of PivotTable OLAP dimensions.
442#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
443pub struct XlsxDimensions {}
444
445/// Collection of PivotTable OLAP measure groups.
446#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
447pub struct XlsxMeasureGroups {}
448
449/// PivotTable OLAP measure group - Dimension maps.
450#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
451pub struct XlsxMaps {}
452
453/// Index reference used by `mpMap` and pivot table items.
454#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
455pub struct XlsxX {}
456
457/// Extended properties of a pivot table cache definition (`x14:pivotCacheDefinition`).
458#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
459#[serde(rename = "x14:pivotCacheDefinition")]
460pub struct XlsxX14PivotCacheDefinition {
461    #[serde(rename = "@xmlns", default, skip_serializing_if = "Option::is_none")]
462    pub xmlns: Option<String>,
463    #[serde(rename = "@pivotCacheId", default)]
464    pub pivot_cache_id: i32,
465}
466
467/// Structure used to parse the `x14:pivotCacheDefinition` element without the prefix.
468#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
469#[serde(rename = "pivotCacheDefinition")]
470pub struct DecodeX14PivotCacheDefinition {
471    #[serde(rename = "@pivotCacheId", default)]
472    pub pivot_cache_id: i32,
473}