1use serde::de::{Deserializer, MapAccess, SeqAccess, Visitor};
9use serde::{Deserialize, Serialize, Serializer};
10use std::fmt;
11
12use super::common::{AttrValBool, AttrValFloat, AttrValInt, AttrValString};
13
14#[derive(Debug, Default, Clone, PartialEq, Eq)]
16pub struct DecodeIgnore;
17
18impl<'de> serde::de::Deserialize<'de> for DecodeIgnore {
19 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
20 where
21 D: Deserializer<'de>,
22 {
23 struct IgnoreVisitor;
24
25 impl<'de> Visitor<'de> for IgnoreVisitor {
26 type Value = DecodeIgnore;
27
28 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
29 formatter.write_str("any XML content")
30 }
31
32 fn visit_bool<E>(self, _: bool) -> Result<Self::Value, E> {
33 Ok(DecodeIgnore)
34 }
35
36 fn visit_i64<E>(self, _: i64) -> Result<Self::Value, E> {
37 Ok(DecodeIgnore)
38 }
39
40 fn visit_u64<E>(self, _: u64) -> Result<Self::Value, E> {
41 Ok(DecodeIgnore)
42 }
43
44 fn visit_f64<E>(self, _: f64) -> Result<Self::Value, E> {
45 Ok(DecodeIgnore)
46 }
47
48 fn visit_str<E>(self, _: &str) -> Result<Self::Value, E> {
49 Ok(DecodeIgnore)
50 }
51
52 fn visit_string<E>(self, _: String) -> Result<Self::Value, E> {
53 Ok(DecodeIgnore)
54 }
55
56 fn visit_unit<E>(self) -> Result<Self::Value, E> {
57 Ok(DecodeIgnore)
58 }
59
60 fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
61 where
62 A: SeqAccess<'de>,
63 {
64 while seq.next_element::<DecodeIgnore>()?.is_some() {}
65 Ok(DecodeIgnore)
66 }
67
68 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
69 where
70 A: MapAccess<'de>,
71 {
72 while map.next_entry::<DecodeIgnore, DecodeIgnore>()?.is_some() {}
73 Ok(DecodeIgnore)
74 }
75
76 fn visit_newtype_struct<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
77 where
78 D: Deserializer<'de>,
79 {
80 DecodeIgnore::deserialize(deserializer)
81 }
82 }
83
84 deserializer.deserialize_any(IgnoreVisitor)
85 }
86}
87
88impl Serialize for DecodeIgnore {
89 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
90 where
91 S: Serializer,
92 {
93 serializer.serialize_unit_struct("DecodeIgnore")
94 }
95}
96
97#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
99#[serde(rename = "c:chartSpace")]
100pub struct DecodeChartSpace {
101 #[serde(rename = "chart", default)]
102 pub chart: DecodeCChart,
103 #[serde(rename = "spPr", default)]
104 pub sp_pr: Option<DecodeCSpPr>,
105}
106
107#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
109pub struct DecodeCChart {
110 #[serde(rename = "title", default)]
111 pub title: Option<DecodeCTitle>,
112 #[serde(rename = "plotArea", default)]
113 pub plot_area: Option<DecodeCPlotArea>,
114 #[serde(rename = "legend", default)]
115 pub legend: Option<DecodeCLegend>,
116 #[serde(rename = "dispBlanksAs", default)]
117 pub disp_blanks_as: Option<AttrValString>,
118}
119
120#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
122pub struct DecodeCPlotArea {
123 #[serde(rename = "areaChart", default)]
124 pub area_chart: Vec<DecodeCCharts>,
125 #[serde(rename = "area3DChart", default)]
126 pub area_3d_chart: Vec<DecodeCCharts>,
127 #[serde(rename = "barChart", default)]
128 pub bar_chart: Vec<DecodeCCharts>,
129 #[serde(rename = "bar3DChart", default)]
130 pub bar_3d_chart: Vec<DecodeCCharts>,
131 #[serde(rename = "bubbleChart", default)]
132 pub bubble_chart: Vec<DecodeCCharts>,
133 #[serde(rename = "doughnutChart", default)]
134 pub doughnut_chart: Vec<DecodeCCharts>,
135 #[serde(rename = "lineChart", default)]
136 pub line_chart: Vec<DecodeCCharts>,
137 #[serde(rename = "line3DChart", default)]
138 pub line_3d_chart: Vec<DecodeCCharts>,
139 #[serde(rename = "ofPieChart", default)]
140 pub of_pie_chart: Vec<DecodeCCharts>,
141 #[serde(rename = "pieChart", default)]
142 pub pie_chart: Vec<DecodeCCharts>,
143 #[serde(rename = "pie3DChart", default)]
144 pub pie_3d_chart: Vec<DecodeCCharts>,
145 #[serde(rename = "radarChart", default)]
146 pub radar_chart: Vec<DecodeCCharts>,
147 #[serde(rename = "scatterChart", default)]
148 pub scatter_chart: Vec<DecodeCCharts>,
149 #[serde(rename = "stockChart", default)]
150 pub stock_chart: Vec<DecodeCCharts>,
151 #[serde(rename = "surfaceChart", default)]
152 pub surface_chart: Vec<DecodeCCharts>,
153 #[serde(rename = "surface3DChart", default)]
154 pub surface_3d_chart: Vec<DecodeCCharts>,
155 #[serde(rename = "catAx", default)]
156 pub cat_ax: Vec<DecodeCAxis>,
157 #[serde(rename = "valAx", default)]
158 pub val_ax: Vec<DecodeCAxis>,
159 #[serde(rename = "dateAx", default)]
160 pub date_ax: Vec<DecodeCAxis>,
161 #[serde(rename = "serAx", default)]
162 pub ser_ax: Vec<DecodeCAxis>,
163 #[serde(rename = "dTable", default)]
164 pub d_table: Option<DecodeCDTable>,
165 #[serde(rename = "layout", default)]
166 pub layout: Option<DecodeIgnore>,
167 #[serde(rename = "spPr", default)]
168 pub sp_pr: Option<DecodeCSpPr>,
169}
170
171#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
173pub struct DecodeCDTable {
174 #[serde(rename = "showHorzBorder", default)]
175 pub show_horz_border: Option<AttrValBool>,
176 #[serde(rename = "showVertBorder", default)]
177 pub show_vert_border: Option<AttrValBool>,
178 #[serde(rename = "showOutline", default)]
179 pub show_outline: Option<AttrValBool>,
180 #[serde(rename = "showKeys", default)]
181 pub show_keys: Option<AttrValBool>,
182}
183
184#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
186pub struct DecodeCCharts {
187 #[serde(rename = "barDir", default)]
188 pub bar_dir: Option<AttrValString>,
189 #[serde(rename = "grouping", default)]
190 pub grouping: Option<AttrValString>,
191 #[serde(rename = "scatterStyle", default)]
192 pub scatter_style: Option<AttrValString>,
193 #[serde(rename = "shape", default)]
194 pub shape: Option<AttrValString>,
195 #[serde(rename = "ofPieType", default)]
196 pub of_pie_type: Option<AttrValString>,
197 #[serde(rename = "wireframe", default)]
198 pub wireframe: Option<AttrValBool>,
199 #[serde(rename = "upDownBars", default)]
200 pub up_down_bars: Option<DecodeCUpDownBars>,
201 #[serde(rename = "varyColors", default)]
202 pub vary_colors: Option<AttrValBool>,
203 #[serde(rename = "ser", default)]
204 pub ser: Vec<DecodeCSer>,
205 #[serde(rename = "axId", default)]
206 pub ax_id: Vec<DecodeCAxId>,
207 #[serde(rename = "dLbls", default)]
208 pub d_lbls: Option<DecodeCDLbls>,
209 #[serde(rename = "gapWidth", default)]
210 pub gap_width: Option<AttrValInt>,
211 #[serde(rename = "holeSize", default)]
212 pub hole_size: Option<AttrValInt>,
213 #[serde(rename = "overlap", default)]
214 pub overlap: Option<AttrValInt>,
215 #[serde(rename = "splitPos", default)]
216 pub split_pos: Option<AttrValInt>,
217 #[serde(rename = "bubbleScale", default)]
218 pub bubble_scale: Option<AttrValFloat>,
219 #[serde(rename = "smooth", default)]
220 pub smooth: Option<AttrValBool>,
221}
222
223#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
225pub struct DecodeCUpDownBars {
226 #[serde(rename = "gapWidth", default)]
227 pub gap_width: Option<DecodeIgnore>,
228 #[serde(rename = "upBars", default)]
229 pub up_bars: Option<DecodeIgnore>,
230 #[serde(rename = "downBars", default)]
231 pub down_bars: Option<DecodeIgnore>,
232 #[serde(rename = "extLst", default)]
233 pub ext_lst: Option<DecodeIgnore>,
234}
235
236#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
238pub struct DecodeCSer {
239 #[serde(rename = "idx", default)]
240 pub idx: Option<AttrValInt>,
241 #[serde(rename = "order", default)]
242 pub order: Option<AttrValInt>,
243 #[serde(rename = "tx", default)]
244 pub tx: Option<DecodeCTx>,
245 #[serde(rename = "spPr", default)]
246 pub sp_pr: Option<DecodeCSpPr>,
247 #[serde(rename = "dPt", default)]
248 pub d_pt: Vec<DecodeCDPt>,
249 #[serde(rename = "dLbls", default)]
250 pub d_lbls: Option<DecodeCDLbls>,
251 #[serde(rename = "marker", default)]
252 pub marker: Option<DecodeCMarker>,
253 #[serde(rename = "cat", default)]
254 pub cat: Option<DecodeCCat>,
255 #[serde(rename = "val", default)]
256 pub val: Option<DecodeCVal>,
257 #[serde(rename = "xVal", default)]
258 pub x_val: Option<DecodeCCat>,
259 #[serde(rename = "yVal", default)]
260 pub y_val: Option<DecodeCVal>,
261 #[serde(rename = "bubbleSize", default)]
262 pub bubble_size: Option<DecodeCVal>,
263 #[serde(rename = "smooth", default)]
264 pub smooth: Option<AttrValBool>,
265}
266
267#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
269pub struct DecodeCTx {
270 #[serde(rename = "strRef", default)]
271 pub str_ref: Option<DecodeCStrRef>,
272}
273
274#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
276pub struct DecodeCStrRef {
277 #[serde(rename = "f", default)]
278 pub f: String,
279}
280
281#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
283pub struct DecodeCCat {
284 #[serde(rename = "strRef", default)]
285 pub str_ref: Option<DecodeCStrRef>,
286}
287
288#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
290pub struct DecodeCVal {
291 #[serde(rename = "numRef", default)]
292 pub num_ref: Option<DecodeCNumRef>,
293}
294
295#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
297pub struct DecodeCNumRef {
298 #[serde(rename = "f", default)]
299 pub f: String,
300}
301
302#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
304pub struct DecodeCMarker {
305 #[serde(rename = "symbol", default)]
306 pub symbol: Option<AttrValString>,
307 #[serde(rename = "size", default)]
308 pub size: Option<AttrValInt>,
309 #[serde(rename = "spPr", default)]
310 pub sp_pr: Option<DecodeCSpPr>,
311}
312
313#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
315pub struct DecodeCDPt {
316 #[serde(rename = "idx", default)]
317 pub idx: Option<AttrValInt>,
318 #[serde(rename = "spPr", default)]
319 pub sp_pr: Option<DecodeCSpPr>,
320}
321
322#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
324pub struct DecodeCDLbls {
325 #[serde(rename = "dLblPos", default)]
326 pub d_lbl_pos: Option<AttrValString>,
327 #[serde(rename = "numFmt", default)]
328 pub num_fmt: Option<DecodeCNumFmt>,
329 #[serde(rename = "spPr", default)]
330 pub sp_pr: Option<DecodeCSpPr>,
331 #[serde(rename = "txPr", default)]
332 pub tx_pr: Option<DecodeCTxPr>,
333 #[serde(rename = "showLegendKey", default)]
334 pub show_legend_key: Option<AttrValBool>,
335 #[serde(rename = "showVal", default)]
336 pub show_val: Option<AttrValBool>,
337 #[serde(rename = "showCatName", default)]
338 pub show_cat_name: Option<AttrValBool>,
339 #[serde(rename = "showSerName", default)]
340 pub show_ser_name: Option<AttrValBool>,
341 #[serde(rename = "showPercent", default)]
342 pub show_percent: Option<AttrValBool>,
343 #[serde(rename = "showBubbleSize", default)]
344 pub show_bubble_size: Option<AttrValBool>,
345 #[serde(rename = "showLeaderLines", default)]
346 pub show_leader_lines: Option<AttrValBool>,
347}
348
349#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
351pub struct DecodeCSpPr {
352 #[serde(rename = "noFill", default)]
353 pub no_fill: Option<String>,
354 #[serde(rename = "solidFill", default)]
355 pub solid_fill: Option<DecodeASolidFill>,
356 #[serde(rename = "gradFill", default)]
357 pub grad_fill: Option<DecodeIgnore>,
358 #[serde(rename = "pattFill", default)]
359 pub patt_fill: Option<DecodeIgnore>,
360 #[serde(rename = "ln", default)]
361 pub ln: Option<DecodeALn>,
362 #[serde(rename = "sp3d", default)]
363 pub sp3d: Option<DecodeIgnore>,
364 #[serde(rename = "effectLst", default)]
365 pub effect_lst: Option<DecodeIgnore>,
366 #[serde(rename = "extLst", default)]
367 pub ext_lst: Option<DecodeIgnore>,
368}
369
370#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
372pub struct DecodeASolidFill {
373 #[serde(rename = "srgbClr", default)]
374 pub srgb_clr: Option<DecodeASrgbClr>,
375 #[serde(rename = "schemeClr", default)]
376 pub scheme_clr: Option<DecodeASchemeClr>,
377 #[serde(rename = "prstClr", default)]
378 pub prst_clr: Option<DecodeIgnore>,
379 #[serde(rename = "sysClr", default)]
380 pub sys_clr: Option<DecodeIgnore>,
381 #[serde(rename = "hslClr", default)]
382 pub hsl_clr: Option<DecodeIgnore>,
383 #[serde(rename = "scrgbClr", default)]
384 pub scrgb_clr: Option<DecodeIgnore>,
385}
386
387#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
389pub struct DecodeASrgbClr {
390 #[serde(rename = "@val", default)]
391 pub val: Option<String>,
392 #[serde(rename = "lumMod", default)]
393 pub lum_mod: Option<AttrValInt>,
394 #[serde(rename = "lumOff", default)]
395 pub lum_off: Option<AttrValInt>,
396}
397
398#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
400pub struct DecodeASchemeClr {
401 #[serde(rename = "@val", default)]
402 pub val: Option<String>,
403 #[serde(rename = "lumMod", default)]
404 pub lum_mod: Option<AttrValInt>,
405 #[serde(rename = "lumOff", default)]
406 pub lum_off: Option<AttrValInt>,
407}
408
409#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
411pub struct DecodeALn {
412 #[serde(rename = "@w", default)]
413 pub w: Option<String>,
414 #[serde(rename = "noFill", default)]
415 pub no_fill: Option<String>,
416 #[serde(rename = "solidFill", default)]
417 pub solid_fill: Option<DecodeASolidFill>,
418 #[serde(rename = "gradFill", default)]
419 pub grad_fill: Option<DecodeIgnore>,
420 #[serde(rename = "pattFill", default)]
421 pub patt_fill: Option<DecodeIgnore>,
422 #[serde(rename = "round", default)]
423 pub round: Option<DecodeIgnore>,
424 #[serde(rename = "bevel", default)]
425 pub bevel: Option<DecodeIgnore>,
426 #[serde(rename = "miter", default)]
427 pub miter: Option<DecodeIgnore>,
428 #[serde(rename = "prstDash", default)]
429 pub prst_dash: Option<AttrValString>,
430 #[serde(rename = "custDash", default)]
431 pub cust_dash: Option<DecodeIgnore>,
432 #[serde(rename = "headEnd", default)]
433 pub head_end: Option<DecodeIgnore>,
434 #[serde(rename = "tailEnd", default)]
435 pub tail_end: Option<DecodeIgnore>,
436 #[serde(rename = "extLst", default)]
437 pub ext_lst: Option<DecodeIgnore>,
438}
439
440#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
442pub struct DecodeCAxId {
443 #[serde(rename = "@val", default)]
444 pub val: i64,
445}
446
447#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
449pub struct DecodeCAxis {
450 #[serde(rename = "axId", default)]
451 pub ax_id: Option<AttrValInt>,
452 #[serde(rename = "scaling", default)]
453 pub scaling: Option<DecodeCScaling>,
454 #[serde(rename = "delete", default)]
455 pub delete: Option<AttrValBool>,
456 #[serde(rename = "axPos", default)]
457 pub ax_pos: Option<AttrValString>,
458 #[serde(rename = "majorGridlines", default)]
459 pub major_grid_lines: Option<DecodeIgnore>,
460 #[serde(rename = "minorGridlines", default)]
461 pub minor_grid_lines: Option<DecodeIgnore>,
462 #[serde(rename = "title", default)]
463 pub title: Option<DecodeCTitle>,
464 #[serde(rename = "numFmt", default)]
465 pub num_fmt: Option<DecodeCNumFmt>,
466 #[serde(rename = "majorTickMark", default)]
467 pub major_tick_mark: Option<AttrValString>,
468 #[serde(rename = "minorTickMark", default)]
469 pub minor_tick_mark: Option<AttrValString>,
470 #[serde(rename = "tickLblPos", default)]
471 pub tick_lbl_pos: Option<AttrValString>,
472 #[serde(rename = "tickLblSkip", default)]
473 pub tick_lbl_skip: Option<AttrValInt>,
474 #[serde(rename = "crossAx", default)]
475 pub cross_ax: Option<AttrValInt>,
476 #[serde(rename = "crosses", default)]
477 pub crosses: Option<AttrValString>,
478 #[serde(rename = "crossBetween", default)]
479 pub cross_between: Option<AttrValString>,
480 #[serde(rename = "auto", default)]
481 pub auto: Option<AttrValBool>,
482 #[serde(rename = "lblOffset", default)]
483 pub lbl_offset: Option<AttrValInt>,
484 #[serde(rename = "majorUnit", default)]
485 pub major_unit: Option<AttrValFloat>,
486 #[serde(rename = "minorUnit", default)]
487 pub minor_unit: Option<AttrValFloat>,
488 #[serde(rename = "spPr", default)]
489 pub sp_pr: Option<DecodeIgnore>,
490 #[serde(rename = "txPr", default)]
491 pub tx_pr: Option<DecodeIgnore>,
492 #[serde(rename = "extLst", default)]
493 pub ext_lst: Option<DecodeIgnore>,
494}
495
496#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
498pub struct DecodeCScaling {
499 #[serde(rename = "orientation", default)]
500 pub orientation: Option<AttrValString>,
501 #[serde(rename = "max", default)]
502 pub max: Option<AttrValFloat>,
503 #[serde(rename = "min", default)]
504 pub min: Option<AttrValFloat>,
505 #[serde(rename = "logBase", default)]
506 pub log_base: Option<AttrValFloat>,
507}
508
509#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
511pub struct DecodeCNumFmt {
512 #[serde(rename = "@formatCode", default)]
513 pub format_code: String,
514 #[serde(rename = "@sourceLinked", default)]
515 pub source_linked: bool,
516}
517
518#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
520pub struct DecodeCTitle {
521 #[serde(rename = "tx", default)]
522 pub tx: Option<DecodeCTitleTx>,
523 #[serde(rename = "overlay", default)]
524 pub overlay: Option<AttrValBool>,
525 #[serde(rename = "layout", default)]
526 pub layout: Option<DecodeIgnore>,
527 #[serde(rename = "spPr", default)]
528 pub sp_pr: Option<DecodeCSpPr>,
529 #[serde(rename = "txPr", default)]
530 pub tx_pr: Option<DecodeCTxPr>,
531 #[serde(rename = "extLst", default)]
532 pub ext_lst: Option<DecodeIgnore>,
533}
534
535#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
537pub struct DecodeCLegend {
538 #[serde(rename = "legendPos", default)]
539 pub legend_pos: Option<AttrValString>,
540 #[serde(rename = "overlay", default)]
541 pub overlay: Option<AttrValBool>,
542 #[serde(rename = "layout", default)]
543 pub layout: Option<DecodeIgnore>,
544 #[serde(rename = "txPr", default)]
545 pub tx_pr: Option<DecodeCTxPr>,
546 #[serde(rename = "spPr", default)]
547 pub sp_pr: Option<DecodeIgnore>,
548 #[serde(rename = "legendEntry", default)]
549 pub legend_entry: Vec<DecodeIgnore>,
550 #[serde(rename = "extLst", default)]
551 pub ext_lst: Option<DecodeIgnore>,
552}
553
554#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
556pub struct DecodeCTxPr {
557 #[serde(rename = "bodyPr", default)]
558 pub body_pr: Option<DecodeIgnore>,
559 #[serde(rename = "lstStyle", default)]
560 pub lst_style: Option<DecodeIgnore>,
561 #[serde(rename = "p", default)]
562 pub p: Option<DecodeAP>,
563}
564
565#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
567pub struct DecodeAP {
568 #[serde(rename = "pPr", default)]
569 pub p_pr: Option<DecodeAPPr>,
570 #[serde(rename = "r", default)]
571 pub r: Vec<DecodeCR>,
572 #[serde(rename = "t", default)]
573 pub t: Option<String>,
574 #[serde(rename = "endParaRPr", default)]
575 pub end_para_r_pr: Option<DecodeIgnore>,
576}
577
578#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
580pub struct DecodeAPPr {
581 #[serde(rename = "defRPr", default)]
582 pub def_r_pr: Option<DecodeARPr>,
583}
584
585#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
587pub struct DecodeARPr {
588 #[serde(rename = "@sz", default)]
589 pub sz: Option<String>,
590 #[serde(rename = "@b", default)]
591 pub b: Option<String>,
592 #[serde(rename = "@i", default)]
593 pub i: Option<String>,
594 #[serde(rename = "@strike", default)]
595 pub strike: Option<String>,
596 #[serde(rename = "@u", default)]
597 pub u: Option<String>,
598 #[serde(rename = "@vertAlign", default)]
599 pub vert_align: Option<String>,
600 #[serde(rename = "solidFill", default)]
601 pub solid_fill: Option<DecodeASolidFill>,
602 #[serde(rename = "latin", default)]
603 pub latin: Option<DecodeALatin>,
604 #[serde(rename = "ea", default)]
605 pub ea: Option<DecodeALatin>,
606 #[serde(rename = "cs", default)]
607 pub cs: Option<DecodeALatin>,
608}
609
610#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
612pub struct DecodeALatin {
613 #[serde(rename = "@typeface", default)]
614 pub typeface: Option<String>,
615}
616
617#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
619pub struct DecodeCTitleTx {
620 #[serde(rename = "strRef", default)]
621 pub str_ref: Option<DecodeCStrRef>,
622 #[serde(rename = "rich", default)]
623 pub rich: Option<DecodeCRich>,
624}
625
626#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
628pub struct DecodeCRich {
629 #[serde(rename = "bodyPr", default)]
630 pub body_pr: Option<DecodeIgnore>,
631 #[serde(rename = "lstStyle", default)]
632 pub lst_style: Option<DecodeIgnore>,
633 #[serde(rename = "p", default)]
634 pub p: Vec<DecodeAP>,
635}
636
637#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
639pub struct DecodeCR {
640 #[serde(rename = "rPr", default)]
641 pub r_pr: Option<DecodeARPr>,
642 #[serde(rename = "t", default)]
643 pub t: Option<String>,
644}