1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
11#[serde(rename = "Properties")]
12pub struct XlsxCustomProperties {
13 #[serde(rename = "@xmlns", default)]
14 pub xmlns: Option<String>,
15 #[serde(rename = "@xmlns:vt", default)]
16 pub vt: Option<String>,
17 #[serde(rename = "property", default)]
18 pub property: Vec<XlsxProperty>,
19}
20
21#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
26pub struct XlsxProperty {
27 #[serde(rename = "@fmtid", default)]
28 pub fmt_id: String,
29 #[serde(rename = "@pid", default)]
30 pub pid: i64,
31 #[serde(rename = "@name", default, skip_serializing_if = "Option::is_none")]
32 pub name: Option<String>,
33 #[serde(
34 rename = "@linkTarget",
35 default,
36 skip_serializing_if = "Option::is_none"
37 )]
38 pub link_target: Option<String>,
39 #[serde(rename = "vt:vector", default, skip_serializing_if = "Option::is_none")]
40 pub vector: Option<String>,
41 #[serde(rename = "vt:array", default, skip_serializing_if = "Option::is_none")]
42 pub array: Option<String>,
43 #[serde(rename = "vt:blob", default, skip_serializing_if = "Option::is_none")]
44 pub blob: Option<String>,
45 #[serde(rename = "vt:oblob", default, skip_serializing_if = "Option::is_none")]
46 pub oblob: Option<String>,
47 #[serde(rename = "vt:empty", default, skip_serializing_if = "Option::is_none")]
48 pub empty: Option<String>,
49 #[serde(rename = "vt:null", default, skip_serializing_if = "Option::is_none")]
50 pub null: Option<String>,
51 #[serde(rename = "vt:i1", default, skip_serializing_if = "Option::is_none")]
52 pub i1: Option<i8>,
53 #[serde(rename = "vt:i2", default, skip_serializing_if = "Option::is_none")]
54 pub i2: Option<i16>,
55 #[serde(rename = "vt:i4", default, skip_serializing_if = "Option::is_none")]
56 pub i4: Option<i32>,
57 #[serde(rename = "vt:i8", default, skip_serializing_if = "Option::is_none")]
58 pub i8: Option<i64>,
59 #[serde(rename = "vt:int", default, skip_serializing_if = "Option::is_none")]
60 pub int: Option<i64>,
61 #[serde(rename = "vt:ui1", default, skip_serializing_if = "Option::is_none")]
62 pub ui1: Option<u8>,
63 #[serde(rename = "vt:ui2", default, skip_serializing_if = "Option::is_none")]
64 pub ui2: Option<u16>,
65 #[serde(rename = "vt:ui4", default, skip_serializing_if = "Option::is_none")]
66 pub ui4: Option<u32>,
67 #[serde(rename = "vt:ui8", default, skip_serializing_if = "Option::is_none")]
68 pub ui8: Option<u64>,
69 #[serde(rename = "vt:uint", default, skip_serializing_if = "Option::is_none")]
70 pub uint: Option<u64>,
71 #[serde(rename = "vt:r4", default, skip_serializing_if = "Option::is_none")]
72 pub r4: Option<f32>,
73 #[serde(rename = "vt:r8", default, skip_serializing_if = "Option::is_none")]
74 pub r8: Option<f64>,
75 #[serde(
76 rename = "vt:decimal",
77 default,
78 skip_serializing_if = "Option::is_none"
79 )]
80 pub decimal: Option<String>,
81 #[serde(rename = "vt:lpstr", default, skip_serializing_if = "Option::is_none")]
82 pub lpstr: Option<String>,
83 #[serde(rename = "vt:lpwstr", default, skip_serializing_if = "Option::is_none")]
84 pub lpwstr: Option<String>,
85 #[serde(rename = "vt:bstr", default, skip_serializing_if = "Option::is_none")]
86 pub bstr: Option<String>,
87 #[serde(rename = "vt:date", default, skip_serializing_if = "Option::is_none")]
88 pub date: Option<String>,
89 #[serde(
90 rename = "vt:filetime",
91 default,
92 skip_serializing_if = "Option::is_none"
93 )]
94 pub file_time: Option<String>,
95 #[serde(rename = "vt:bool", default, skip_serializing_if = "Option::is_none")]
96 pub r#bool: Option<bool>,
97 #[serde(rename = "vt:cy", default, skip_serializing_if = "Option::is_none")]
98 pub cy: Option<String>,
99 #[serde(rename = "vt:error", default, skip_serializing_if = "Option::is_none")]
100 pub error: Option<String>,
101 #[serde(rename = "vt:stream", default, skip_serializing_if = "Option::is_none")]
102 pub stream: Option<String>,
103 #[serde(
104 rename = "vt:ostream",
105 default,
106 skip_serializing_if = "Option::is_none"
107 )]
108 pub ostream: Option<String>,
109 #[serde(
110 rename = "vt:storage",
111 default,
112 skip_serializing_if = "Option::is_none"
113 )]
114 pub storage: Option<String>,
115 #[serde(
116 rename = "vt:ostorage",
117 default,
118 skip_serializing_if = "Option::is_none"
119 )]
120 pub ostorage: Option<String>,
121 #[serde(
122 rename = "vt:vstream",
123 default,
124 skip_serializing_if = "Option::is_none"
125 )]
126 pub vstream: Option<String>,
127 #[serde(rename = "vt:clsid", default, skip_serializing_if = "Option::is_none")]
128 pub cls_id: Option<String>,
129}
130
131#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
133#[serde(rename = "Properties")]
134pub struct DecodeCustomProperties {
135 #[serde(rename = "@xmlns", default)]
136 pub xmlns: Option<String>,
137 #[serde(rename = "@xmlns:vt", default)]
138 pub vt: Option<String>,
139 #[serde(rename = "property", default)]
140 pub property: Vec<DecodeProperty>,
141}
142
143#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
145pub struct DecodeProperty {
146 #[serde(rename = "@fmtid", default)]
147 pub fmt_id: String,
148 #[serde(rename = "@pid", default)]
149 pub pid: i64,
150 #[serde(rename = "@name", default)]
151 pub name: Option<String>,
152 #[serde(rename = "@linkTarget", default)]
153 pub link_target: Option<String>,
154 #[serde(rename = "vector", default)]
155 pub vector: Option<String>,
156 #[serde(rename = "array", default)]
157 pub array: Option<String>,
158 #[serde(rename = "blob", default)]
159 pub blob: Option<String>,
160 #[serde(rename = "oblob", default)]
161 pub oblob: Option<String>,
162 #[serde(rename = "empty", default)]
163 pub empty: Option<String>,
164 #[serde(rename = "null", default)]
165 pub null: Option<String>,
166 #[serde(rename = "i1", default)]
167 pub i1: Option<i8>,
168 #[serde(rename = "i2", default)]
169 pub i2: Option<i16>,
170 #[serde(rename = "i4", default)]
171 pub i4: Option<i32>,
172 #[serde(rename = "i8", default)]
173 pub i8: Option<i64>,
174 #[serde(rename = "int", default)]
175 pub int: Option<i64>,
176 #[serde(rename = "ui1", default)]
177 pub ui1: Option<u8>,
178 #[serde(rename = "ui2", default)]
179 pub ui2: Option<u16>,
180 #[serde(rename = "ui4", default)]
181 pub ui4: Option<u32>,
182 #[serde(rename = "ui8", default)]
183 pub ui8: Option<u64>,
184 #[serde(rename = "uint", default)]
185 pub uint: Option<u64>,
186 #[serde(rename = "r4", default)]
187 pub r4: Option<f32>,
188 #[serde(rename = "r8", default)]
189 pub r8: Option<f64>,
190 #[serde(rename = "decimal", default)]
191 pub decimal: Option<String>,
192 #[serde(rename = "lpstr", default)]
193 pub lpstr: Option<String>,
194 #[serde(rename = "lpwstr", default)]
195 pub lpwstr: Option<String>,
196 #[serde(rename = "bstr", default)]
197 pub bstr: Option<String>,
198 #[serde(rename = "date", default)]
199 pub date: Option<String>,
200 #[serde(rename = "filetime", default)]
201 pub file_time: Option<String>,
202 #[serde(rename = "bool", default)]
203 pub r#bool: Option<bool>,
204 #[serde(rename = "cy", default)]
205 pub cy: Option<String>,
206 #[serde(rename = "error", default)]
207 pub error: Option<String>,
208 #[serde(rename = "stream", default)]
209 pub stream: Option<String>,
210 #[serde(rename = "ostream", default)]
211 pub ostream: Option<String>,
212 #[serde(rename = "storage", default)]
213 pub storage: Option<String>,
214 #[serde(rename = "ostorage", default)]
215 pub ostorage: Option<String>,
216 #[serde(rename = "vstream", default)]
217 pub vstream: Option<String>,
218 #[serde(rename = "clsid", default)]
219 pub cls_id: Option<String>,
220}
221
222#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
225pub struct CustomProperty {
226 pub name: String,
227 pub value: Option<CustomPropertyValue>,
228}
229
230#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
232#[serde(untagged)]
233pub enum CustomPropertyValue {
234 Int(i32),
235 Float(f64),
236 Bool(bool),
237 Date(String),
238 String(String),
239}