1use serde::{Deserialize, Serialize};
6
7use super::common::XlsxInnerXml;
8
9#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
15#[serde(rename = "metadata")]
16pub struct XlsxMetadata {
17 #[serde(rename = "metadataTypes", default, skip_serializing_if = "Option::is_none")]
18 pub metadata_types: Option<XlsxInnerXml>,
19 #[serde(rename = "metadataStrings", default, skip_serializing_if = "Option::is_none")]
20 pub metadata_strings: Option<XlsxInnerXml>,
21 #[serde(rename = "mdxMetadata", default, skip_serializing_if = "Option::is_none")]
22 pub mdx_metadata: Option<XlsxInnerXml>,
23 #[serde(rename = "futureMetadata", default)]
24 pub future_metadata: Vec<XlsxFutureMetadata>,
25 #[serde(rename = "cellMetadata", default, skip_serializing_if = "Option::is_none")]
26 pub cell_metadata: Option<XlsxMetadataBlocks>,
27 #[serde(rename = "valueMetadata", default, skip_serializing_if = "Option::is_none")]
28 pub value_metadata: Option<XlsxMetadataBlocks>,
29 #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
30 pub ext_lst: Option<XlsxInnerXml>,
31}
32
33#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
36pub struct XlsxFutureMetadata {
37 #[serde(rename = "bk", default)]
38 pub bk: Vec<XlsxFutureMetadataBlock>,
39 #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
40 pub ext_lst: Option<XlsxInnerXml>,
41}
42
43#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
47pub struct XlsxFutureMetadataBlock {
48 #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
49 pub ext_lst: Option<XlsxInnerXml>,
50}
51
52#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
56pub struct XlsxMetadataBlocks {
57 #[serde(rename = "@count", default, skip_serializing_if = "Option::is_none")]
58 pub count: Option<i64>,
59 #[serde(rename = "bk", default)]
60 pub bk: Vec<XlsxMetadataBlock>,
61}
62
63#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
66pub struct XlsxMetadataBlock {
67 #[serde(rename = "rc", default)]
68 pub rc: Vec<XlsxMetadataRecord>,
69}
70
71#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
74pub struct XlsxMetadataRecord {
75 #[serde(rename = "@t")]
76 pub t: i64,
77 #[serde(rename = "@v")]
78 pub v: i64,
79}
80
81#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
83#[serde(rename = "rvData")]
84pub struct XlsxRichValueData {
85 #[serde(rename = "@count", default, skip_serializing_if = "Option::is_none")]
86 pub count: Option<i64>,
87 #[serde(rename = "rv", default)]
88 pub rv: Vec<XlsxRichValue>,
89 #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
90 pub ext_lst: Option<XlsxInnerXml>,
91}
92
93#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
96pub struct XlsxRichValue {
97 #[serde(rename = "@s")]
98 pub s: i64,
99 #[serde(rename = "v", default)]
100 pub v: Vec<String>,
101 #[serde(rename = "fb", default, skip_serializing_if = "Option::is_none")]
102 pub fb: Option<XlsxInnerXml>,
103}
104
105#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
108#[serde(rename = "richValueRels")]
109pub struct XlsxRichValueRels {
110 #[serde(rename = "rel", default)]
111 pub rels: Vec<XlsxRichValueRelRelationship>,
112 #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
113 pub ext_lst: Option<XlsxInnerXml>,
114}
115
116#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
119pub struct XlsxRichValueRelRelationship {
120 #[serde(rename = "@r:id", default, skip_serializing_if = "String::is_empty")]
121 pub id: String,
122 #[serde(rename = "@id", default, skip_serializing)]
125 pub legacy_id: String,
126}
127
128impl XlsxRichValueRelRelationship {
129 pub fn rel_id(&self) -> &str {
133 if self.id.is_empty() {
134 &self.legacy_id
135 } else {
136 &self.id
137 }
138 }
139}
140
141#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
145#[serde(rename = "rvStructures")]
146pub struct XlsxRichValueStructures {
147 #[serde(rename = "@count", default, skip_serializing_if = "Option::is_none")]
148 pub count: Option<i64>,
149 #[serde(rename = "s", default)]
150 pub s: Vec<XlsxRichValueStructure>,
151 #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
152 pub ext_lst: Option<XlsxInnerXml>,
153}
154
155#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
158pub struct XlsxRichValueStructure {
159 #[serde(rename = "@t")]
160 pub t: String,
161 #[serde(rename = "k", default)]
162 pub k: Vec<XlsxRichValueKey>,
163}
164
165#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
167pub struct XlsxRichValueKey {
168 #[serde(rename = "@n")]
169 pub n: String,
170 #[serde(rename = "@t", default, skip_serializing_if = "Option::is_none")]
171 pub t: Option<String>,
172}
173
174#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
177#[serde(rename = "webImagesSrd")]
178pub struct XlsxWebImagesSupportingRichData {
179 #[serde(rename = "webImageSrd", default)]
180 pub web_image_srd: Vec<XlsxWebImageSupportingRichData>,
181 #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
182 pub ext_lst: Option<XlsxInnerXml>,
183}
184
185#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
188pub struct XlsxWebImageSupportingRichData {
189 #[serde(rename = "address", default)]
190 pub address: XlsxExternalReference,
191 #[serde(rename = "moreImagesAddress", default)]
192 pub more_images_address: XlsxExternalReference,
193 #[serde(rename = "blip", default)]
194 pub blip: XlsxExternalReference,
195}
196
197#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
200pub struct XlsxExternalReference {
201 #[serde(rename = "@r:id", default, skip_serializing_if = "Option::is_none")]
202 pub r_id: Option<String>,
203}