Skip to main content

ooxml_sml/
generated_serializers.rs

1// ToXml serializers for generated types.
2// Enables roundtrip XML serialization alongside FromXml parsers.
3
4#![allow(unused_variables, unused_assignments, unreachable_code, unused_imports)]
5#![allow(clippy::single_match)]
6#![allow(clippy::match_single_binding)]
7#![allow(clippy::explicit_counter_loop)]
8
9use super::generated::*;
10pub use ooxml_xml::{SerializeError, ToXml};
11use quick_xml::Writer;
12use quick_xml::events::{BytesEnd, BytesStart, BytesText, Event};
13use std::io::Write;
14
15#[allow(dead_code)]
16/// Encode bytes as a hex string.
17fn encode_hex(bytes: &[u8]) -> String {
18    bytes.iter().map(|b| format!("{:02X}", b)).collect()
19}
20
21#[allow(dead_code)]
22/// Encode bytes as a base64 string.
23fn encode_base64(bytes: &[u8]) -> String {
24    use base64::Engine;
25    base64::engine::general_purpose::STANDARD.encode(bytes)
26}
27
28impl ToXml for AutoFilter {
29    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
30        #[allow(unused_mut)]
31        let mut start = start;
32        #[cfg(feature = "sml-filtering")]
33        if let Some(ref val) = self.reference {
34            start.push_attribute(("ref", val.as_str()));
35        }
36        #[cfg(feature = "extra-attrs")]
37        for (key, value) in &self.extra_attrs {
38            start.push_attribute((key.as_str(), value.as_str()));
39        }
40        start
41    }
42
43    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
44        #[cfg(feature = "extra-children")]
45        let mut extra_iter = self.extra_children.iter().peekable();
46        #[cfg(feature = "extra-children")]
47        let mut emit_idx: usize = 0;
48        #[cfg(feature = "sml-filtering")]
49        for item in &self.filter_column {
50            #[cfg(feature = "extra-children")]
51            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
52                extra_iter
53                    .next()
54                    .unwrap()
55                    .node
56                    .write_to(writer)
57                    .map_err(SerializeError::from)?;
58            }
59            item.write_element("filterColumn", writer)?;
60            #[cfg(feature = "extra-children")]
61            {
62                emit_idx += 1;
63            }
64        }
65        #[cfg(feature = "extra-children")]
66        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
67            extra_iter
68                .next()
69                .unwrap()
70                .node
71                .write_to(writer)
72                .map_err(SerializeError::from)?;
73        }
74        #[cfg(feature = "sml-filtering")]
75        if let Some(ref val) = self.sort_state {
76            val.write_element("sortState", writer)?;
77        }
78        #[cfg(feature = "extra-children")]
79        {
80            emit_idx += 1;
81        }
82        #[cfg(feature = "extra-children")]
83        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
84            extra_iter
85                .next()
86                .unwrap()
87                .node
88                .write_to(writer)
89                .map_err(SerializeError::from)?;
90        }
91        #[cfg(feature = "sml-extensions")]
92        if let Some(ref val) = self.extension_list {
93            val.write_element("extLst", writer)?;
94        }
95        #[cfg(feature = "extra-children")]
96        {
97            emit_idx += 1;
98        }
99        #[cfg(feature = "extra-children")]
100        for extra in extra_iter {
101            extra.node.write_to(writer).map_err(SerializeError::from)?;
102        }
103        Ok(())
104    }
105
106    fn is_empty_element(&self) -> bool {
107        #[cfg(feature = "sml-filtering")]
108        if !self.filter_column.is_empty() {
109            return false;
110        }
111        #[cfg(feature = "sml-filtering")]
112        if self.sort_state.is_some() {
113            return false;
114        }
115        #[cfg(feature = "sml-extensions")]
116        if self.extension_list.is_some() {
117            return false;
118        }
119        #[cfg(feature = "extra-children")]
120        if !self.extra_children.is_empty() {
121            return false;
122        }
123        true
124    }
125}
126
127impl ToXml for FilterColumn {
128    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
129        #[allow(unused_mut)]
130        let mut start = start;
131        #[cfg(feature = "sml-filtering")]
132        {
133            let val = &self.column_id;
134            {
135                let s = val.to_string();
136                start.push_attribute(("colId", s.as_str()));
137            }
138        }
139        #[cfg(feature = "sml-filtering")]
140        if let Some(ref val) = self.hidden_button {
141            start.push_attribute(("hiddenButton", if *val { "1" } else { "0" }));
142        }
143        #[cfg(feature = "sml-filtering")]
144        if let Some(ref val) = self.show_button {
145            start.push_attribute(("showButton", if *val { "1" } else { "0" }));
146        }
147        #[cfg(feature = "extra-attrs")]
148        for (key, value) in &self.extra_attrs {
149            start.push_attribute((key.as_str(), value.as_str()));
150        }
151        start
152    }
153
154    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
155        #[cfg(feature = "extra-children")]
156        let mut extra_iter = self.extra_children.iter().peekable();
157        #[cfg(feature = "extra-children")]
158        let mut emit_idx: usize = 0;
159        #[cfg(feature = "extra-children")]
160        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
161            extra_iter
162                .next()
163                .unwrap()
164                .node
165                .write_to(writer)
166                .map_err(SerializeError::from)?;
167        }
168        #[cfg(feature = "sml-filtering")]
169        if let Some(ref val) = self.filters {
170            val.write_element("filters", writer)?;
171        }
172        #[cfg(feature = "extra-children")]
173        {
174            emit_idx += 1;
175        }
176        #[cfg(feature = "extra-children")]
177        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
178            extra_iter
179                .next()
180                .unwrap()
181                .node
182                .write_to(writer)
183                .map_err(SerializeError::from)?;
184        }
185        #[cfg(feature = "sml-filtering")]
186        if let Some(ref val) = self.top10 {
187            val.write_element("top10", writer)?;
188        }
189        #[cfg(feature = "extra-children")]
190        {
191            emit_idx += 1;
192        }
193        #[cfg(feature = "extra-children")]
194        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
195            extra_iter
196                .next()
197                .unwrap()
198                .node
199                .write_to(writer)
200                .map_err(SerializeError::from)?;
201        }
202        #[cfg(feature = "sml-filtering")]
203        if let Some(ref val) = self.custom_filters {
204            val.write_element("customFilters", writer)?;
205        }
206        #[cfg(feature = "extra-children")]
207        {
208            emit_idx += 1;
209        }
210        #[cfg(feature = "extra-children")]
211        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
212            extra_iter
213                .next()
214                .unwrap()
215                .node
216                .write_to(writer)
217                .map_err(SerializeError::from)?;
218        }
219        #[cfg(feature = "sml-filtering")]
220        if let Some(ref val) = self.dynamic_filter {
221            val.write_element("dynamicFilter", writer)?;
222        }
223        #[cfg(feature = "extra-children")]
224        {
225            emit_idx += 1;
226        }
227        #[cfg(feature = "extra-children")]
228        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
229            extra_iter
230                .next()
231                .unwrap()
232                .node
233                .write_to(writer)
234                .map_err(SerializeError::from)?;
235        }
236        #[cfg(feature = "sml-filtering")]
237        if let Some(ref val) = self.color_filter {
238            val.write_element("colorFilter", writer)?;
239        }
240        #[cfg(feature = "extra-children")]
241        {
242            emit_idx += 1;
243        }
244        #[cfg(feature = "extra-children")]
245        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
246            extra_iter
247                .next()
248                .unwrap()
249                .node
250                .write_to(writer)
251                .map_err(SerializeError::from)?;
252        }
253        #[cfg(feature = "sml-filtering")]
254        if let Some(ref val) = self.icon_filter {
255            val.write_element("iconFilter", writer)?;
256        }
257        #[cfg(feature = "extra-children")]
258        {
259            emit_idx += 1;
260        }
261        #[cfg(feature = "extra-children")]
262        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
263            extra_iter
264                .next()
265                .unwrap()
266                .node
267                .write_to(writer)
268                .map_err(SerializeError::from)?;
269        }
270        #[cfg(feature = "sml-extensions")]
271        if let Some(ref val) = self.extension_list {
272            val.write_element("extLst", writer)?;
273        }
274        #[cfg(feature = "extra-children")]
275        {
276            emit_idx += 1;
277        }
278        #[cfg(feature = "extra-children")]
279        for extra in extra_iter {
280            extra.node.write_to(writer).map_err(SerializeError::from)?;
281        }
282        Ok(())
283    }
284
285    fn is_empty_element(&self) -> bool {
286        #[cfg(feature = "sml-filtering")]
287        if self.filters.is_some() {
288            return false;
289        }
290        #[cfg(feature = "sml-filtering")]
291        if self.top10.is_some() {
292            return false;
293        }
294        #[cfg(feature = "sml-filtering")]
295        if self.custom_filters.is_some() {
296            return false;
297        }
298        #[cfg(feature = "sml-filtering")]
299        if self.dynamic_filter.is_some() {
300            return false;
301        }
302        #[cfg(feature = "sml-filtering")]
303        if self.color_filter.is_some() {
304            return false;
305        }
306        #[cfg(feature = "sml-filtering")]
307        if self.icon_filter.is_some() {
308            return false;
309        }
310        #[cfg(feature = "sml-extensions")]
311        if self.extension_list.is_some() {
312            return false;
313        }
314        #[cfg(feature = "extra-children")]
315        if !self.extra_children.is_empty() {
316            return false;
317        }
318        true
319    }
320}
321
322impl ToXml for Filters {
323    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
324        #[allow(unused_mut)]
325        let mut start = start;
326        if let Some(ref val) = self.blank {
327            start.push_attribute(("blank", if *val { "1" } else { "0" }));
328        }
329        if let Some(ref val) = self.calendar_type {
330            {
331                let s = val.to_string();
332                start.push_attribute(("calendarType", s.as_str()));
333            }
334        }
335        #[cfg(feature = "extra-attrs")]
336        for (key, value) in &self.extra_attrs {
337            start.push_attribute((key.as_str(), value.as_str()));
338        }
339        start
340    }
341
342    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
343        #[cfg(feature = "extra-children")]
344        let mut extra_iter = self.extra_children.iter().peekable();
345        #[cfg(feature = "extra-children")]
346        let mut emit_idx: usize = 0;
347        for item in &self.filter {
348            #[cfg(feature = "extra-children")]
349            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
350                extra_iter
351                    .next()
352                    .unwrap()
353                    .node
354                    .write_to(writer)
355                    .map_err(SerializeError::from)?;
356            }
357            item.write_element("filter", writer)?;
358            #[cfg(feature = "extra-children")]
359            {
360                emit_idx += 1;
361            }
362        }
363        for item in &self.date_group_item {
364            #[cfg(feature = "extra-children")]
365            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
366                extra_iter
367                    .next()
368                    .unwrap()
369                    .node
370                    .write_to(writer)
371                    .map_err(SerializeError::from)?;
372            }
373            item.write_element("dateGroupItem", writer)?;
374            #[cfg(feature = "extra-children")]
375            {
376                emit_idx += 1;
377            }
378        }
379        #[cfg(feature = "extra-children")]
380        for extra in extra_iter {
381            extra.node.write_to(writer).map_err(SerializeError::from)?;
382        }
383        Ok(())
384    }
385
386    fn is_empty_element(&self) -> bool {
387        if !self.filter.is_empty() {
388            return false;
389        }
390        if !self.date_group_item.is_empty() {
391            return false;
392        }
393        #[cfg(feature = "extra-children")]
394        if !self.extra_children.is_empty() {
395            return false;
396        }
397        true
398    }
399}
400
401impl ToXml for Filter {
402    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
403        #[allow(unused_mut)]
404        let mut start = start;
405        if let Some(ref val) = self.value {
406            start.push_attribute(("val", val.as_str()));
407        }
408        #[cfg(feature = "extra-attrs")]
409        for (key, value) in &self.extra_attrs {
410            start.push_attribute((key.as_str(), value.as_str()));
411        }
412        start
413    }
414
415    fn is_empty_element(&self) -> bool {
416        true
417    }
418}
419
420impl ToXml for CustomFilters {
421    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
422        #[allow(unused_mut)]
423        let mut start = start;
424        if let Some(ref val) = self.and {
425            start.push_attribute(("and", if *val { "1" } else { "0" }));
426        }
427        #[cfg(feature = "extra-attrs")]
428        for (key, value) in &self.extra_attrs {
429            start.push_attribute((key.as_str(), value.as_str()));
430        }
431        start
432    }
433
434    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
435        #[cfg(feature = "extra-children")]
436        let mut extra_iter = self.extra_children.iter().peekable();
437        #[cfg(feature = "extra-children")]
438        let mut emit_idx: usize = 0;
439        for item in &self.custom_filter {
440            #[cfg(feature = "extra-children")]
441            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
442                extra_iter
443                    .next()
444                    .unwrap()
445                    .node
446                    .write_to(writer)
447                    .map_err(SerializeError::from)?;
448            }
449            item.write_element("customFilter", writer)?;
450            #[cfg(feature = "extra-children")]
451            {
452                emit_idx += 1;
453            }
454        }
455        #[cfg(feature = "extra-children")]
456        for extra in extra_iter {
457            extra.node.write_to(writer).map_err(SerializeError::from)?;
458        }
459        Ok(())
460    }
461
462    fn is_empty_element(&self) -> bool {
463        if !self.custom_filter.is_empty() {
464            return false;
465        }
466        #[cfg(feature = "extra-children")]
467        if !self.extra_children.is_empty() {
468            return false;
469        }
470        true
471    }
472}
473
474impl ToXml for CustomFilter {
475    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
476        #[allow(unused_mut)]
477        let mut start = start;
478        if let Some(ref val) = self.operator {
479            {
480                let s = val.to_string();
481                start.push_attribute(("operator", s.as_str()));
482            }
483        }
484        if let Some(ref val) = self.value {
485            start.push_attribute(("val", val.as_str()));
486        }
487        #[cfg(feature = "extra-attrs")]
488        for (key, value) in &self.extra_attrs {
489            start.push_attribute((key.as_str(), value.as_str()));
490        }
491        start
492    }
493
494    fn is_empty_element(&self) -> bool {
495        true
496    }
497}
498
499impl ToXml for Top10Filter {
500    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
501        #[allow(unused_mut)]
502        let mut start = start;
503        if let Some(ref val) = self.top {
504            start.push_attribute(("top", if *val { "1" } else { "0" }));
505        }
506        if let Some(ref val) = self.percent {
507            start.push_attribute(("percent", if *val { "1" } else { "0" }));
508        }
509        {
510            let val = &self.value;
511            {
512                let s = val.to_string();
513                start.push_attribute(("val", s.as_str()));
514            }
515        }
516        if let Some(ref val) = self.filter_val {
517            {
518                let s = val.to_string();
519                start.push_attribute(("filterVal", s.as_str()));
520            }
521        }
522        #[cfg(feature = "extra-attrs")]
523        for (key, value) in &self.extra_attrs {
524            start.push_attribute((key.as_str(), value.as_str()));
525        }
526        start
527    }
528
529    fn is_empty_element(&self) -> bool {
530        true
531    }
532}
533
534impl ToXml for ColorFilter {
535    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
536        #[allow(unused_mut)]
537        let mut start = start;
538        if let Some(ref val) = self.dxf_id {
539            {
540                let s = val.to_string();
541                start.push_attribute(("dxfId", s.as_str()));
542            }
543        }
544        if let Some(ref val) = self.cell_color {
545            start.push_attribute(("cellColor", if *val { "1" } else { "0" }));
546        }
547        #[cfg(feature = "extra-attrs")]
548        for (key, value) in &self.extra_attrs {
549            start.push_attribute((key.as_str(), value.as_str()));
550        }
551        start
552    }
553
554    fn is_empty_element(&self) -> bool {
555        true
556    }
557}
558
559impl ToXml for IconFilter {
560    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
561        #[allow(unused_mut)]
562        let mut start = start;
563        {
564            let val = &self.icon_set;
565            {
566                let s = val.to_string();
567                start.push_attribute(("iconSet", s.as_str()));
568            }
569        }
570        if let Some(ref val) = self.icon_id {
571            {
572                let s = val.to_string();
573                start.push_attribute(("iconId", s.as_str()));
574            }
575        }
576        #[cfg(feature = "extra-attrs")]
577        for (key, value) in &self.extra_attrs {
578            start.push_attribute((key.as_str(), value.as_str()));
579        }
580        start
581    }
582
583    fn is_empty_element(&self) -> bool {
584        true
585    }
586}
587
588impl ToXml for DynamicFilter {
589    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
590        #[allow(unused_mut)]
591        let mut start = start;
592        {
593            let val = &self.r#type;
594            {
595                let s = val.to_string();
596                start.push_attribute(("type", s.as_str()));
597            }
598        }
599        if let Some(ref val) = self.value {
600            {
601                let s = val.to_string();
602                start.push_attribute(("val", s.as_str()));
603            }
604        }
605        if let Some(ref val) = self.val_iso {
606            start.push_attribute(("valIso", val.as_str()));
607        }
608        if let Some(ref val) = self.max_val {
609            {
610                let s = val.to_string();
611                start.push_attribute(("maxVal", s.as_str()));
612            }
613        }
614        if let Some(ref val) = self.max_val_iso {
615            start.push_attribute(("maxValIso", val.as_str()));
616        }
617        #[cfg(feature = "extra-attrs")]
618        for (key, value) in &self.extra_attrs {
619            start.push_attribute((key.as_str(), value.as_str()));
620        }
621        start
622    }
623
624    fn is_empty_element(&self) -> bool {
625        true
626    }
627}
628
629impl ToXml for SortState {
630    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
631        #[allow(unused_mut)]
632        let mut start = start;
633        if let Some(ref val) = self.column_sort {
634            start.push_attribute(("columnSort", if *val { "1" } else { "0" }));
635        }
636        if let Some(ref val) = self.case_sensitive {
637            start.push_attribute(("caseSensitive", if *val { "1" } else { "0" }));
638        }
639        if let Some(ref val) = self.sort_method {
640            {
641                let s = val.to_string();
642                start.push_attribute(("sortMethod", s.as_str()));
643            }
644        }
645        {
646            let val = &self.reference;
647            start.push_attribute(("ref", val.as_str()));
648        }
649        #[cfg(feature = "extra-attrs")]
650        for (key, value) in &self.extra_attrs {
651            start.push_attribute((key.as_str(), value.as_str()));
652        }
653        start
654    }
655
656    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
657        #[cfg(feature = "extra-children")]
658        let mut extra_iter = self.extra_children.iter().peekable();
659        #[cfg(feature = "extra-children")]
660        let mut emit_idx: usize = 0;
661        for item in &self.sort_condition {
662            #[cfg(feature = "extra-children")]
663            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
664                extra_iter
665                    .next()
666                    .unwrap()
667                    .node
668                    .write_to(writer)
669                    .map_err(SerializeError::from)?;
670            }
671            item.write_element("sortCondition", writer)?;
672            #[cfg(feature = "extra-children")]
673            {
674                emit_idx += 1;
675            }
676        }
677        #[cfg(feature = "extra-children")]
678        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
679            extra_iter
680                .next()
681                .unwrap()
682                .node
683                .write_to(writer)
684                .map_err(SerializeError::from)?;
685        }
686        if let Some(ref val) = self.extension_list {
687            val.write_element("extLst", writer)?;
688        }
689        #[cfg(feature = "extra-children")]
690        {
691            emit_idx += 1;
692        }
693        #[cfg(feature = "extra-children")]
694        for extra in extra_iter {
695            extra.node.write_to(writer).map_err(SerializeError::from)?;
696        }
697        Ok(())
698    }
699
700    fn is_empty_element(&self) -> bool {
701        if !self.sort_condition.is_empty() {
702            return false;
703        }
704        if self.extension_list.is_some() {
705            return false;
706        }
707        #[cfg(feature = "extra-children")]
708        if !self.extra_children.is_empty() {
709            return false;
710        }
711        true
712    }
713}
714
715impl ToXml for SortCondition {
716    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
717        #[allow(unused_mut)]
718        let mut start = start;
719        if let Some(ref val) = self.descending {
720            start.push_attribute(("descending", if *val { "1" } else { "0" }));
721        }
722        if let Some(ref val) = self.sort_by {
723            {
724                let s = val.to_string();
725                start.push_attribute(("sortBy", s.as_str()));
726            }
727        }
728        {
729            let val = &self.reference;
730            start.push_attribute(("ref", val.as_str()));
731        }
732        if let Some(ref val) = self.custom_list {
733            start.push_attribute(("customList", val.as_str()));
734        }
735        if let Some(ref val) = self.dxf_id {
736            {
737                let s = val.to_string();
738                start.push_attribute(("dxfId", s.as_str()));
739            }
740        }
741        if let Some(ref val) = self.icon_set {
742            {
743                let s = val.to_string();
744                start.push_attribute(("iconSet", s.as_str()));
745            }
746        }
747        if let Some(ref val) = self.icon_id {
748            {
749                let s = val.to_string();
750                start.push_attribute(("iconId", s.as_str()));
751            }
752        }
753        #[cfg(feature = "extra-attrs")]
754        for (key, value) in &self.extra_attrs {
755            start.push_attribute((key.as_str(), value.as_str()));
756        }
757        start
758    }
759
760    fn is_empty_element(&self) -> bool {
761        true
762    }
763}
764
765impl ToXml for DateGroupItem {
766    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
767        #[allow(unused_mut)]
768        let mut start = start;
769        {
770            let val = &self.year;
771            {
772                let s = val.to_string();
773                start.push_attribute(("year", s.as_str()));
774            }
775        }
776        if let Some(ref val) = self.month {
777            {
778                let s = val.to_string();
779                start.push_attribute(("month", s.as_str()));
780            }
781        }
782        if let Some(ref val) = self.day {
783            {
784                let s = val.to_string();
785                start.push_attribute(("day", s.as_str()));
786            }
787        }
788        if let Some(ref val) = self.hour {
789            {
790                let s = val.to_string();
791                start.push_attribute(("hour", s.as_str()));
792            }
793        }
794        if let Some(ref val) = self.minute {
795            {
796                let s = val.to_string();
797                start.push_attribute(("minute", s.as_str()));
798            }
799        }
800        if let Some(ref val) = self.second {
801            {
802                let s = val.to_string();
803                start.push_attribute(("second", s.as_str()));
804            }
805        }
806        {
807            let val = &self.date_time_grouping;
808            {
809                let s = val.to_string();
810                start.push_attribute(("dateTimeGrouping", s.as_str()));
811            }
812        }
813        #[cfg(feature = "extra-attrs")]
814        for (key, value) in &self.extra_attrs {
815            start.push_attribute((key.as_str(), value.as_str()));
816        }
817        start
818    }
819
820    fn is_empty_element(&self) -> bool {
821        true
822    }
823}
824
825impl ToXml for CTXStringElement {
826    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
827        #[allow(unused_mut)]
828        let mut start = start;
829        {
830            let val = &self.value;
831            start.push_attribute(("v", val.as_str()));
832        }
833        #[cfg(feature = "extra-attrs")]
834        for (key, value) in &self.extra_attrs {
835            start.push_attribute((key.as_str(), value.as_str()));
836        }
837        start
838    }
839
840    fn is_empty_element(&self) -> bool {
841        true
842    }
843}
844
845impl ToXml for Extension {
846    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
847        #[allow(unused_mut)]
848        let mut start = start;
849        if let Some(ref val) = self.uri {
850            start.push_attribute(("uri", val.as_str()));
851        }
852        #[cfg(feature = "extra-attrs")]
853        for (key, value) in &self.extra_attrs {
854            start.push_attribute((key.as_str(), value.as_str()));
855        }
856        start
857    }
858
859    fn is_empty_element(&self) -> bool {
860        true
861    }
862}
863
864impl ToXml for ObjectAnchor {
865    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
866        #[allow(unused_mut)]
867        let mut start = start;
868        if let Some(ref val) = self.move_with_cells {
869            start.push_attribute(("moveWithCells", if *val { "1" } else { "0" }));
870        }
871        if let Some(ref val) = self.size_with_cells {
872            start.push_attribute(("sizeWithCells", if *val { "1" } else { "0" }));
873        }
874        #[cfg(feature = "extra-attrs")]
875        for (key, value) in &self.extra_attrs {
876            start.push_attribute((key.as_str(), value.as_str()));
877        }
878        start
879    }
880
881    fn is_empty_element(&self) -> bool {
882        true
883    }
884}
885
886impl ToXml for EGExtensionList {
887    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
888        #[cfg(feature = "extra-children")]
889        let mut extra_iter = self.extra_children.iter().peekable();
890        #[cfg(feature = "extra-children")]
891        let mut emit_idx: usize = 0;
892        for item in &self.ext {
893            #[cfg(feature = "extra-children")]
894            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
895                extra_iter
896                    .next()
897                    .unwrap()
898                    .node
899                    .write_to(writer)
900                    .map_err(SerializeError::from)?;
901            }
902            item.write_element("ext", writer)?;
903            #[cfg(feature = "extra-children")]
904            {
905                emit_idx += 1;
906            }
907        }
908        #[cfg(feature = "extra-children")]
909        for extra in extra_iter {
910            extra.node.write_to(writer).map_err(SerializeError::from)?;
911        }
912        Ok(())
913    }
914
915    fn is_empty_element(&self) -> bool {
916        if !self.ext.is_empty() {
917            return false;
918        }
919        #[cfg(feature = "extra-children")]
920        if !self.extra_children.is_empty() {
921            return false;
922        }
923        true
924    }
925}
926
927impl ToXml for ExtensionList {
928    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
929        #[cfg(feature = "extra-children")]
930        let mut extra_iter = self.extra_children.iter().peekable();
931        #[cfg(feature = "extra-children")]
932        let mut emit_idx: usize = 0;
933        for item in &self.ext {
934            #[cfg(feature = "extra-children")]
935            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
936                extra_iter
937                    .next()
938                    .unwrap()
939                    .node
940                    .write_to(writer)
941                    .map_err(SerializeError::from)?;
942            }
943            item.write_element("ext", writer)?;
944            #[cfg(feature = "extra-children")]
945            {
946                emit_idx += 1;
947            }
948        }
949        #[cfg(feature = "extra-children")]
950        for extra in extra_iter {
951            extra.node.write_to(writer).map_err(SerializeError::from)?;
952        }
953        Ok(())
954    }
955
956    fn is_empty_element(&self) -> bool {
957        if !self.ext.is_empty() {
958            return false;
959        }
960        #[cfg(feature = "extra-children")]
961        if !self.extra_children.is_empty() {
962            return false;
963        }
964        true
965    }
966}
967
968impl ToXml for CalcChain {
969    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
970        #[cfg(feature = "extra-children")]
971        let mut extra_iter = self.extra_children.iter().peekable();
972        #[cfg(feature = "extra-children")]
973        let mut emit_idx: usize = 0;
974        #[cfg(feature = "sml-formulas")]
975        for item in &self.cells {
976            #[cfg(feature = "extra-children")]
977            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
978                extra_iter
979                    .next()
980                    .unwrap()
981                    .node
982                    .write_to(writer)
983                    .map_err(SerializeError::from)?;
984            }
985            item.write_element("c", writer)?;
986            #[cfg(feature = "extra-children")]
987            {
988                emit_idx += 1;
989            }
990        }
991        #[cfg(feature = "extra-children")]
992        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
993            extra_iter
994                .next()
995                .unwrap()
996                .node
997                .write_to(writer)
998                .map_err(SerializeError::from)?;
999        }
1000        #[cfg(feature = "sml-extensions")]
1001        if let Some(ref val) = self.extension_list {
1002            val.write_element("extLst", writer)?;
1003        }
1004        #[cfg(feature = "extra-children")]
1005        {
1006            emit_idx += 1;
1007        }
1008        #[cfg(feature = "extra-children")]
1009        for extra in extra_iter {
1010            extra.node.write_to(writer).map_err(SerializeError::from)?;
1011        }
1012        Ok(())
1013    }
1014
1015    fn is_empty_element(&self) -> bool {
1016        #[cfg(feature = "sml-formulas")]
1017        if !self.cells.is_empty() {
1018            return false;
1019        }
1020        #[cfg(feature = "sml-extensions")]
1021        if self.extension_list.is_some() {
1022            return false;
1023        }
1024        #[cfg(feature = "extra-children")]
1025        if !self.extra_children.is_empty() {
1026            return false;
1027        }
1028        true
1029    }
1030}
1031
1032impl ToXml for CalcCell {
1033    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1034        #[allow(unused_mut)]
1035        let mut start = start;
1036        {
1037            let val = &self._any;
1038            start.push_attribute(("_any", val.as_str()));
1039        }
1040        #[cfg(feature = "sml-formulas")]
1041        if let Some(ref val) = self.i {
1042            {
1043                let s = val.to_string();
1044                start.push_attribute(("i", s.as_str()));
1045            }
1046        }
1047        #[cfg(feature = "sml-formulas")]
1048        if let Some(ref val) = self.style_index {
1049            start.push_attribute(("s", if *val { "1" } else { "0" }));
1050        }
1051        #[cfg(feature = "sml-formulas")]
1052        if let Some(ref val) = self.l {
1053            start.push_attribute(("l", if *val { "1" } else { "0" }));
1054        }
1055        #[cfg(feature = "sml-formulas")]
1056        if let Some(ref val) = self.cell_type {
1057            start.push_attribute(("t", if *val { "1" } else { "0" }));
1058        }
1059        #[cfg(feature = "sml-formulas")]
1060        if let Some(ref val) = self.a {
1061            start.push_attribute(("a", if *val { "1" } else { "0" }));
1062        }
1063        #[cfg(feature = "extra-attrs")]
1064        for (key, value) in &self.extra_attrs {
1065            start.push_attribute((key.as_str(), value.as_str()));
1066        }
1067        start
1068    }
1069
1070    fn is_empty_element(&self) -> bool {
1071        true
1072    }
1073}
1074
1075impl ToXml for Comments {
1076    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1077        #[cfg(feature = "extra-children")]
1078        let mut extra_iter = self.extra_children.iter().peekable();
1079        #[cfg(feature = "extra-children")]
1080        let mut emit_idx: usize = 0;
1081        #[cfg(feature = "extra-children")]
1082        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1083            extra_iter
1084                .next()
1085                .unwrap()
1086                .node
1087                .write_to(writer)
1088                .map_err(SerializeError::from)?;
1089        }
1090        {
1091            let val = &self.authors;
1092            val.write_element("authors", writer)?;
1093        }
1094        #[cfg(feature = "extra-children")]
1095        {
1096            emit_idx += 1;
1097        }
1098        #[cfg(feature = "extra-children")]
1099        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1100            extra_iter
1101                .next()
1102                .unwrap()
1103                .node
1104                .write_to(writer)
1105                .map_err(SerializeError::from)?;
1106        }
1107        {
1108            let val = &self.comment_list;
1109            val.write_element("commentList", writer)?;
1110        }
1111        #[cfg(feature = "extra-children")]
1112        {
1113            emit_idx += 1;
1114        }
1115        #[cfg(feature = "extra-children")]
1116        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1117            extra_iter
1118                .next()
1119                .unwrap()
1120                .node
1121                .write_to(writer)
1122                .map_err(SerializeError::from)?;
1123        }
1124        if let Some(ref val) = self.extension_list {
1125            val.write_element("extLst", writer)?;
1126        }
1127        #[cfg(feature = "extra-children")]
1128        {
1129            emit_idx += 1;
1130        }
1131        #[cfg(feature = "extra-children")]
1132        for extra in extra_iter {
1133            extra.node.write_to(writer).map_err(SerializeError::from)?;
1134        }
1135        Ok(())
1136    }
1137
1138    fn is_empty_element(&self) -> bool {
1139        false
1140    }
1141}
1142
1143impl ToXml for Authors {
1144    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1145        #[cfg(feature = "extra-children")]
1146        let mut extra_iter = self.extra_children.iter().peekable();
1147        #[cfg(feature = "extra-children")]
1148        let mut emit_idx: usize = 0;
1149        for item in &self.author {
1150            #[cfg(feature = "extra-children")]
1151            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1152                extra_iter
1153                    .next()
1154                    .unwrap()
1155                    .node
1156                    .write_to(writer)
1157                    .map_err(SerializeError::from)?;
1158            }
1159            {
1160                let start = BytesStart::new("author");
1161                writer.write_event(Event::Start(start))?;
1162                writer.write_event(Event::Text(BytesText::new(item.as_str())))?;
1163                writer.write_event(Event::End(BytesEnd::new("author")))?;
1164            }
1165            #[cfg(feature = "extra-children")]
1166            {
1167                emit_idx += 1;
1168            }
1169        }
1170        #[cfg(feature = "extra-children")]
1171        for extra in extra_iter {
1172            extra.node.write_to(writer).map_err(SerializeError::from)?;
1173        }
1174        Ok(())
1175    }
1176
1177    fn is_empty_element(&self) -> bool {
1178        if !self.author.is_empty() {
1179            return false;
1180        }
1181        #[cfg(feature = "extra-children")]
1182        if !self.extra_children.is_empty() {
1183            return false;
1184        }
1185        true
1186    }
1187}
1188
1189impl ToXml for CommentList {
1190    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1191        #[cfg(feature = "extra-children")]
1192        let mut extra_iter = self.extra_children.iter().peekable();
1193        #[cfg(feature = "extra-children")]
1194        let mut emit_idx: usize = 0;
1195        for item in &self.comment {
1196            #[cfg(feature = "extra-children")]
1197            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1198                extra_iter
1199                    .next()
1200                    .unwrap()
1201                    .node
1202                    .write_to(writer)
1203                    .map_err(SerializeError::from)?;
1204            }
1205            item.write_element("comment", writer)?;
1206            #[cfg(feature = "extra-children")]
1207            {
1208                emit_idx += 1;
1209            }
1210        }
1211        #[cfg(feature = "extra-children")]
1212        for extra in extra_iter {
1213            extra.node.write_to(writer).map_err(SerializeError::from)?;
1214        }
1215        Ok(())
1216    }
1217
1218    fn is_empty_element(&self) -> bool {
1219        if !self.comment.is_empty() {
1220            return false;
1221        }
1222        #[cfg(feature = "extra-children")]
1223        if !self.extra_children.is_empty() {
1224            return false;
1225        }
1226        true
1227    }
1228}
1229
1230impl ToXml for Comment {
1231    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1232        #[allow(unused_mut)]
1233        let mut start = start;
1234        #[cfg(feature = "sml-comments")]
1235        {
1236            let val = &self.reference;
1237            start.push_attribute(("ref", val.as_str()));
1238        }
1239        #[cfg(feature = "sml-comments")]
1240        {
1241            let val = &self.author_id;
1242            {
1243                let s = val.to_string();
1244                start.push_attribute(("authorId", s.as_str()));
1245            }
1246        }
1247        #[cfg(feature = "sml-comments")]
1248        if let Some(ref val) = self.guid {
1249            start.push_attribute(("guid", val.as_str()));
1250        }
1251        #[cfg(feature = "sml-comments")]
1252        if let Some(ref val) = self.shape_id {
1253            {
1254                let s = val.to_string();
1255                start.push_attribute(("shapeId", s.as_str()));
1256            }
1257        }
1258        #[cfg(feature = "extra-attrs")]
1259        for (key, value) in &self.extra_attrs {
1260            start.push_attribute((key.as_str(), value.as_str()));
1261        }
1262        start
1263    }
1264
1265    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1266        #[cfg(feature = "extra-children")]
1267        let mut extra_iter = self.extra_children.iter().peekable();
1268        #[cfg(feature = "extra-children")]
1269        let mut emit_idx: usize = 0;
1270        #[cfg(feature = "extra-children")]
1271        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1272            extra_iter
1273                .next()
1274                .unwrap()
1275                .node
1276                .write_to(writer)
1277                .map_err(SerializeError::from)?;
1278        }
1279        #[cfg(feature = "sml-comments")]
1280        {
1281            let val = &self.text;
1282            val.write_element("text", writer)?;
1283        }
1284        #[cfg(feature = "extra-children")]
1285        {
1286            emit_idx += 1;
1287        }
1288        #[cfg(feature = "extra-children")]
1289        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1290            extra_iter
1291                .next()
1292                .unwrap()
1293                .node
1294                .write_to(writer)
1295                .map_err(SerializeError::from)?;
1296        }
1297        if let Some(ref val) = self.comment_pr {
1298            val.write_element("commentPr", writer)?;
1299        }
1300        #[cfg(feature = "extra-children")]
1301        {
1302            emit_idx += 1;
1303        }
1304        #[cfg(feature = "extra-children")]
1305        for extra in extra_iter {
1306            extra.node.write_to(writer).map_err(SerializeError::from)?;
1307        }
1308        Ok(())
1309    }
1310
1311    fn is_empty_element(&self) -> bool {
1312        #[cfg(feature = "sml-comments")]
1313        return false;
1314        if self.comment_pr.is_some() {
1315            return false;
1316        }
1317        #[cfg(feature = "extra-children")]
1318        if !self.extra_children.is_empty() {
1319            return false;
1320        }
1321        true
1322    }
1323}
1324
1325impl ToXml for CTCommentPr {
1326    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1327        #[allow(unused_mut)]
1328        let mut start = start;
1329        if let Some(ref val) = self.locked {
1330            start.push_attribute(("locked", if *val { "1" } else { "0" }));
1331        }
1332        if let Some(ref val) = self.default_size {
1333            start.push_attribute(("defaultSize", if *val { "1" } else { "0" }));
1334        }
1335        if let Some(ref val) = self.print {
1336            start.push_attribute(("print", if *val { "1" } else { "0" }));
1337        }
1338        if let Some(ref val) = self.disabled {
1339            start.push_attribute(("disabled", if *val { "1" } else { "0" }));
1340        }
1341        if let Some(ref val) = self.auto_fill {
1342            start.push_attribute(("autoFill", if *val { "1" } else { "0" }));
1343        }
1344        if let Some(ref val) = self.auto_line {
1345            start.push_attribute(("autoLine", if *val { "1" } else { "0" }));
1346        }
1347        if let Some(ref val) = self.alt_text {
1348            start.push_attribute(("altText", val.as_str()));
1349        }
1350        if let Some(ref val) = self.text_h_align {
1351            {
1352                let s = val.to_string();
1353                start.push_attribute(("textHAlign", s.as_str()));
1354            }
1355        }
1356        if let Some(ref val) = self.text_v_align {
1357            {
1358                let s = val.to_string();
1359                start.push_attribute(("textVAlign", s.as_str()));
1360            }
1361        }
1362        if let Some(ref val) = self.lock_text {
1363            start.push_attribute(("lockText", if *val { "1" } else { "0" }));
1364        }
1365        if let Some(ref val) = self.just_last_x {
1366            start.push_attribute(("justLastX", if *val { "1" } else { "0" }));
1367        }
1368        if let Some(ref val) = self.auto_scale {
1369            start.push_attribute(("autoScale", if *val { "1" } else { "0" }));
1370        }
1371        #[cfg(feature = "extra-attrs")]
1372        for (key, value) in &self.extra_attrs {
1373            start.push_attribute((key.as_str(), value.as_str()));
1374        }
1375        start
1376    }
1377
1378    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1379        #[cfg(feature = "extra-children")]
1380        let mut extra_iter = self.extra_children.iter().peekable();
1381        #[cfg(feature = "extra-children")]
1382        let mut emit_idx: usize = 0;
1383        #[cfg(feature = "extra-children")]
1384        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1385            extra_iter
1386                .next()
1387                .unwrap()
1388                .node
1389                .write_to(writer)
1390                .map_err(SerializeError::from)?;
1391        }
1392        {
1393            let val = &self.anchor;
1394            val.write_element("anchor", writer)?;
1395        }
1396        #[cfg(feature = "extra-children")]
1397        {
1398            emit_idx += 1;
1399        }
1400        #[cfg(feature = "extra-children")]
1401        for extra in extra_iter {
1402            extra.node.write_to(writer).map_err(SerializeError::from)?;
1403        }
1404        Ok(())
1405    }
1406
1407    fn is_empty_element(&self) -> bool {
1408        false
1409    }
1410}
1411
1412impl ToXml for MapInfo {
1413    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1414        #[allow(unused_mut)]
1415        let mut start = start;
1416        {
1417            let val = &self.selection_namespaces;
1418            start.push_attribute(("SelectionNamespaces", val.as_str()));
1419        }
1420        #[cfg(feature = "extra-attrs")]
1421        for (key, value) in &self.extra_attrs {
1422            start.push_attribute((key.as_str(), value.as_str()));
1423        }
1424        start
1425    }
1426
1427    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1428        #[cfg(feature = "extra-children")]
1429        let mut extra_iter = self.extra_children.iter().peekable();
1430        #[cfg(feature = "extra-children")]
1431        let mut emit_idx: usize = 0;
1432        for item in &self.schema {
1433            #[cfg(feature = "extra-children")]
1434            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1435                extra_iter
1436                    .next()
1437                    .unwrap()
1438                    .node
1439                    .write_to(writer)
1440                    .map_err(SerializeError::from)?;
1441            }
1442            item.write_element("Schema", writer)?;
1443            #[cfg(feature = "extra-children")]
1444            {
1445                emit_idx += 1;
1446            }
1447        }
1448        for item in &self.map {
1449            #[cfg(feature = "extra-children")]
1450            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1451                extra_iter
1452                    .next()
1453                    .unwrap()
1454                    .node
1455                    .write_to(writer)
1456                    .map_err(SerializeError::from)?;
1457            }
1458            item.write_element("Map", writer)?;
1459            #[cfg(feature = "extra-children")]
1460            {
1461                emit_idx += 1;
1462            }
1463        }
1464        #[cfg(feature = "extra-children")]
1465        for extra in extra_iter {
1466            extra.node.write_to(writer).map_err(SerializeError::from)?;
1467        }
1468        Ok(())
1469    }
1470
1471    fn is_empty_element(&self) -> bool {
1472        if !self.schema.is_empty() {
1473            return false;
1474        }
1475        if !self.map.is_empty() {
1476            return false;
1477        }
1478        #[cfg(feature = "extra-children")]
1479        if !self.extra_children.is_empty() {
1480            return false;
1481        }
1482        true
1483    }
1484}
1485
1486impl ToXml for XmlSchema {
1487    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1488        #[cfg(feature = "extra-children")]
1489        for child in &self.extra_children {
1490            child.node.write_to(writer).map_err(SerializeError::from)?;
1491        }
1492        Ok(())
1493    }
1494
1495    fn is_empty_element(&self) -> bool {
1496        #[cfg(feature = "extra-children")]
1497        if !self.extra_children.is_empty() {
1498            return false;
1499        }
1500        true
1501    }
1502}
1503
1504impl ToXml for XmlMap {
1505    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1506        #[allow(unused_mut)]
1507        let mut start = start;
1508        {
1509            let val = &self.i_d;
1510            {
1511                let s = val.to_string();
1512                start.push_attribute(("ID", s.as_str()));
1513            }
1514        }
1515        {
1516            let val = &self.name;
1517            start.push_attribute(("Name", val.as_str()));
1518        }
1519        {
1520            let val = &self.root_element;
1521            start.push_attribute(("RootElement", val.as_str()));
1522        }
1523        {
1524            let val = &self.schema_i_d;
1525            start.push_attribute(("SchemaID", val.as_str()));
1526        }
1527        {
1528            let val = &self.show_import_export_validation_errors;
1529            start.push_attribute((
1530                "ShowImportExportValidationErrors",
1531                if *val { "1" } else { "0" },
1532            ));
1533        }
1534        {
1535            let val = &self.auto_fit;
1536            start.push_attribute(("AutoFit", if *val { "1" } else { "0" }));
1537        }
1538        {
1539            let val = &self.append;
1540            start.push_attribute(("Append", if *val { "1" } else { "0" }));
1541        }
1542        {
1543            let val = &self.preserve_sort_a_f_layout;
1544            start.push_attribute(("PreserveSortAFLayout", if *val { "1" } else { "0" }));
1545        }
1546        {
1547            let val = &self.preserve_format;
1548            start.push_attribute(("PreserveFormat", if *val { "1" } else { "0" }));
1549        }
1550        #[cfg(feature = "extra-attrs")]
1551        for (key, value) in &self.extra_attrs {
1552            start.push_attribute((key.as_str(), value.as_str()));
1553        }
1554        start
1555    }
1556
1557    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1558        #[cfg(feature = "extra-children")]
1559        let mut extra_iter = self.extra_children.iter().peekable();
1560        #[cfg(feature = "extra-children")]
1561        let mut emit_idx: usize = 0;
1562        #[cfg(feature = "extra-children")]
1563        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1564            extra_iter
1565                .next()
1566                .unwrap()
1567                .node
1568                .write_to(writer)
1569                .map_err(SerializeError::from)?;
1570        }
1571        if let Some(ref val) = self.data_binding {
1572            val.write_element("DataBinding", writer)?;
1573        }
1574        #[cfg(feature = "extra-children")]
1575        {
1576            emit_idx += 1;
1577        }
1578        #[cfg(feature = "extra-children")]
1579        for extra in extra_iter {
1580            extra.node.write_to(writer).map_err(SerializeError::from)?;
1581        }
1582        Ok(())
1583    }
1584
1585    fn is_empty_element(&self) -> bool {
1586        if self.data_binding.is_some() {
1587            return false;
1588        }
1589        #[cfg(feature = "extra-children")]
1590        if !self.extra_children.is_empty() {
1591            return false;
1592        }
1593        true
1594    }
1595}
1596
1597impl ToXml for DataBinding {
1598    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1599        #[allow(unused_mut)]
1600        let mut start = start;
1601        if let Some(ref val) = self.data_binding_name {
1602            start.push_attribute(("DataBindingName", val.as_str()));
1603        }
1604        if let Some(ref val) = self.file_binding {
1605            start.push_attribute(("FileBinding", if *val { "1" } else { "0" }));
1606        }
1607        if let Some(ref val) = self.connection_i_d {
1608            {
1609                let s = val.to_string();
1610                start.push_attribute(("ConnectionID", s.as_str()));
1611            }
1612        }
1613        if let Some(ref val) = self.file_binding_name {
1614            start.push_attribute(("FileBindingName", val.as_str()));
1615        }
1616        {
1617            let val = &self.data_binding_load_mode;
1618            {
1619                let s = val.to_string();
1620                start.push_attribute(("DataBindingLoadMode", s.as_str()));
1621            }
1622        }
1623        #[cfg(feature = "extra-attrs")]
1624        for (key, value) in &self.extra_attrs {
1625            start.push_attribute((key.as_str(), value.as_str()));
1626        }
1627        start
1628    }
1629
1630    fn is_empty_element(&self) -> bool {
1631        true
1632    }
1633}
1634
1635impl ToXml for Connections {
1636    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1637        #[cfg(feature = "extra-children")]
1638        let mut extra_iter = self.extra_children.iter().peekable();
1639        #[cfg(feature = "extra-children")]
1640        let mut emit_idx: usize = 0;
1641        for item in &self.connection {
1642            #[cfg(feature = "extra-children")]
1643            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1644                extra_iter
1645                    .next()
1646                    .unwrap()
1647                    .node
1648                    .write_to(writer)
1649                    .map_err(SerializeError::from)?;
1650            }
1651            item.write_element("connection", writer)?;
1652            #[cfg(feature = "extra-children")]
1653            {
1654                emit_idx += 1;
1655            }
1656        }
1657        #[cfg(feature = "extra-children")]
1658        for extra in extra_iter {
1659            extra.node.write_to(writer).map_err(SerializeError::from)?;
1660        }
1661        Ok(())
1662    }
1663
1664    fn is_empty_element(&self) -> bool {
1665        if !self.connection.is_empty() {
1666            return false;
1667        }
1668        #[cfg(feature = "extra-children")]
1669        if !self.extra_children.is_empty() {
1670            return false;
1671        }
1672        true
1673    }
1674}
1675
1676impl ToXml for Connection {
1677    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1678        #[allow(unused_mut)]
1679        let mut start = start;
1680        {
1681            let val = &self.id;
1682            {
1683                let s = val.to_string();
1684                start.push_attribute(("id", s.as_str()));
1685            }
1686        }
1687        if let Some(ref val) = self.source_file {
1688            start.push_attribute(("sourceFile", val.as_str()));
1689        }
1690        if let Some(ref val) = self.odc_file {
1691            start.push_attribute(("odcFile", val.as_str()));
1692        }
1693        if let Some(ref val) = self.keep_alive {
1694            start.push_attribute(("keepAlive", if *val { "1" } else { "0" }));
1695        }
1696        if let Some(ref val) = self.interval {
1697            {
1698                let s = val.to_string();
1699                start.push_attribute(("interval", s.as_str()));
1700            }
1701        }
1702        if let Some(ref val) = self.name {
1703            start.push_attribute(("name", val.as_str()));
1704        }
1705        if let Some(ref val) = self.description {
1706            start.push_attribute(("description", val.as_str()));
1707        }
1708        if let Some(ref val) = self.r#type {
1709            {
1710                let s = val.to_string();
1711                start.push_attribute(("type", s.as_str()));
1712            }
1713        }
1714        if let Some(ref val) = self.reconnection_method {
1715            {
1716                let s = val.to_string();
1717                start.push_attribute(("reconnectionMethod", s.as_str()));
1718            }
1719        }
1720        {
1721            let val = &self.refreshed_version;
1722            {
1723                let s = val.to_string();
1724                start.push_attribute(("refreshedVersion", s.as_str()));
1725            }
1726        }
1727        if let Some(ref val) = self.min_refreshable_version {
1728            {
1729                let s = val.to_string();
1730                start.push_attribute(("minRefreshableVersion", s.as_str()));
1731            }
1732        }
1733        if let Some(ref val) = self.save_password {
1734            start.push_attribute(("savePassword", if *val { "1" } else { "0" }));
1735        }
1736        if let Some(ref val) = self.new {
1737            start.push_attribute(("new", if *val { "1" } else { "0" }));
1738        }
1739        if let Some(ref val) = self.deleted {
1740            start.push_attribute(("deleted", if *val { "1" } else { "0" }));
1741        }
1742        if let Some(ref val) = self.only_use_connection_file {
1743            start.push_attribute(("onlyUseConnectionFile", if *val { "1" } else { "0" }));
1744        }
1745        if let Some(ref val) = self.background {
1746            start.push_attribute(("background", if *val { "1" } else { "0" }));
1747        }
1748        if let Some(ref val) = self.refresh_on_load {
1749            start.push_attribute(("refreshOnLoad", if *val { "1" } else { "0" }));
1750        }
1751        if let Some(ref val) = self.save_data {
1752            start.push_attribute(("saveData", if *val { "1" } else { "0" }));
1753        }
1754        if let Some(ref val) = self.credentials {
1755            {
1756                let s = val.to_string();
1757                start.push_attribute(("credentials", s.as_str()));
1758            }
1759        }
1760        if let Some(ref val) = self.single_sign_on_id {
1761            start.push_attribute(("singleSignOnId", val.as_str()));
1762        }
1763        #[cfg(feature = "extra-attrs")]
1764        for (key, value) in &self.extra_attrs {
1765            start.push_attribute((key.as_str(), value.as_str()));
1766        }
1767        start
1768    }
1769
1770    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
1771        #[cfg(feature = "extra-children")]
1772        let mut extra_iter = self.extra_children.iter().peekable();
1773        #[cfg(feature = "extra-children")]
1774        let mut emit_idx: usize = 0;
1775        #[cfg(feature = "extra-children")]
1776        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1777            extra_iter
1778                .next()
1779                .unwrap()
1780                .node
1781                .write_to(writer)
1782                .map_err(SerializeError::from)?;
1783        }
1784        if let Some(ref val) = self.db_pr {
1785            val.write_element("dbPr", writer)?;
1786        }
1787        #[cfg(feature = "extra-children")]
1788        {
1789            emit_idx += 1;
1790        }
1791        #[cfg(feature = "extra-children")]
1792        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1793            extra_iter
1794                .next()
1795                .unwrap()
1796                .node
1797                .write_to(writer)
1798                .map_err(SerializeError::from)?;
1799        }
1800        if let Some(ref val) = self.olap_pr {
1801            val.write_element("olapPr", writer)?;
1802        }
1803        #[cfg(feature = "extra-children")]
1804        {
1805            emit_idx += 1;
1806        }
1807        #[cfg(feature = "extra-children")]
1808        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1809            extra_iter
1810                .next()
1811                .unwrap()
1812                .node
1813                .write_to(writer)
1814                .map_err(SerializeError::from)?;
1815        }
1816        if let Some(ref val) = self.web_pr {
1817            val.write_element("webPr", writer)?;
1818        }
1819        #[cfg(feature = "extra-children")]
1820        {
1821            emit_idx += 1;
1822        }
1823        #[cfg(feature = "extra-children")]
1824        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1825            extra_iter
1826                .next()
1827                .unwrap()
1828                .node
1829                .write_to(writer)
1830                .map_err(SerializeError::from)?;
1831        }
1832        if let Some(ref val) = self.text_pr {
1833            val.write_element("textPr", writer)?;
1834        }
1835        #[cfg(feature = "extra-children")]
1836        {
1837            emit_idx += 1;
1838        }
1839        #[cfg(feature = "extra-children")]
1840        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1841            extra_iter
1842                .next()
1843                .unwrap()
1844                .node
1845                .write_to(writer)
1846                .map_err(SerializeError::from)?;
1847        }
1848        if let Some(ref val) = self.parameters {
1849            val.write_element("parameters", writer)?;
1850        }
1851        #[cfg(feature = "extra-children")]
1852        {
1853            emit_idx += 1;
1854        }
1855        #[cfg(feature = "extra-children")]
1856        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
1857            extra_iter
1858                .next()
1859                .unwrap()
1860                .node
1861                .write_to(writer)
1862                .map_err(SerializeError::from)?;
1863        }
1864        if let Some(ref val) = self.extension_list {
1865            val.write_element("extLst", writer)?;
1866        }
1867        #[cfg(feature = "extra-children")]
1868        {
1869            emit_idx += 1;
1870        }
1871        #[cfg(feature = "extra-children")]
1872        for extra in extra_iter {
1873            extra.node.write_to(writer).map_err(SerializeError::from)?;
1874        }
1875        Ok(())
1876    }
1877
1878    fn is_empty_element(&self) -> bool {
1879        if self.db_pr.is_some() {
1880            return false;
1881        }
1882        if self.olap_pr.is_some() {
1883            return false;
1884        }
1885        if self.web_pr.is_some() {
1886            return false;
1887        }
1888        if self.text_pr.is_some() {
1889            return false;
1890        }
1891        if self.parameters.is_some() {
1892            return false;
1893        }
1894        if self.extension_list.is_some() {
1895            return false;
1896        }
1897        #[cfg(feature = "extra-children")]
1898        if !self.extra_children.is_empty() {
1899            return false;
1900        }
1901        true
1902    }
1903}
1904
1905impl ToXml for DatabaseProperties {
1906    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1907        #[allow(unused_mut)]
1908        let mut start = start;
1909        {
1910            let val = &self.connection;
1911            start.push_attribute(("connection", val.as_str()));
1912        }
1913        if let Some(ref val) = self.command {
1914            start.push_attribute(("command", val.as_str()));
1915        }
1916        if let Some(ref val) = self.server_command {
1917            start.push_attribute(("serverCommand", val.as_str()));
1918        }
1919        if let Some(ref val) = self.command_type {
1920            {
1921                let s = val.to_string();
1922                start.push_attribute(("commandType", s.as_str()));
1923            }
1924        }
1925        #[cfg(feature = "extra-attrs")]
1926        for (key, value) in &self.extra_attrs {
1927            start.push_attribute((key.as_str(), value.as_str()));
1928        }
1929        start
1930    }
1931
1932    fn is_empty_element(&self) -> bool {
1933        true
1934    }
1935}
1936
1937impl ToXml for OlapProperties {
1938    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1939        #[allow(unused_mut)]
1940        let mut start = start;
1941        if let Some(ref val) = self.local {
1942            start.push_attribute(("local", if *val { "1" } else { "0" }));
1943        }
1944        if let Some(ref val) = self.local_connection {
1945            start.push_attribute(("localConnection", val.as_str()));
1946        }
1947        if let Some(ref val) = self.local_refresh {
1948            start.push_attribute(("localRefresh", if *val { "1" } else { "0" }));
1949        }
1950        if let Some(ref val) = self.send_locale {
1951            start.push_attribute(("sendLocale", if *val { "1" } else { "0" }));
1952        }
1953        if let Some(ref val) = self.row_drill_count {
1954            {
1955                let s = val.to_string();
1956                start.push_attribute(("rowDrillCount", s.as_str()));
1957            }
1958        }
1959        if let Some(ref val) = self.server_fill {
1960            start.push_attribute(("serverFill", if *val { "1" } else { "0" }));
1961        }
1962        if let Some(ref val) = self.server_number_format {
1963            start.push_attribute(("serverNumberFormat", if *val { "1" } else { "0" }));
1964        }
1965        if let Some(ref val) = self.server_font {
1966            start.push_attribute(("serverFont", if *val { "1" } else { "0" }));
1967        }
1968        if let Some(ref val) = self.server_font_color {
1969            start.push_attribute(("serverFontColor", if *val { "1" } else { "0" }));
1970        }
1971        #[cfg(feature = "extra-attrs")]
1972        for (key, value) in &self.extra_attrs {
1973            start.push_attribute((key.as_str(), value.as_str()));
1974        }
1975        start
1976    }
1977
1978    fn is_empty_element(&self) -> bool {
1979        true
1980    }
1981}
1982
1983impl ToXml for WebQueryProperties {
1984    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
1985        #[allow(unused_mut)]
1986        let mut start = start;
1987        if let Some(ref val) = self.xml {
1988            start.push_attribute(("xml", if *val { "1" } else { "0" }));
1989        }
1990        if let Some(ref val) = self.source_data {
1991            start.push_attribute(("sourceData", if *val { "1" } else { "0" }));
1992        }
1993        if let Some(ref val) = self.parse_pre {
1994            start.push_attribute(("parsePre", if *val { "1" } else { "0" }));
1995        }
1996        if let Some(ref val) = self.consecutive {
1997            start.push_attribute(("consecutive", if *val { "1" } else { "0" }));
1998        }
1999        if let Some(ref val) = self.first_row {
2000            start.push_attribute(("firstRow", if *val { "1" } else { "0" }));
2001        }
2002        if let Some(ref val) = self.xl97 {
2003            start.push_attribute(("xl97", if *val { "1" } else { "0" }));
2004        }
2005        if let Some(ref val) = self.text_dates {
2006            start.push_attribute(("textDates", if *val { "1" } else { "0" }));
2007        }
2008        if let Some(ref val) = self.xl2000 {
2009            start.push_attribute(("xl2000", if *val { "1" } else { "0" }));
2010        }
2011        if let Some(ref val) = self.url {
2012            start.push_attribute(("url", val.as_str()));
2013        }
2014        if let Some(ref val) = self.post {
2015            start.push_attribute(("post", val.as_str()));
2016        }
2017        if let Some(ref val) = self.html_tables {
2018            start.push_attribute(("htmlTables", if *val { "1" } else { "0" }));
2019        }
2020        if let Some(ref val) = self.html_format {
2021            {
2022                let s = val.to_string();
2023                start.push_attribute(("htmlFormat", s.as_str()));
2024            }
2025        }
2026        if let Some(ref val) = self.edit_page {
2027            start.push_attribute(("editPage", val.as_str()));
2028        }
2029        #[cfg(feature = "extra-attrs")]
2030        for (key, value) in &self.extra_attrs {
2031            start.push_attribute((key.as_str(), value.as_str()));
2032        }
2033        start
2034    }
2035
2036    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
2037        #[cfg(feature = "extra-children")]
2038        let mut extra_iter = self.extra_children.iter().peekable();
2039        #[cfg(feature = "extra-children")]
2040        let mut emit_idx: usize = 0;
2041        #[cfg(feature = "extra-children")]
2042        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2043            extra_iter
2044                .next()
2045                .unwrap()
2046                .node
2047                .write_to(writer)
2048                .map_err(SerializeError::from)?;
2049        }
2050        if let Some(ref val) = self.tables {
2051            val.write_element("tables", writer)?;
2052        }
2053        #[cfg(feature = "extra-children")]
2054        {
2055            emit_idx += 1;
2056        }
2057        #[cfg(feature = "extra-children")]
2058        for extra in extra_iter {
2059            extra.node.write_to(writer).map_err(SerializeError::from)?;
2060        }
2061        Ok(())
2062    }
2063
2064    fn is_empty_element(&self) -> bool {
2065        if self.tables.is_some() {
2066            return false;
2067        }
2068        #[cfg(feature = "extra-children")]
2069        if !self.extra_children.is_empty() {
2070            return false;
2071        }
2072        true
2073    }
2074}
2075
2076impl ToXml for Parameters {
2077    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2078        #[allow(unused_mut)]
2079        let mut start = start;
2080        if let Some(ref val) = self.count {
2081            {
2082                let s = val.to_string();
2083                start.push_attribute(("count", s.as_str()));
2084            }
2085        }
2086        #[cfg(feature = "extra-attrs")]
2087        for (key, value) in &self.extra_attrs {
2088            start.push_attribute((key.as_str(), value.as_str()));
2089        }
2090        start
2091    }
2092
2093    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
2094        #[cfg(feature = "extra-children")]
2095        let mut extra_iter = self.extra_children.iter().peekable();
2096        #[cfg(feature = "extra-children")]
2097        let mut emit_idx: usize = 0;
2098        for item in &self.parameter {
2099            #[cfg(feature = "extra-children")]
2100            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2101                extra_iter
2102                    .next()
2103                    .unwrap()
2104                    .node
2105                    .write_to(writer)
2106                    .map_err(SerializeError::from)?;
2107            }
2108            item.write_element("parameter", writer)?;
2109            #[cfg(feature = "extra-children")]
2110            {
2111                emit_idx += 1;
2112            }
2113        }
2114        #[cfg(feature = "extra-children")]
2115        for extra in extra_iter {
2116            extra.node.write_to(writer).map_err(SerializeError::from)?;
2117        }
2118        Ok(())
2119    }
2120
2121    fn is_empty_element(&self) -> bool {
2122        if !self.parameter.is_empty() {
2123            return false;
2124        }
2125        #[cfg(feature = "extra-children")]
2126        if !self.extra_children.is_empty() {
2127            return false;
2128        }
2129        true
2130    }
2131}
2132
2133impl ToXml for Parameter {
2134    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2135        #[allow(unused_mut)]
2136        let mut start = start;
2137        if let Some(ref val) = self.name {
2138            start.push_attribute(("name", val.as_str()));
2139        }
2140        if let Some(ref val) = self.sql_type {
2141            {
2142                let s = val.to_string();
2143                start.push_attribute(("sqlType", s.as_str()));
2144            }
2145        }
2146        if let Some(ref val) = self.parameter_type {
2147            {
2148                let s = val.to_string();
2149                start.push_attribute(("parameterType", s.as_str()));
2150            }
2151        }
2152        if let Some(ref val) = self.refresh_on_change {
2153            start.push_attribute(("refreshOnChange", if *val { "1" } else { "0" }));
2154        }
2155        if let Some(ref val) = self.prompt {
2156            start.push_attribute(("prompt", val.as_str()));
2157        }
2158        if let Some(ref val) = self.boolean {
2159            start.push_attribute(("boolean", if *val { "1" } else { "0" }));
2160        }
2161        if let Some(ref val) = self.double {
2162            {
2163                let s = val.to_string();
2164                start.push_attribute(("double", s.as_str()));
2165            }
2166        }
2167        if let Some(ref val) = self.integer {
2168            {
2169                let s = val.to_string();
2170                start.push_attribute(("integer", s.as_str()));
2171            }
2172        }
2173        if let Some(ref val) = self.string {
2174            start.push_attribute(("string", val.as_str()));
2175        }
2176        if let Some(ref val) = self.cell {
2177            start.push_attribute(("cell", val.as_str()));
2178        }
2179        #[cfg(feature = "extra-attrs")]
2180        for (key, value) in &self.extra_attrs {
2181            start.push_attribute((key.as_str(), value.as_str()));
2182        }
2183        start
2184    }
2185
2186    fn is_empty_element(&self) -> bool {
2187        true
2188    }
2189}
2190
2191impl ToXml for DataTables {
2192    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2193        #[allow(unused_mut)]
2194        let mut start = start;
2195        if let Some(ref val) = self.count {
2196            {
2197                let s = val.to_string();
2198                start.push_attribute(("count", s.as_str()));
2199            }
2200        }
2201        #[cfg(feature = "extra-attrs")]
2202        for (key, value) in &self.extra_attrs {
2203            start.push_attribute((key.as_str(), value.as_str()));
2204        }
2205        start
2206    }
2207
2208    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
2209        #[cfg(feature = "extra-children")]
2210        let mut extra_iter = self.extra_children.iter().peekable();
2211        #[cfg(feature = "extra-children")]
2212        let mut emit_idx: usize = 0;
2213        for item in &self.m {
2214            #[cfg(feature = "extra-children")]
2215            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2216                extra_iter
2217                    .next()
2218                    .unwrap()
2219                    .node
2220                    .write_to(writer)
2221                    .map_err(SerializeError::from)?;
2222            }
2223            item.write_element("m", writer)?;
2224            #[cfg(feature = "extra-children")]
2225            {
2226                emit_idx += 1;
2227            }
2228        }
2229        for item in &self.style_index {
2230            #[cfg(feature = "extra-children")]
2231            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2232                extra_iter
2233                    .next()
2234                    .unwrap()
2235                    .node
2236                    .write_to(writer)
2237                    .map_err(SerializeError::from)?;
2238            }
2239            item.write_element("s", writer)?;
2240            #[cfg(feature = "extra-children")]
2241            {
2242                emit_idx += 1;
2243            }
2244        }
2245        for item in &self.x {
2246            #[cfg(feature = "extra-children")]
2247            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2248                extra_iter
2249                    .next()
2250                    .unwrap()
2251                    .node
2252                    .write_to(writer)
2253                    .map_err(SerializeError::from)?;
2254            }
2255            item.write_element("x", writer)?;
2256            #[cfg(feature = "extra-children")]
2257            {
2258                emit_idx += 1;
2259            }
2260        }
2261        #[cfg(feature = "extra-children")]
2262        for extra in extra_iter {
2263            extra.node.write_to(writer).map_err(SerializeError::from)?;
2264        }
2265        Ok(())
2266    }
2267
2268    fn is_empty_element(&self) -> bool {
2269        if !self.m.is_empty() {
2270            return false;
2271        }
2272        if !self.style_index.is_empty() {
2273            return false;
2274        }
2275        if !self.x.is_empty() {
2276            return false;
2277        }
2278        #[cfg(feature = "extra-children")]
2279        if !self.extra_children.is_empty() {
2280            return false;
2281        }
2282        true
2283    }
2284}
2285
2286impl ToXml for TableMissing {
2287    fn is_empty_element(&self) -> bool {
2288        true
2289    }
2290}
2291
2292impl ToXml for TextImportProperties {
2293    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2294        #[allow(unused_mut)]
2295        let mut start = start;
2296        if let Some(ref val) = self.prompt {
2297            start.push_attribute(("prompt", if *val { "1" } else { "0" }));
2298        }
2299        if let Some(ref val) = self.file_type {
2300            {
2301                let s = val.to_string();
2302                start.push_attribute(("fileType", s.as_str()));
2303            }
2304        }
2305        if let Some(ref val) = self.code_page {
2306            {
2307                let s = val.to_string();
2308                start.push_attribute(("codePage", s.as_str()));
2309            }
2310        }
2311        if let Some(ref val) = self.character_set {
2312            start.push_attribute(("characterSet", val.as_str()));
2313        }
2314        if let Some(ref val) = self.first_row {
2315            {
2316                let s = val.to_string();
2317                start.push_attribute(("firstRow", s.as_str()));
2318            }
2319        }
2320        if let Some(ref val) = self.source_file {
2321            start.push_attribute(("sourceFile", val.as_str()));
2322        }
2323        if let Some(ref val) = self.delimited {
2324            start.push_attribute(("delimited", if *val { "1" } else { "0" }));
2325        }
2326        if let Some(ref val) = self.decimal {
2327            start.push_attribute(("decimal", val.as_str()));
2328        }
2329        if let Some(ref val) = self.thousands {
2330            start.push_attribute(("thousands", val.as_str()));
2331        }
2332        if let Some(ref val) = self.tab {
2333            start.push_attribute(("tab", if *val { "1" } else { "0" }));
2334        }
2335        if let Some(ref val) = self.space {
2336            start.push_attribute(("space", if *val { "1" } else { "0" }));
2337        }
2338        if let Some(ref val) = self.comma {
2339            start.push_attribute(("comma", if *val { "1" } else { "0" }));
2340        }
2341        if let Some(ref val) = self.semicolon {
2342            start.push_attribute(("semicolon", if *val { "1" } else { "0" }));
2343        }
2344        if let Some(ref val) = self.consecutive {
2345            start.push_attribute(("consecutive", if *val { "1" } else { "0" }));
2346        }
2347        if let Some(ref val) = self.qualifier {
2348            {
2349                let s = val.to_string();
2350                start.push_attribute(("qualifier", s.as_str()));
2351            }
2352        }
2353        if let Some(ref val) = self.delimiter {
2354            start.push_attribute(("delimiter", val.as_str()));
2355        }
2356        #[cfg(feature = "extra-attrs")]
2357        for (key, value) in &self.extra_attrs {
2358            start.push_attribute((key.as_str(), value.as_str()));
2359        }
2360        start
2361    }
2362
2363    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
2364        #[cfg(feature = "extra-children")]
2365        let mut extra_iter = self.extra_children.iter().peekable();
2366        #[cfg(feature = "extra-children")]
2367        let mut emit_idx: usize = 0;
2368        #[cfg(feature = "extra-children")]
2369        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2370            extra_iter
2371                .next()
2372                .unwrap()
2373                .node
2374                .write_to(writer)
2375                .map_err(SerializeError::from)?;
2376        }
2377        if let Some(ref val) = self.text_fields {
2378            val.write_element("textFields", writer)?;
2379        }
2380        #[cfg(feature = "extra-children")]
2381        {
2382            emit_idx += 1;
2383        }
2384        #[cfg(feature = "extra-children")]
2385        for extra in extra_iter {
2386            extra.node.write_to(writer).map_err(SerializeError::from)?;
2387        }
2388        Ok(())
2389    }
2390
2391    fn is_empty_element(&self) -> bool {
2392        if self.text_fields.is_some() {
2393            return false;
2394        }
2395        #[cfg(feature = "extra-children")]
2396        if !self.extra_children.is_empty() {
2397            return false;
2398        }
2399        true
2400    }
2401}
2402
2403impl ToXml for TextFields {
2404    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2405        #[allow(unused_mut)]
2406        let mut start = start;
2407        if let Some(ref val) = self.count {
2408            {
2409                let s = val.to_string();
2410                start.push_attribute(("count", s.as_str()));
2411            }
2412        }
2413        #[cfg(feature = "extra-attrs")]
2414        for (key, value) in &self.extra_attrs {
2415            start.push_attribute((key.as_str(), value.as_str()));
2416        }
2417        start
2418    }
2419
2420    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
2421        #[cfg(feature = "extra-children")]
2422        let mut extra_iter = self.extra_children.iter().peekable();
2423        #[cfg(feature = "extra-children")]
2424        let mut emit_idx: usize = 0;
2425        for item in &self.text_field {
2426            #[cfg(feature = "extra-children")]
2427            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2428                extra_iter
2429                    .next()
2430                    .unwrap()
2431                    .node
2432                    .write_to(writer)
2433                    .map_err(SerializeError::from)?;
2434            }
2435            item.write_element("textField", writer)?;
2436            #[cfg(feature = "extra-children")]
2437            {
2438                emit_idx += 1;
2439            }
2440        }
2441        #[cfg(feature = "extra-children")]
2442        for extra in extra_iter {
2443            extra.node.write_to(writer).map_err(SerializeError::from)?;
2444        }
2445        Ok(())
2446    }
2447
2448    fn is_empty_element(&self) -> bool {
2449        if !self.text_field.is_empty() {
2450            return false;
2451        }
2452        #[cfg(feature = "extra-children")]
2453        if !self.extra_children.is_empty() {
2454            return false;
2455        }
2456        true
2457    }
2458}
2459
2460impl ToXml for TextField {
2461    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2462        #[allow(unused_mut)]
2463        let mut start = start;
2464        if let Some(ref val) = self.r#type {
2465            {
2466                let s = val.to_string();
2467                start.push_attribute(("type", s.as_str()));
2468            }
2469        }
2470        if let Some(ref val) = self.position {
2471            {
2472                let s = val.to_string();
2473                start.push_attribute(("position", s.as_str()));
2474            }
2475        }
2476        #[cfg(feature = "extra-attrs")]
2477        for (key, value) in &self.extra_attrs {
2478            start.push_attribute((key.as_str(), value.as_str()));
2479        }
2480        start
2481    }
2482
2483    fn is_empty_element(&self) -> bool {
2484        true
2485    }
2486}
2487
2488impl ToXml for PivotCacheDefinition {
2489    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2490        #[allow(unused_mut)]
2491        let mut start = start;
2492        if let Some(ref val) = self.id {
2493            start.push_attribute(("r:id", val.as_str()));
2494        }
2495        if let Some(ref val) = self.invalid {
2496            start.push_attribute(("invalid", if *val { "1" } else { "0" }));
2497        }
2498        if let Some(ref val) = self.save_data {
2499            start.push_attribute(("saveData", if *val { "1" } else { "0" }));
2500        }
2501        if let Some(ref val) = self.refresh_on_load {
2502            start.push_attribute(("refreshOnLoad", if *val { "1" } else { "0" }));
2503        }
2504        if let Some(ref val) = self.optimize_memory {
2505            start.push_attribute(("optimizeMemory", if *val { "1" } else { "0" }));
2506        }
2507        if let Some(ref val) = self.enable_refresh {
2508            start.push_attribute(("enableRefresh", if *val { "1" } else { "0" }));
2509        }
2510        if let Some(ref val) = self.refreshed_by {
2511            start.push_attribute(("refreshedBy", val.as_str()));
2512        }
2513        if let Some(ref val) = self.refreshed_date {
2514            {
2515                let s = val.to_string();
2516                start.push_attribute(("refreshedDate", s.as_str()));
2517            }
2518        }
2519        if let Some(ref val) = self.refreshed_date_iso {
2520            start.push_attribute(("refreshedDateIso", val.as_str()));
2521        }
2522        if let Some(ref val) = self.background_query {
2523            start.push_attribute(("backgroundQuery", if *val { "1" } else { "0" }));
2524        }
2525        if let Some(ref val) = self.missing_items_limit {
2526            {
2527                let s = val.to_string();
2528                start.push_attribute(("missingItemsLimit", s.as_str()));
2529            }
2530        }
2531        if let Some(ref val) = self.created_version {
2532            {
2533                let s = val.to_string();
2534                start.push_attribute(("createdVersion", s.as_str()));
2535            }
2536        }
2537        if let Some(ref val) = self.refreshed_version {
2538            {
2539                let s = val.to_string();
2540                start.push_attribute(("refreshedVersion", s.as_str()));
2541            }
2542        }
2543        if let Some(ref val) = self.min_refreshable_version {
2544            {
2545                let s = val.to_string();
2546                start.push_attribute(("minRefreshableVersion", s.as_str()));
2547            }
2548        }
2549        if let Some(ref val) = self.record_count {
2550            {
2551                let s = val.to_string();
2552                start.push_attribute(("recordCount", s.as_str()));
2553            }
2554        }
2555        if let Some(ref val) = self.upgrade_on_refresh {
2556            start.push_attribute(("upgradeOnRefresh", if *val { "1" } else { "0" }));
2557        }
2558        if let Some(ref val) = self.tuple_cache {
2559            start.push_attribute(("tupleCache", if *val { "1" } else { "0" }));
2560        }
2561        if let Some(ref val) = self.support_subquery {
2562            start.push_attribute(("supportSubquery", if *val { "1" } else { "0" }));
2563        }
2564        if let Some(ref val) = self.support_advanced_drill {
2565            start.push_attribute(("supportAdvancedDrill", if *val { "1" } else { "0" }));
2566        }
2567        #[cfg(feature = "extra-attrs")]
2568        for (key, value) in &self.extra_attrs {
2569            start.push_attribute((key.as_str(), value.as_str()));
2570        }
2571        start
2572    }
2573
2574    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
2575        #[cfg(feature = "extra-children")]
2576        let mut extra_iter = self.extra_children.iter().peekable();
2577        #[cfg(feature = "extra-children")]
2578        let mut emit_idx: usize = 0;
2579        #[cfg(feature = "extra-children")]
2580        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2581            extra_iter
2582                .next()
2583                .unwrap()
2584                .node
2585                .write_to(writer)
2586                .map_err(SerializeError::from)?;
2587        }
2588        {
2589            let val = &self.cache_source;
2590            val.write_element("cacheSource", writer)?;
2591        }
2592        #[cfg(feature = "extra-children")]
2593        {
2594            emit_idx += 1;
2595        }
2596        #[cfg(feature = "extra-children")]
2597        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2598            extra_iter
2599                .next()
2600                .unwrap()
2601                .node
2602                .write_to(writer)
2603                .map_err(SerializeError::from)?;
2604        }
2605        {
2606            let val = &self.cache_fields;
2607            val.write_element("cacheFields", writer)?;
2608        }
2609        #[cfg(feature = "extra-children")]
2610        {
2611            emit_idx += 1;
2612        }
2613        #[cfg(feature = "extra-children")]
2614        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2615            extra_iter
2616                .next()
2617                .unwrap()
2618                .node
2619                .write_to(writer)
2620                .map_err(SerializeError::from)?;
2621        }
2622        if let Some(ref val) = self.cache_hierarchies {
2623            val.write_element("cacheHierarchies", writer)?;
2624        }
2625        #[cfg(feature = "extra-children")]
2626        {
2627            emit_idx += 1;
2628        }
2629        #[cfg(feature = "extra-children")]
2630        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2631            extra_iter
2632                .next()
2633                .unwrap()
2634                .node
2635                .write_to(writer)
2636                .map_err(SerializeError::from)?;
2637        }
2638        if let Some(ref val) = self.kpis {
2639            val.write_element("kpis", writer)?;
2640        }
2641        #[cfg(feature = "extra-children")]
2642        {
2643            emit_idx += 1;
2644        }
2645        #[cfg(feature = "extra-children")]
2646        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2647            extra_iter
2648                .next()
2649                .unwrap()
2650                .node
2651                .write_to(writer)
2652                .map_err(SerializeError::from)?;
2653        }
2654        if let Some(ref val) = self.calculated_items {
2655            val.write_element("calculatedItems", writer)?;
2656        }
2657        #[cfg(feature = "extra-children")]
2658        {
2659            emit_idx += 1;
2660        }
2661        #[cfg(feature = "extra-children")]
2662        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2663            extra_iter
2664                .next()
2665                .unwrap()
2666                .node
2667                .write_to(writer)
2668                .map_err(SerializeError::from)?;
2669        }
2670        if let Some(ref val) = self.calculated_members {
2671            val.write_element("calculatedMembers", writer)?;
2672        }
2673        #[cfg(feature = "extra-children")]
2674        {
2675            emit_idx += 1;
2676        }
2677        #[cfg(feature = "extra-children")]
2678        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2679            extra_iter
2680                .next()
2681                .unwrap()
2682                .node
2683                .write_to(writer)
2684                .map_err(SerializeError::from)?;
2685        }
2686        if let Some(ref val) = self.dimensions {
2687            val.write_element("dimensions", writer)?;
2688        }
2689        #[cfg(feature = "extra-children")]
2690        {
2691            emit_idx += 1;
2692        }
2693        #[cfg(feature = "extra-children")]
2694        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2695            extra_iter
2696                .next()
2697                .unwrap()
2698                .node
2699                .write_to(writer)
2700                .map_err(SerializeError::from)?;
2701        }
2702        if let Some(ref val) = self.measure_groups {
2703            val.write_element("measureGroups", writer)?;
2704        }
2705        #[cfg(feature = "extra-children")]
2706        {
2707            emit_idx += 1;
2708        }
2709        #[cfg(feature = "extra-children")]
2710        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2711            extra_iter
2712                .next()
2713                .unwrap()
2714                .node
2715                .write_to(writer)
2716                .map_err(SerializeError::from)?;
2717        }
2718        if let Some(ref val) = self.maps {
2719            val.write_element("maps", writer)?;
2720        }
2721        #[cfg(feature = "extra-children")]
2722        {
2723            emit_idx += 1;
2724        }
2725        #[cfg(feature = "extra-children")]
2726        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2727            extra_iter
2728                .next()
2729                .unwrap()
2730                .node
2731                .write_to(writer)
2732                .map_err(SerializeError::from)?;
2733        }
2734        if let Some(ref val) = self.extension_list {
2735            val.write_element("extLst", writer)?;
2736        }
2737        #[cfg(feature = "extra-children")]
2738        {
2739            emit_idx += 1;
2740        }
2741        #[cfg(feature = "extra-children")]
2742        for extra in extra_iter {
2743            extra.node.write_to(writer).map_err(SerializeError::from)?;
2744        }
2745        Ok(())
2746    }
2747
2748    fn is_empty_element(&self) -> bool {
2749        false
2750    }
2751}
2752
2753impl ToXml for CacheFields {
2754    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2755        #[allow(unused_mut)]
2756        let mut start = start;
2757        if let Some(ref val) = self.count {
2758            {
2759                let s = val.to_string();
2760                start.push_attribute(("count", s.as_str()));
2761            }
2762        }
2763        #[cfg(feature = "extra-attrs")]
2764        for (key, value) in &self.extra_attrs {
2765            start.push_attribute((key.as_str(), value.as_str()));
2766        }
2767        start
2768    }
2769
2770    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
2771        #[cfg(feature = "extra-children")]
2772        let mut extra_iter = self.extra_children.iter().peekable();
2773        #[cfg(feature = "extra-children")]
2774        let mut emit_idx: usize = 0;
2775        for item in &self.cache_field {
2776            #[cfg(feature = "extra-children")]
2777            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2778                extra_iter
2779                    .next()
2780                    .unwrap()
2781                    .node
2782                    .write_to(writer)
2783                    .map_err(SerializeError::from)?;
2784            }
2785            item.write_element("cacheField", writer)?;
2786            #[cfg(feature = "extra-children")]
2787            {
2788                emit_idx += 1;
2789            }
2790        }
2791        #[cfg(feature = "extra-children")]
2792        for extra in extra_iter {
2793            extra.node.write_to(writer).map_err(SerializeError::from)?;
2794        }
2795        Ok(())
2796    }
2797
2798    fn is_empty_element(&self) -> bool {
2799        if !self.cache_field.is_empty() {
2800            return false;
2801        }
2802        #[cfg(feature = "extra-children")]
2803        if !self.extra_children.is_empty() {
2804            return false;
2805        }
2806        true
2807    }
2808}
2809
2810impl ToXml for CacheField {
2811    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2812        #[allow(unused_mut)]
2813        let mut start = start;
2814        {
2815            let val = &self.name;
2816            start.push_attribute(("name", val.as_str()));
2817        }
2818        if let Some(ref val) = self.caption {
2819            start.push_attribute(("caption", val.as_str()));
2820        }
2821        if let Some(ref val) = self.property_name {
2822            start.push_attribute(("propertyName", val.as_str()));
2823        }
2824        if let Some(ref val) = self.server_field {
2825            start.push_attribute(("serverField", if *val { "1" } else { "0" }));
2826        }
2827        if let Some(ref val) = self.unique_list {
2828            start.push_attribute(("uniqueList", if *val { "1" } else { "0" }));
2829        }
2830        if let Some(ref val) = self.number_format_id {
2831            {
2832                let s = val.to_string();
2833                start.push_attribute(("numFmtId", s.as_str()));
2834            }
2835        }
2836        if let Some(ref val) = self.formula {
2837            start.push_attribute(("formula", val.as_str()));
2838        }
2839        if let Some(ref val) = self.sql_type {
2840            {
2841                let s = val.to_string();
2842                start.push_attribute(("sqlType", s.as_str()));
2843            }
2844        }
2845        if let Some(ref val) = self.hierarchy {
2846            {
2847                let s = val.to_string();
2848                start.push_attribute(("hierarchy", s.as_str()));
2849            }
2850        }
2851        if let Some(ref val) = self.level {
2852            {
2853                let s = val.to_string();
2854                start.push_attribute(("level", s.as_str()));
2855            }
2856        }
2857        if let Some(ref val) = self.database_field {
2858            start.push_attribute(("databaseField", if *val { "1" } else { "0" }));
2859        }
2860        if let Some(ref val) = self.mapping_count {
2861            {
2862                let s = val.to_string();
2863                start.push_attribute(("mappingCount", s.as_str()));
2864            }
2865        }
2866        if let Some(ref val) = self.member_property_field {
2867            start.push_attribute(("memberPropertyField", if *val { "1" } else { "0" }));
2868        }
2869        #[cfg(feature = "extra-attrs")]
2870        for (key, value) in &self.extra_attrs {
2871            start.push_attribute((key.as_str(), value.as_str()));
2872        }
2873        start
2874    }
2875
2876    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
2877        #[cfg(feature = "extra-children")]
2878        let mut extra_iter = self.extra_children.iter().peekable();
2879        #[cfg(feature = "extra-children")]
2880        let mut emit_idx: usize = 0;
2881        #[cfg(feature = "extra-children")]
2882        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2883            extra_iter
2884                .next()
2885                .unwrap()
2886                .node
2887                .write_to(writer)
2888                .map_err(SerializeError::from)?;
2889        }
2890        if let Some(ref val) = self.shared_items {
2891            val.write_element("sharedItems", writer)?;
2892        }
2893        #[cfg(feature = "extra-children")]
2894        {
2895            emit_idx += 1;
2896        }
2897        #[cfg(feature = "extra-children")]
2898        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2899            extra_iter
2900                .next()
2901                .unwrap()
2902                .node
2903                .write_to(writer)
2904                .map_err(SerializeError::from)?;
2905        }
2906        if let Some(ref val) = self.field_group {
2907            val.write_element("fieldGroup", writer)?;
2908        }
2909        #[cfg(feature = "extra-children")]
2910        {
2911            emit_idx += 1;
2912        }
2913        for item in &self.mp_map {
2914            #[cfg(feature = "extra-children")]
2915            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2916                extra_iter
2917                    .next()
2918                    .unwrap()
2919                    .node
2920                    .write_to(writer)
2921                    .map_err(SerializeError::from)?;
2922            }
2923            item.write_element("mpMap", writer)?;
2924            #[cfg(feature = "extra-children")]
2925            {
2926                emit_idx += 1;
2927            }
2928        }
2929        #[cfg(feature = "extra-children")]
2930        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
2931            extra_iter
2932                .next()
2933                .unwrap()
2934                .node
2935                .write_to(writer)
2936                .map_err(SerializeError::from)?;
2937        }
2938        if let Some(ref val) = self.extension_list {
2939            val.write_element("extLst", writer)?;
2940        }
2941        #[cfg(feature = "extra-children")]
2942        {
2943            emit_idx += 1;
2944        }
2945        #[cfg(feature = "extra-children")]
2946        for extra in extra_iter {
2947            extra.node.write_to(writer).map_err(SerializeError::from)?;
2948        }
2949        Ok(())
2950    }
2951
2952    fn is_empty_element(&self) -> bool {
2953        if self.shared_items.is_some() {
2954            return false;
2955        }
2956        if self.field_group.is_some() {
2957            return false;
2958        }
2959        if !self.mp_map.is_empty() {
2960            return false;
2961        }
2962        if self.extension_list.is_some() {
2963            return false;
2964        }
2965        #[cfg(feature = "extra-children")]
2966        if !self.extra_children.is_empty() {
2967            return false;
2968        }
2969        true
2970    }
2971}
2972
2973impl ToXml for CacheSource {
2974    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
2975        #[allow(unused_mut)]
2976        let mut start = start;
2977        {
2978            let val = &self.r#type;
2979            {
2980                let s = val.to_string();
2981                start.push_attribute(("type", s.as_str()));
2982            }
2983        }
2984        if let Some(ref val) = self.connection_id {
2985            {
2986                let s = val.to_string();
2987                start.push_attribute(("connectionId", s.as_str()));
2988            }
2989        }
2990        #[cfg(feature = "extra-attrs")]
2991        for (key, value) in &self.extra_attrs {
2992            start.push_attribute((key.as_str(), value.as_str()));
2993        }
2994        start
2995    }
2996
2997    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
2998        #[cfg(feature = "extra-children")]
2999        let mut extra_iter = self.extra_children.iter().peekable();
3000        #[cfg(feature = "extra-children")]
3001        let mut emit_idx: usize = 0;
3002        #[cfg(feature = "extra-children")]
3003        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3004            extra_iter
3005                .next()
3006                .unwrap()
3007                .node
3008                .write_to(writer)
3009                .map_err(SerializeError::from)?;
3010        }
3011        if let Some(ref val) = self.worksheet_source {
3012            val.write_element("worksheetSource", writer)?;
3013        }
3014        #[cfg(feature = "extra-children")]
3015        {
3016            emit_idx += 1;
3017        }
3018        #[cfg(feature = "extra-children")]
3019        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3020            extra_iter
3021                .next()
3022                .unwrap()
3023                .node
3024                .write_to(writer)
3025                .map_err(SerializeError::from)?;
3026        }
3027        if let Some(ref val) = self.consolidation {
3028            val.write_element("consolidation", writer)?;
3029        }
3030        #[cfg(feature = "extra-children")]
3031        {
3032            emit_idx += 1;
3033        }
3034        #[cfg(feature = "extra-children")]
3035        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3036            extra_iter
3037                .next()
3038                .unwrap()
3039                .node
3040                .write_to(writer)
3041                .map_err(SerializeError::from)?;
3042        }
3043        if let Some(ref val) = self.extension_list {
3044            val.write_element("extLst", writer)?;
3045        }
3046        #[cfg(feature = "extra-children")]
3047        {
3048            emit_idx += 1;
3049        }
3050        #[cfg(feature = "extra-children")]
3051        for extra in extra_iter {
3052            extra.node.write_to(writer).map_err(SerializeError::from)?;
3053        }
3054        Ok(())
3055    }
3056
3057    fn is_empty_element(&self) -> bool {
3058        if self.worksheet_source.is_some() {
3059            return false;
3060        }
3061        if self.consolidation.is_some() {
3062            return false;
3063        }
3064        if self.extension_list.is_some() {
3065            return false;
3066        }
3067        #[cfg(feature = "extra-children")]
3068        if !self.extra_children.is_empty() {
3069            return false;
3070        }
3071        true
3072    }
3073}
3074
3075impl ToXml for WorksheetSource {
3076    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3077        #[allow(unused_mut)]
3078        let mut start = start;
3079        if let Some(ref val) = self.reference {
3080            start.push_attribute(("ref", val.as_str()));
3081        }
3082        if let Some(ref val) = self.name {
3083            start.push_attribute(("name", val.as_str()));
3084        }
3085        if let Some(ref val) = self.sheet {
3086            start.push_attribute(("sheet", val.as_str()));
3087        }
3088        if let Some(ref val) = self.id {
3089            start.push_attribute(("r:id", val.as_str()));
3090        }
3091        #[cfg(feature = "extra-attrs")]
3092        for (key, value) in &self.extra_attrs {
3093            start.push_attribute((key.as_str(), value.as_str()));
3094        }
3095        start
3096    }
3097
3098    fn is_empty_element(&self) -> bool {
3099        true
3100    }
3101}
3102
3103impl ToXml for Consolidation {
3104    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3105        #[allow(unused_mut)]
3106        let mut start = start;
3107        if let Some(ref val) = self.auto_page {
3108            start.push_attribute(("autoPage", if *val { "1" } else { "0" }));
3109        }
3110        #[cfg(feature = "extra-attrs")]
3111        for (key, value) in &self.extra_attrs {
3112            start.push_attribute((key.as_str(), value.as_str()));
3113        }
3114        start
3115    }
3116
3117    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
3118        #[cfg(feature = "extra-children")]
3119        let mut extra_iter = self.extra_children.iter().peekable();
3120        #[cfg(feature = "extra-children")]
3121        let mut emit_idx: usize = 0;
3122        #[cfg(feature = "extra-children")]
3123        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3124            extra_iter
3125                .next()
3126                .unwrap()
3127                .node
3128                .write_to(writer)
3129                .map_err(SerializeError::from)?;
3130        }
3131        if let Some(ref val) = self.pages {
3132            val.write_element("pages", writer)?;
3133        }
3134        #[cfg(feature = "extra-children")]
3135        {
3136            emit_idx += 1;
3137        }
3138        #[cfg(feature = "extra-children")]
3139        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3140            extra_iter
3141                .next()
3142                .unwrap()
3143                .node
3144                .write_to(writer)
3145                .map_err(SerializeError::from)?;
3146        }
3147        {
3148            let val = &self.range_sets;
3149            val.write_element("rangeSets", writer)?;
3150        }
3151        #[cfg(feature = "extra-children")]
3152        {
3153            emit_idx += 1;
3154        }
3155        #[cfg(feature = "extra-children")]
3156        for extra in extra_iter {
3157            extra.node.write_to(writer).map_err(SerializeError::from)?;
3158        }
3159        Ok(())
3160    }
3161
3162    fn is_empty_element(&self) -> bool {
3163        if self.pages.is_some() {
3164            return false;
3165        }
3166        false
3167    }
3168}
3169
3170impl ToXml for CTPages {
3171    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3172        #[allow(unused_mut)]
3173        let mut start = start;
3174        if let Some(ref val) = self.count {
3175            {
3176                let s = val.to_string();
3177                start.push_attribute(("count", s.as_str()));
3178            }
3179        }
3180        #[cfg(feature = "extra-attrs")]
3181        for (key, value) in &self.extra_attrs {
3182            start.push_attribute((key.as_str(), value.as_str()));
3183        }
3184        start
3185    }
3186
3187    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
3188        #[cfg(feature = "extra-children")]
3189        let mut extra_iter = self.extra_children.iter().peekable();
3190        #[cfg(feature = "extra-children")]
3191        let mut emit_idx: usize = 0;
3192        for item in &self.page {
3193            #[cfg(feature = "extra-children")]
3194            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3195                extra_iter
3196                    .next()
3197                    .unwrap()
3198                    .node
3199                    .write_to(writer)
3200                    .map_err(SerializeError::from)?;
3201            }
3202            item.write_element("page", writer)?;
3203            #[cfg(feature = "extra-children")]
3204            {
3205                emit_idx += 1;
3206            }
3207        }
3208        #[cfg(feature = "extra-children")]
3209        for extra in extra_iter {
3210            extra.node.write_to(writer).map_err(SerializeError::from)?;
3211        }
3212        Ok(())
3213    }
3214
3215    fn is_empty_element(&self) -> bool {
3216        if !self.page.is_empty() {
3217            return false;
3218        }
3219        #[cfg(feature = "extra-children")]
3220        if !self.extra_children.is_empty() {
3221            return false;
3222        }
3223        true
3224    }
3225}
3226
3227impl ToXml for CTPCDSCPage {
3228    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3229        #[allow(unused_mut)]
3230        let mut start = start;
3231        if let Some(ref val) = self.count {
3232            {
3233                let s = val.to_string();
3234                start.push_attribute(("count", s.as_str()));
3235            }
3236        }
3237        #[cfg(feature = "extra-attrs")]
3238        for (key, value) in &self.extra_attrs {
3239            start.push_attribute((key.as_str(), value.as_str()));
3240        }
3241        start
3242    }
3243
3244    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
3245        #[cfg(feature = "extra-children")]
3246        let mut extra_iter = self.extra_children.iter().peekable();
3247        #[cfg(feature = "extra-children")]
3248        let mut emit_idx: usize = 0;
3249        for item in &self.page_item {
3250            #[cfg(feature = "extra-children")]
3251            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3252                extra_iter
3253                    .next()
3254                    .unwrap()
3255                    .node
3256                    .write_to(writer)
3257                    .map_err(SerializeError::from)?;
3258            }
3259            item.write_element("pageItem", writer)?;
3260            #[cfg(feature = "extra-children")]
3261            {
3262                emit_idx += 1;
3263            }
3264        }
3265        #[cfg(feature = "extra-children")]
3266        for extra in extra_iter {
3267            extra.node.write_to(writer).map_err(SerializeError::from)?;
3268        }
3269        Ok(())
3270    }
3271
3272    fn is_empty_element(&self) -> bool {
3273        if !self.page_item.is_empty() {
3274            return false;
3275        }
3276        #[cfg(feature = "extra-children")]
3277        if !self.extra_children.is_empty() {
3278            return false;
3279        }
3280        true
3281    }
3282}
3283
3284impl ToXml for CTPageItem {
3285    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3286        #[allow(unused_mut)]
3287        let mut start = start;
3288        {
3289            let val = &self.name;
3290            start.push_attribute(("name", val.as_str()));
3291        }
3292        #[cfg(feature = "extra-attrs")]
3293        for (key, value) in &self.extra_attrs {
3294            start.push_attribute((key.as_str(), value.as_str()));
3295        }
3296        start
3297    }
3298
3299    fn is_empty_element(&self) -> bool {
3300        true
3301    }
3302}
3303
3304impl ToXml for CTRangeSets {
3305    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3306        #[allow(unused_mut)]
3307        let mut start = start;
3308        if let Some(ref val) = self.count {
3309            {
3310                let s = val.to_string();
3311                start.push_attribute(("count", s.as_str()));
3312            }
3313        }
3314        #[cfg(feature = "extra-attrs")]
3315        for (key, value) in &self.extra_attrs {
3316            start.push_attribute((key.as_str(), value.as_str()));
3317        }
3318        start
3319    }
3320
3321    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
3322        #[cfg(feature = "extra-children")]
3323        let mut extra_iter = self.extra_children.iter().peekable();
3324        #[cfg(feature = "extra-children")]
3325        let mut emit_idx: usize = 0;
3326        for item in &self.range_set {
3327            #[cfg(feature = "extra-children")]
3328            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3329                extra_iter
3330                    .next()
3331                    .unwrap()
3332                    .node
3333                    .write_to(writer)
3334                    .map_err(SerializeError::from)?;
3335            }
3336            item.write_element("rangeSet", writer)?;
3337            #[cfg(feature = "extra-children")]
3338            {
3339                emit_idx += 1;
3340            }
3341        }
3342        #[cfg(feature = "extra-children")]
3343        for extra in extra_iter {
3344            extra.node.write_to(writer).map_err(SerializeError::from)?;
3345        }
3346        Ok(())
3347    }
3348
3349    fn is_empty_element(&self) -> bool {
3350        if !self.range_set.is_empty() {
3351            return false;
3352        }
3353        #[cfg(feature = "extra-children")]
3354        if !self.extra_children.is_empty() {
3355            return false;
3356        }
3357        true
3358    }
3359}
3360
3361impl ToXml for CTRangeSet {
3362    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3363        #[allow(unused_mut)]
3364        let mut start = start;
3365        if let Some(ref val) = self.i1 {
3366            {
3367                let s = val.to_string();
3368                start.push_attribute(("i1", s.as_str()));
3369            }
3370        }
3371        if let Some(ref val) = self.i2 {
3372            {
3373                let s = val.to_string();
3374                start.push_attribute(("i2", s.as_str()));
3375            }
3376        }
3377        if let Some(ref val) = self.i3 {
3378            {
3379                let s = val.to_string();
3380                start.push_attribute(("i3", s.as_str()));
3381            }
3382        }
3383        if let Some(ref val) = self.i4 {
3384            {
3385                let s = val.to_string();
3386                start.push_attribute(("i4", s.as_str()));
3387            }
3388        }
3389        if let Some(ref val) = self.reference {
3390            start.push_attribute(("ref", val.as_str()));
3391        }
3392        if let Some(ref val) = self.name {
3393            start.push_attribute(("name", val.as_str()));
3394        }
3395        if let Some(ref val) = self.sheet {
3396            start.push_attribute(("sheet", val.as_str()));
3397        }
3398        if let Some(ref val) = self.id {
3399            start.push_attribute(("r:id", val.as_str()));
3400        }
3401        #[cfg(feature = "extra-attrs")]
3402        for (key, value) in &self.extra_attrs {
3403            start.push_attribute((key.as_str(), value.as_str()));
3404        }
3405        start
3406    }
3407
3408    fn is_empty_element(&self) -> bool {
3409        true
3410    }
3411}
3412
3413impl ToXml for SharedItems {
3414    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3415        #[allow(unused_mut)]
3416        let mut start = start;
3417        if let Some(ref val) = self.contains_semi_mixed_types {
3418            start.push_attribute(("containsSemiMixedTypes", if *val { "1" } else { "0" }));
3419        }
3420        if let Some(ref val) = self.contains_non_date {
3421            start.push_attribute(("containsNonDate", if *val { "1" } else { "0" }));
3422        }
3423        if let Some(ref val) = self.contains_date {
3424            start.push_attribute(("containsDate", if *val { "1" } else { "0" }));
3425        }
3426        if let Some(ref val) = self.contains_string {
3427            start.push_attribute(("containsString", if *val { "1" } else { "0" }));
3428        }
3429        if let Some(ref val) = self.contains_blank {
3430            start.push_attribute(("containsBlank", if *val { "1" } else { "0" }));
3431        }
3432        if let Some(ref val) = self.contains_mixed_types {
3433            start.push_attribute(("containsMixedTypes", if *val { "1" } else { "0" }));
3434        }
3435        if let Some(ref val) = self.contains_number {
3436            start.push_attribute(("containsNumber", if *val { "1" } else { "0" }));
3437        }
3438        if let Some(ref val) = self.contains_integer {
3439            start.push_attribute(("containsInteger", if *val { "1" } else { "0" }));
3440        }
3441        if let Some(ref val) = self.min_value {
3442            {
3443                let s = val.to_string();
3444                start.push_attribute(("minValue", s.as_str()));
3445            }
3446        }
3447        if let Some(ref val) = self.max_value {
3448            {
3449                let s = val.to_string();
3450                start.push_attribute(("maxValue", s.as_str()));
3451            }
3452        }
3453        if let Some(ref val) = self.min_date {
3454            start.push_attribute(("minDate", val.as_str()));
3455        }
3456        if let Some(ref val) = self.max_date {
3457            start.push_attribute(("maxDate", val.as_str()));
3458        }
3459        if let Some(ref val) = self.count {
3460            {
3461                let s = val.to_string();
3462                start.push_attribute(("count", s.as_str()));
3463            }
3464        }
3465        if let Some(ref val) = self.long_text {
3466            start.push_attribute(("longText", if *val { "1" } else { "0" }));
3467        }
3468        #[cfg(feature = "extra-attrs")]
3469        for (key, value) in &self.extra_attrs {
3470            start.push_attribute((key.as_str(), value.as_str()));
3471        }
3472        start
3473    }
3474
3475    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
3476        #[cfg(feature = "extra-children")]
3477        let mut extra_iter = self.extra_children.iter().peekable();
3478        #[cfg(feature = "extra-children")]
3479        let mut emit_idx: usize = 0;
3480        for item in &self.m {
3481            #[cfg(feature = "extra-children")]
3482            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3483                extra_iter
3484                    .next()
3485                    .unwrap()
3486                    .node
3487                    .write_to(writer)
3488                    .map_err(SerializeError::from)?;
3489            }
3490            item.write_element("m", writer)?;
3491            #[cfg(feature = "extra-children")]
3492            {
3493                emit_idx += 1;
3494            }
3495        }
3496        for item in &self.n {
3497            #[cfg(feature = "extra-children")]
3498            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3499                extra_iter
3500                    .next()
3501                    .unwrap()
3502                    .node
3503                    .write_to(writer)
3504                    .map_err(SerializeError::from)?;
3505            }
3506            item.write_element("n", writer)?;
3507            #[cfg(feature = "extra-children")]
3508            {
3509                emit_idx += 1;
3510            }
3511        }
3512        for item in &self.b {
3513            #[cfg(feature = "extra-children")]
3514            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3515                extra_iter
3516                    .next()
3517                    .unwrap()
3518                    .node
3519                    .write_to(writer)
3520                    .map_err(SerializeError::from)?;
3521            }
3522            item.write_element("b", writer)?;
3523            #[cfg(feature = "extra-children")]
3524            {
3525                emit_idx += 1;
3526            }
3527        }
3528        for item in &self.e {
3529            #[cfg(feature = "extra-children")]
3530            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3531                extra_iter
3532                    .next()
3533                    .unwrap()
3534                    .node
3535                    .write_to(writer)
3536                    .map_err(SerializeError::from)?;
3537            }
3538            item.write_element("e", writer)?;
3539            #[cfg(feature = "extra-children")]
3540            {
3541                emit_idx += 1;
3542            }
3543        }
3544        for item in &self.style_index {
3545            #[cfg(feature = "extra-children")]
3546            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3547                extra_iter
3548                    .next()
3549                    .unwrap()
3550                    .node
3551                    .write_to(writer)
3552                    .map_err(SerializeError::from)?;
3553            }
3554            item.write_element("s", writer)?;
3555            #[cfg(feature = "extra-children")]
3556            {
3557                emit_idx += 1;
3558            }
3559        }
3560        for item in &self.d {
3561            #[cfg(feature = "extra-children")]
3562            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3563                extra_iter
3564                    .next()
3565                    .unwrap()
3566                    .node
3567                    .write_to(writer)
3568                    .map_err(SerializeError::from)?;
3569            }
3570            item.write_element("d", writer)?;
3571            #[cfg(feature = "extra-children")]
3572            {
3573                emit_idx += 1;
3574            }
3575        }
3576        #[cfg(feature = "extra-children")]
3577        for extra in extra_iter {
3578            extra.node.write_to(writer).map_err(SerializeError::from)?;
3579        }
3580        Ok(())
3581    }
3582
3583    fn is_empty_element(&self) -> bool {
3584        if !self.m.is_empty() {
3585            return false;
3586        }
3587        if !self.n.is_empty() {
3588            return false;
3589        }
3590        if !self.b.is_empty() {
3591            return false;
3592        }
3593        if !self.e.is_empty() {
3594            return false;
3595        }
3596        if !self.style_index.is_empty() {
3597            return false;
3598        }
3599        if !self.d.is_empty() {
3600            return false;
3601        }
3602        #[cfg(feature = "extra-children")]
3603        if !self.extra_children.is_empty() {
3604            return false;
3605        }
3606        true
3607    }
3608}
3609
3610impl ToXml for CTMissing {
3611    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3612        #[allow(unused_mut)]
3613        let mut start = start;
3614        if let Some(ref val) = self.u {
3615            start.push_attribute(("u", if *val { "1" } else { "0" }));
3616        }
3617        if let Some(ref val) = self.formula {
3618            start.push_attribute(("f", if *val { "1" } else { "0" }));
3619        }
3620        if let Some(ref val) = self.cells {
3621            start.push_attribute(("c", val.as_str()));
3622        }
3623        if let Some(ref val) = self.cp {
3624            {
3625                let s = val.to_string();
3626                start.push_attribute(("cp", s.as_str()));
3627            }
3628        }
3629        if let Some(ref val) = self.r#in {
3630            {
3631                let s = val.to_string();
3632                start.push_attribute(("in", s.as_str()));
3633            }
3634        }
3635        if let Some(ref val) = self.bc {
3636            {
3637                let hex = encode_hex(val);
3638                start.push_attribute(("bc", hex.as_str()));
3639            }
3640        }
3641        if let Some(ref val) = self.fc {
3642            {
3643                let hex = encode_hex(val);
3644                start.push_attribute(("fc", hex.as_str()));
3645            }
3646        }
3647        if let Some(ref val) = self.i {
3648            start.push_attribute(("i", if *val { "1" } else { "0" }));
3649        }
3650        if let Some(ref val) = self.un {
3651            start.push_attribute(("un", if *val { "1" } else { "0" }));
3652        }
3653        if let Some(ref val) = self.st {
3654            start.push_attribute(("st", if *val { "1" } else { "0" }));
3655        }
3656        if let Some(ref val) = self.b {
3657            start.push_attribute(("b", if *val { "1" } else { "0" }));
3658        }
3659        #[cfg(feature = "extra-attrs")]
3660        for (key, value) in &self.extra_attrs {
3661            start.push_attribute((key.as_str(), value.as_str()));
3662        }
3663        start
3664    }
3665
3666    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
3667        #[cfg(feature = "extra-children")]
3668        let mut extra_iter = self.extra_children.iter().peekable();
3669        #[cfg(feature = "extra-children")]
3670        let mut emit_idx: usize = 0;
3671        for item in &self.tpls {
3672            #[cfg(feature = "extra-children")]
3673            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3674                extra_iter
3675                    .next()
3676                    .unwrap()
3677                    .node
3678                    .write_to(writer)
3679                    .map_err(SerializeError::from)?;
3680            }
3681            item.write_element("tpls", writer)?;
3682            #[cfg(feature = "extra-children")]
3683            {
3684                emit_idx += 1;
3685            }
3686        }
3687        for item in &self.x {
3688            #[cfg(feature = "extra-children")]
3689            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3690                extra_iter
3691                    .next()
3692                    .unwrap()
3693                    .node
3694                    .write_to(writer)
3695                    .map_err(SerializeError::from)?;
3696            }
3697            item.write_element("x", writer)?;
3698            #[cfg(feature = "extra-children")]
3699            {
3700                emit_idx += 1;
3701            }
3702        }
3703        #[cfg(feature = "extra-children")]
3704        for extra in extra_iter {
3705            extra.node.write_to(writer).map_err(SerializeError::from)?;
3706        }
3707        Ok(())
3708    }
3709
3710    fn is_empty_element(&self) -> bool {
3711        if !self.tpls.is_empty() {
3712            return false;
3713        }
3714        if !self.x.is_empty() {
3715            return false;
3716        }
3717        #[cfg(feature = "extra-children")]
3718        if !self.extra_children.is_empty() {
3719            return false;
3720        }
3721        true
3722    }
3723}
3724
3725impl ToXml for CTNumber {
3726    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3727        #[allow(unused_mut)]
3728        let mut start = start;
3729        {
3730            let val = &self.value;
3731            {
3732                let s = val.to_string();
3733                start.push_attribute(("v", s.as_str()));
3734            }
3735        }
3736        if let Some(ref val) = self.u {
3737            start.push_attribute(("u", if *val { "1" } else { "0" }));
3738        }
3739        if let Some(ref val) = self.formula {
3740            start.push_attribute(("f", if *val { "1" } else { "0" }));
3741        }
3742        if let Some(ref val) = self.cells {
3743            start.push_attribute(("c", val.as_str()));
3744        }
3745        if let Some(ref val) = self.cp {
3746            {
3747                let s = val.to_string();
3748                start.push_attribute(("cp", s.as_str()));
3749            }
3750        }
3751        if let Some(ref val) = self.r#in {
3752            {
3753                let s = val.to_string();
3754                start.push_attribute(("in", s.as_str()));
3755            }
3756        }
3757        if let Some(ref val) = self.bc {
3758            {
3759                let hex = encode_hex(val);
3760                start.push_attribute(("bc", hex.as_str()));
3761            }
3762        }
3763        if let Some(ref val) = self.fc {
3764            {
3765                let hex = encode_hex(val);
3766                start.push_attribute(("fc", hex.as_str()));
3767            }
3768        }
3769        if let Some(ref val) = self.i {
3770            start.push_attribute(("i", if *val { "1" } else { "0" }));
3771        }
3772        if let Some(ref val) = self.un {
3773            start.push_attribute(("un", if *val { "1" } else { "0" }));
3774        }
3775        if let Some(ref val) = self.st {
3776            start.push_attribute(("st", if *val { "1" } else { "0" }));
3777        }
3778        if let Some(ref val) = self.b {
3779            start.push_attribute(("b", if *val { "1" } else { "0" }));
3780        }
3781        #[cfg(feature = "extra-attrs")]
3782        for (key, value) in &self.extra_attrs {
3783            start.push_attribute((key.as_str(), value.as_str()));
3784        }
3785        start
3786    }
3787
3788    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
3789        #[cfg(feature = "extra-children")]
3790        let mut extra_iter = self.extra_children.iter().peekable();
3791        #[cfg(feature = "extra-children")]
3792        let mut emit_idx: usize = 0;
3793        for item in &self.tpls {
3794            #[cfg(feature = "extra-children")]
3795            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3796                extra_iter
3797                    .next()
3798                    .unwrap()
3799                    .node
3800                    .write_to(writer)
3801                    .map_err(SerializeError::from)?;
3802            }
3803            item.write_element("tpls", writer)?;
3804            #[cfg(feature = "extra-children")]
3805            {
3806                emit_idx += 1;
3807            }
3808        }
3809        for item in &self.x {
3810            #[cfg(feature = "extra-children")]
3811            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3812                extra_iter
3813                    .next()
3814                    .unwrap()
3815                    .node
3816                    .write_to(writer)
3817                    .map_err(SerializeError::from)?;
3818            }
3819            item.write_element("x", writer)?;
3820            #[cfg(feature = "extra-children")]
3821            {
3822                emit_idx += 1;
3823            }
3824        }
3825        #[cfg(feature = "extra-children")]
3826        for extra in extra_iter {
3827            extra.node.write_to(writer).map_err(SerializeError::from)?;
3828        }
3829        Ok(())
3830    }
3831
3832    fn is_empty_element(&self) -> bool {
3833        if !self.tpls.is_empty() {
3834            return false;
3835        }
3836        if !self.x.is_empty() {
3837            return false;
3838        }
3839        #[cfg(feature = "extra-children")]
3840        if !self.extra_children.is_empty() {
3841            return false;
3842        }
3843        true
3844    }
3845}
3846
3847impl ToXml for CTBoolean {
3848    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3849        #[allow(unused_mut)]
3850        let mut start = start;
3851        {
3852            let val = &self.value;
3853            start.push_attribute(("v", if *val { "1" } else { "0" }));
3854        }
3855        if let Some(ref val) = self.u {
3856            start.push_attribute(("u", if *val { "1" } else { "0" }));
3857        }
3858        if let Some(ref val) = self.formula {
3859            start.push_attribute(("f", if *val { "1" } else { "0" }));
3860        }
3861        if let Some(ref val) = self.cells {
3862            start.push_attribute(("c", val.as_str()));
3863        }
3864        if let Some(ref val) = self.cp {
3865            {
3866                let s = val.to_string();
3867                start.push_attribute(("cp", s.as_str()));
3868            }
3869        }
3870        #[cfg(feature = "extra-attrs")]
3871        for (key, value) in &self.extra_attrs {
3872            start.push_attribute((key.as_str(), value.as_str()));
3873        }
3874        start
3875    }
3876
3877    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
3878        #[cfg(feature = "extra-children")]
3879        let mut extra_iter = self.extra_children.iter().peekable();
3880        #[cfg(feature = "extra-children")]
3881        let mut emit_idx: usize = 0;
3882        for item in &self.x {
3883            #[cfg(feature = "extra-children")]
3884            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3885                extra_iter
3886                    .next()
3887                    .unwrap()
3888                    .node
3889                    .write_to(writer)
3890                    .map_err(SerializeError::from)?;
3891            }
3892            item.write_element("x", writer)?;
3893            #[cfg(feature = "extra-children")]
3894            {
3895                emit_idx += 1;
3896            }
3897        }
3898        #[cfg(feature = "extra-children")]
3899        for extra in extra_iter {
3900            extra.node.write_to(writer).map_err(SerializeError::from)?;
3901        }
3902        Ok(())
3903    }
3904
3905    fn is_empty_element(&self) -> bool {
3906        if !self.x.is_empty() {
3907            return false;
3908        }
3909        #[cfg(feature = "extra-children")]
3910        if !self.extra_children.is_empty() {
3911            return false;
3912        }
3913        true
3914    }
3915}
3916
3917impl ToXml for CTError {
3918    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
3919        #[allow(unused_mut)]
3920        let mut start = start;
3921        {
3922            let val = &self.value;
3923            start.push_attribute(("v", val.as_str()));
3924        }
3925        if let Some(ref val) = self.u {
3926            start.push_attribute(("u", if *val { "1" } else { "0" }));
3927        }
3928        if let Some(ref val) = self.formula {
3929            start.push_attribute(("f", if *val { "1" } else { "0" }));
3930        }
3931        if let Some(ref val) = self.cells {
3932            start.push_attribute(("c", val.as_str()));
3933        }
3934        if let Some(ref val) = self.cp {
3935            {
3936                let s = val.to_string();
3937                start.push_attribute(("cp", s.as_str()));
3938            }
3939        }
3940        if let Some(ref val) = self.r#in {
3941            {
3942                let s = val.to_string();
3943                start.push_attribute(("in", s.as_str()));
3944            }
3945        }
3946        if let Some(ref val) = self.bc {
3947            {
3948                let hex = encode_hex(val);
3949                start.push_attribute(("bc", hex.as_str()));
3950            }
3951        }
3952        if let Some(ref val) = self.fc {
3953            {
3954                let hex = encode_hex(val);
3955                start.push_attribute(("fc", hex.as_str()));
3956            }
3957        }
3958        if let Some(ref val) = self.i {
3959            start.push_attribute(("i", if *val { "1" } else { "0" }));
3960        }
3961        if let Some(ref val) = self.un {
3962            start.push_attribute(("un", if *val { "1" } else { "0" }));
3963        }
3964        if let Some(ref val) = self.st {
3965            start.push_attribute(("st", if *val { "1" } else { "0" }));
3966        }
3967        if let Some(ref val) = self.b {
3968            start.push_attribute(("b", if *val { "1" } else { "0" }));
3969        }
3970        #[cfg(feature = "extra-attrs")]
3971        for (key, value) in &self.extra_attrs {
3972            start.push_attribute((key.as_str(), value.as_str()));
3973        }
3974        start
3975    }
3976
3977    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
3978        #[cfg(feature = "extra-children")]
3979        let mut extra_iter = self.extra_children.iter().peekable();
3980        #[cfg(feature = "extra-children")]
3981        let mut emit_idx: usize = 0;
3982        #[cfg(feature = "extra-children")]
3983        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
3984            extra_iter
3985                .next()
3986                .unwrap()
3987                .node
3988                .write_to(writer)
3989                .map_err(SerializeError::from)?;
3990        }
3991        if let Some(ref val) = self.tpls {
3992            val.write_element("tpls", writer)?;
3993        }
3994        #[cfg(feature = "extra-children")]
3995        {
3996            emit_idx += 1;
3997        }
3998        for item in &self.x {
3999            #[cfg(feature = "extra-children")]
4000            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4001                extra_iter
4002                    .next()
4003                    .unwrap()
4004                    .node
4005                    .write_to(writer)
4006                    .map_err(SerializeError::from)?;
4007            }
4008            item.write_element("x", writer)?;
4009            #[cfg(feature = "extra-children")]
4010            {
4011                emit_idx += 1;
4012            }
4013        }
4014        #[cfg(feature = "extra-children")]
4015        for extra in extra_iter {
4016            extra.node.write_to(writer).map_err(SerializeError::from)?;
4017        }
4018        Ok(())
4019    }
4020
4021    fn is_empty_element(&self) -> bool {
4022        if self.tpls.is_some() {
4023            return false;
4024        }
4025        if !self.x.is_empty() {
4026            return false;
4027        }
4028        #[cfg(feature = "extra-children")]
4029        if !self.extra_children.is_empty() {
4030            return false;
4031        }
4032        true
4033    }
4034}
4035
4036impl ToXml for CTString {
4037    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4038        #[allow(unused_mut)]
4039        let mut start = start;
4040        {
4041            let val = &self.value;
4042            start.push_attribute(("v", val.as_str()));
4043        }
4044        if let Some(ref val) = self.u {
4045            start.push_attribute(("u", if *val { "1" } else { "0" }));
4046        }
4047        if let Some(ref val) = self.formula {
4048            start.push_attribute(("f", if *val { "1" } else { "0" }));
4049        }
4050        if let Some(ref val) = self.cells {
4051            start.push_attribute(("c", val.as_str()));
4052        }
4053        if let Some(ref val) = self.cp {
4054            {
4055                let s = val.to_string();
4056                start.push_attribute(("cp", s.as_str()));
4057            }
4058        }
4059        if let Some(ref val) = self.r#in {
4060            {
4061                let s = val.to_string();
4062                start.push_attribute(("in", s.as_str()));
4063            }
4064        }
4065        if let Some(ref val) = self.bc {
4066            {
4067                let hex = encode_hex(val);
4068                start.push_attribute(("bc", hex.as_str()));
4069            }
4070        }
4071        if let Some(ref val) = self.fc {
4072            {
4073                let hex = encode_hex(val);
4074                start.push_attribute(("fc", hex.as_str()));
4075            }
4076        }
4077        if let Some(ref val) = self.i {
4078            start.push_attribute(("i", if *val { "1" } else { "0" }));
4079        }
4080        if let Some(ref val) = self.un {
4081            start.push_attribute(("un", if *val { "1" } else { "0" }));
4082        }
4083        if let Some(ref val) = self.st {
4084            start.push_attribute(("st", if *val { "1" } else { "0" }));
4085        }
4086        if let Some(ref val) = self.b {
4087            start.push_attribute(("b", if *val { "1" } else { "0" }));
4088        }
4089        #[cfg(feature = "extra-attrs")]
4090        for (key, value) in &self.extra_attrs {
4091            start.push_attribute((key.as_str(), value.as_str()));
4092        }
4093        start
4094    }
4095
4096    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
4097        #[cfg(feature = "extra-children")]
4098        let mut extra_iter = self.extra_children.iter().peekable();
4099        #[cfg(feature = "extra-children")]
4100        let mut emit_idx: usize = 0;
4101        for item in &self.tpls {
4102            #[cfg(feature = "extra-children")]
4103            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4104                extra_iter
4105                    .next()
4106                    .unwrap()
4107                    .node
4108                    .write_to(writer)
4109                    .map_err(SerializeError::from)?;
4110            }
4111            item.write_element("tpls", writer)?;
4112            #[cfg(feature = "extra-children")]
4113            {
4114                emit_idx += 1;
4115            }
4116        }
4117        for item in &self.x {
4118            #[cfg(feature = "extra-children")]
4119            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4120                extra_iter
4121                    .next()
4122                    .unwrap()
4123                    .node
4124                    .write_to(writer)
4125                    .map_err(SerializeError::from)?;
4126            }
4127            item.write_element("x", writer)?;
4128            #[cfg(feature = "extra-children")]
4129            {
4130                emit_idx += 1;
4131            }
4132        }
4133        #[cfg(feature = "extra-children")]
4134        for extra in extra_iter {
4135            extra.node.write_to(writer).map_err(SerializeError::from)?;
4136        }
4137        Ok(())
4138    }
4139
4140    fn is_empty_element(&self) -> bool {
4141        if !self.tpls.is_empty() {
4142            return false;
4143        }
4144        if !self.x.is_empty() {
4145            return false;
4146        }
4147        #[cfg(feature = "extra-children")]
4148        if !self.extra_children.is_empty() {
4149            return false;
4150        }
4151        true
4152    }
4153}
4154
4155impl ToXml for CTDateTime {
4156    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4157        #[allow(unused_mut)]
4158        let mut start = start;
4159        {
4160            let val = &self.value;
4161            start.push_attribute(("v", val.as_str()));
4162        }
4163        if let Some(ref val) = self.u {
4164            start.push_attribute(("u", if *val { "1" } else { "0" }));
4165        }
4166        if let Some(ref val) = self.formula {
4167            start.push_attribute(("f", if *val { "1" } else { "0" }));
4168        }
4169        if let Some(ref val) = self.cells {
4170            start.push_attribute(("c", val.as_str()));
4171        }
4172        if let Some(ref val) = self.cp {
4173            {
4174                let s = val.to_string();
4175                start.push_attribute(("cp", s.as_str()));
4176            }
4177        }
4178        #[cfg(feature = "extra-attrs")]
4179        for (key, value) in &self.extra_attrs {
4180            start.push_attribute((key.as_str(), value.as_str()));
4181        }
4182        start
4183    }
4184
4185    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
4186        #[cfg(feature = "extra-children")]
4187        let mut extra_iter = self.extra_children.iter().peekable();
4188        #[cfg(feature = "extra-children")]
4189        let mut emit_idx: usize = 0;
4190        for item in &self.x {
4191            #[cfg(feature = "extra-children")]
4192            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4193                extra_iter
4194                    .next()
4195                    .unwrap()
4196                    .node
4197                    .write_to(writer)
4198                    .map_err(SerializeError::from)?;
4199            }
4200            item.write_element("x", writer)?;
4201            #[cfg(feature = "extra-children")]
4202            {
4203                emit_idx += 1;
4204            }
4205        }
4206        #[cfg(feature = "extra-children")]
4207        for extra in extra_iter {
4208            extra.node.write_to(writer).map_err(SerializeError::from)?;
4209        }
4210        Ok(())
4211    }
4212
4213    fn is_empty_element(&self) -> bool {
4214        if !self.x.is_empty() {
4215            return false;
4216        }
4217        #[cfg(feature = "extra-children")]
4218        if !self.extra_children.is_empty() {
4219            return false;
4220        }
4221        true
4222    }
4223}
4224
4225impl ToXml for FieldGroup {
4226    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4227        #[allow(unused_mut)]
4228        let mut start = start;
4229        if let Some(ref val) = self.par {
4230            {
4231                let s = val.to_string();
4232                start.push_attribute(("par", s.as_str()));
4233            }
4234        }
4235        if let Some(ref val) = self.base {
4236            {
4237                let s = val.to_string();
4238                start.push_attribute(("base", s.as_str()));
4239            }
4240        }
4241        #[cfg(feature = "extra-attrs")]
4242        for (key, value) in &self.extra_attrs {
4243            start.push_attribute((key.as_str(), value.as_str()));
4244        }
4245        start
4246    }
4247
4248    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
4249        #[cfg(feature = "extra-children")]
4250        let mut extra_iter = self.extra_children.iter().peekable();
4251        #[cfg(feature = "extra-children")]
4252        let mut emit_idx: usize = 0;
4253        #[cfg(feature = "extra-children")]
4254        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4255            extra_iter
4256                .next()
4257                .unwrap()
4258                .node
4259                .write_to(writer)
4260                .map_err(SerializeError::from)?;
4261        }
4262        if let Some(ref val) = self.range_pr {
4263            val.write_element("rangePr", writer)?;
4264        }
4265        #[cfg(feature = "extra-children")]
4266        {
4267            emit_idx += 1;
4268        }
4269        #[cfg(feature = "extra-children")]
4270        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4271            extra_iter
4272                .next()
4273                .unwrap()
4274                .node
4275                .write_to(writer)
4276                .map_err(SerializeError::from)?;
4277        }
4278        if let Some(ref val) = self.discrete_pr {
4279            val.write_element("discretePr", writer)?;
4280        }
4281        #[cfg(feature = "extra-children")]
4282        {
4283            emit_idx += 1;
4284        }
4285        #[cfg(feature = "extra-children")]
4286        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4287            extra_iter
4288                .next()
4289                .unwrap()
4290                .node
4291                .write_to(writer)
4292                .map_err(SerializeError::from)?;
4293        }
4294        if let Some(ref val) = self.group_items {
4295            val.write_element("groupItems", writer)?;
4296        }
4297        #[cfg(feature = "extra-children")]
4298        {
4299            emit_idx += 1;
4300        }
4301        #[cfg(feature = "extra-children")]
4302        for extra in extra_iter {
4303            extra.node.write_to(writer).map_err(SerializeError::from)?;
4304        }
4305        Ok(())
4306    }
4307
4308    fn is_empty_element(&self) -> bool {
4309        if self.range_pr.is_some() {
4310            return false;
4311        }
4312        if self.discrete_pr.is_some() {
4313            return false;
4314        }
4315        if self.group_items.is_some() {
4316            return false;
4317        }
4318        #[cfg(feature = "extra-children")]
4319        if !self.extra_children.is_empty() {
4320            return false;
4321        }
4322        true
4323    }
4324}
4325
4326impl ToXml for CTRangePr {
4327    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4328        #[allow(unused_mut)]
4329        let mut start = start;
4330        if let Some(ref val) = self.auto_start {
4331            start.push_attribute(("autoStart", if *val { "1" } else { "0" }));
4332        }
4333        if let Some(ref val) = self.auto_end {
4334            start.push_attribute(("autoEnd", if *val { "1" } else { "0" }));
4335        }
4336        if let Some(ref val) = self.group_by {
4337            {
4338                let s = val.to_string();
4339                start.push_attribute(("groupBy", s.as_str()));
4340            }
4341        }
4342        if let Some(ref val) = self.start_num {
4343            {
4344                let s = val.to_string();
4345                start.push_attribute(("startNum", s.as_str()));
4346            }
4347        }
4348        if let Some(ref val) = self.end_num {
4349            {
4350                let s = val.to_string();
4351                start.push_attribute(("endNum", s.as_str()));
4352            }
4353        }
4354        if let Some(ref val) = self.start_date {
4355            start.push_attribute(("startDate", val.as_str()));
4356        }
4357        if let Some(ref val) = self.end_date {
4358            start.push_attribute(("endDate", val.as_str()));
4359        }
4360        if let Some(ref val) = self.group_interval {
4361            {
4362                let s = val.to_string();
4363                start.push_attribute(("groupInterval", s.as_str()));
4364            }
4365        }
4366        #[cfg(feature = "extra-attrs")]
4367        for (key, value) in &self.extra_attrs {
4368            start.push_attribute((key.as_str(), value.as_str()));
4369        }
4370        start
4371    }
4372
4373    fn is_empty_element(&self) -> bool {
4374        true
4375    }
4376}
4377
4378impl ToXml for CTDiscretePr {
4379    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4380        #[allow(unused_mut)]
4381        let mut start = start;
4382        if let Some(ref val) = self.count {
4383            {
4384                let s = val.to_string();
4385                start.push_attribute(("count", s.as_str()));
4386            }
4387        }
4388        #[cfg(feature = "extra-attrs")]
4389        for (key, value) in &self.extra_attrs {
4390            start.push_attribute((key.as_str(), value.as_str()));
4391        }
4392        start
4393    }
4394
4395    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
4396        #[cfg(feature = "extra-children")]
4397        let mut extra_iter = self.extra_children.iter().peekable();
4398        #[cfg(feature = "extra-children")]
4399        let mut emit_idx: usize = 0;
4400        for item in &self.x {
4401            #[cfg(feature = "extra-children")]
4402            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4403                extra_iter
4404                    .next()
4405                    .unwrap()
4406                    .node
4407                    .write_to(writer)
4408                    .map_err(SerializeError::from)?;
4409            }
4410            item.write_element("x", writer)?;
4411            #[cfg(feature = "extra-children")]
4412            {
4413                emit_idx += 1;
4414            }
4415        }
4416        #[cfg(feature = "extra-children")]
4417        for extra in extra_iter {
4418            extra.node.write_to(writer).map_err(SerializeError::from)?;
4419        }
4420        Ok(())
4421    }
4422
4423    fn is_empty_element(&self) -> bool {
4424        if !self.x.is_empty() {
4425            return false;
4426        }
4427        #[cfg(feature = "extra-children")]
4428        if !self.extra_children.is_empty() {
4429            return false;
4430        }
4431        true
4432    }
4433}
4434
4435impl ToXml for GroupItems {
4436    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4437        #[allow(unused_mut)]
4438        let mut start = start;
4439        if let Some(ref val) = self.count {
4440            {
4441                let s = val.to_string();
4442                start.push_attribute(("count", s.as_str()));
4443            }
4444        }
4445        #[cfg(feature = "extra-attrs")]
4446        for (key, value) in &self.extra_attrs {
4447            start.push_attribute((key.as_str(), value.as_str()));
4448        }
4449        start
4450    }
4451
4452    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
4453        #[cfg(feature = "extra-children")]
4454        let mut extra_iter = self.extra_children.iter().peekable();
4455        #[cfg(feature = "extra-children")]
4456        let mut emit_idx: usize = 0;
4457        for item in &self.m {
4458            #[cfg(feature = "extra-children")]
4459            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4460                extra_iter
4461                    .next()
4462                    .unwrap()
4463                    .node
4464                    .write_to(writer)
4465                    .map_err(SerializeError::from)?;
4466            }
4467            item.write_element("m", writer)?;
4468            #[cfg(feature = "extra-children")]
4469            {
4470                emit_idx += 1;
4471            }
4472        }
4473        for item in &self.n {
4474            #[cfg(feature = "extra-children")]
4475            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4476                extra_iter
4477                    .next()
4478                    .unwrap()
4479                    .node
4480                    .write_to(writer)
4481                    .map_err(SerializeError::from)?;
4482            }
4483            item.write_element("n", writer)?;
4484            #[cfg(feature = "extra-children")]
4485            {
4486                emit_idx += 1;
4487            }
4488        }
4489        for item in &self.b {
4490            #[cfg(feature = "extra-children")]
4491            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4492                extra_iter
4493                    .next()
4494                    .unwrap()
4495                    .node
4496                    .write_to(writer)
4497                    .map_err(SerializeError::from)?;
4498            }
4499            item.write_element("b", writer)?;
4500            #[cfg(feature = "extra-children")]
4501            {
4502                emit_idx += 1;
4503            }
4504        }
4505        for item in &self.e {
4506            #[cfg(feature = "extra-children")]
4507            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4508                extra_iter
4509                    .next()
4510                    .unwrap()
4511                    .node
4512                    .write_to(writer)
4513                    .map_err(SerializeError::from)?;
4514            }
4515            item.write_element("e", writer)?;
4516            #[cfg(feature = "extra-children")]
4517            {
4518                emit_idx += 1;
4519            }
4520        }
4521        for item in &self.style_index {
4522            #[cfg(feature = "extra-children")]
4523            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4524                extra_iter
4525                    .next()
4526                    .unwrap()
4527                    .node
4528                    .write_to(writer)
4529                    .map_err(SerializeError::from)?;
4530            }
4531            item.write_element("s", writer)?;
4532            #[cfg(feature = "extra-children")]
4533            {
4534                emit_idx += 1;
4535            }
4536        }
4537        for item in &self.d {
4538            #[cfg(feature = "extra-children")]
4539            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4540                extra_iter
4541                    .next()
4542                    .unwrap()
4543                    .node
4544                    .write_to(writer)
4545                    .map_err(SerializeError::from)?;
4546            }
4547            item.write_element("d", writer)?;
4548            #[cfg(feature = "extra-children")]
4549            {
4550                emit_idx += 1;
4551            }
4552        }
4553        #[cfg(feature = "extra-children")]
4554        for extra in extra_iter {
4555            extra.node.write_to(writer).map_err(SerializeError::from)?;
4556        }
4557        Ok(())
4558    }
4559
4560    fn is_empty_element(&self) -> bool {
4561        if !self.m.is_empty() {
4562            return false;
4563        }
4564        if !self.n.is_empty() {
4565            return false;
4566        }
4567        if !self.b.is_empty() {
4568            return false;
4569        }
4570        if !self.e.is_empty() {
4571            return false;
4572        }
4573        if !self.style_index.is_empty() {
4574            return false;
4575        }
4576        if !self.d.is_empty() {
4577            return false;
4578        }
4579        #[cfg(feature = "extra-children")]
4580        if !self.extra_children.is_empty() {
4581            return false;
4582        }
4583        true
4584    }
4585}
4586
4587impl ToXml for PivotCacheRecords {
4588    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4589        #[allow(unused_mut)]
4590        let mut start = start;
4591        if let Some(ref val) = self.count {
4592            {
4593                let s = val.to_string();
4594                start.push_attribute(("count", s.as_str()));
4595            }
4596        }
4597        #[cfg(feature = "extra-attrs")]
4598        for (key, value) in &self.extra_attrs {
4599            start.push_attribute((key.as_str(), value.as_str()));
4600        }
4601        start
4602    }
4603
4604    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
4605        #[cfg(feature = "extra-children")]
4606        let mut extra_iter = self.extra_children.iter().peekable();
4607        #[cfg(feature = "extra-children")]
4608        let mut emit_idx: usize = 0;
4609        for item in &self.reference {
4610            #[cfg(feature = "extra-children")]
4611            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4612                extra_iter
4613                    .next()
4614                    .unwrap()
4615                    .node
4616                    .write_to(writer)
4617                    .map_err(SerializeError::from)?;
4618            }
4619            item.write_element("r", writer)?;
4620            #[cfg(feature = "extra-children")]
4621            {
4622                emit_idx += 1;
4623            }
4624        }
4625        #[cfg(feature = "extra-children")]
4626        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4627            extra_iter
4628                .next()
4629                .unwrap()
4630                .node
4631                .write_to(writer)
4632                .map_err(SerializeError::from)?;
4633        }
4634        if let Some(ref val) = self.extension_list {
4635            val.write_element("extLst", writer)?;
4636        }
4637        #[cfg(feature = "extra-children")]
4638        {
4639            emit_idx += 1;
4640        }
4641        #[cfg(feature = "extra-children")]
4642        for extra in extra_iter {
4643            extra.node.write_to(writer).map_err(SerializeError::from)?;
4644        }
4645        Ok(())
4646    }
4647
4648    fn is_empty_element(&self) -> bool {
4649        if !self.reference.is_empty() {
4650            return false;
4651        }
4652        if self.extension_list.is_some() {
4653            return false;
4654        }
4655        #[cfg(feature = "extra-children")]
4656        if !self.extra_children.is_empty() {
4657            return false;
4658        }
4659        true
4660    }
4661}
4662
4663impl ToXml for CTRecord {
4664    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
4665        #[cfg(feature = "extra-children")]
4666        let mut extra_iter = self.extra_children.iter().peekable();
4667        #[cfg(feature = "extra-children")]
4668        let mut emit_idx: usize = 0;
4669        for item in &self.m {
4670            #[cfg(feature = "extra-children")]
4671            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4672                extra_iter
4673                    .next()
4674                    .unwrap()
4675                    .node
4676                    .write_to(writer)
4677                    .map_err(SerializeError::from)?;
4678            }
4679            item.write_element("m", writer)?;
4680            #[cfg(feature = "extra-children")]
4681            {
4682                emit_idx += 1;
4683            }
4684        }
4685        for item in &self.n {
4686            #[cfg(feature = "extra-children")]
4687            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4688                extra_iter
4689                    .next()
4690                    .unwrap()
4691                    .node
4692                    .write_to(writer)
4693                    .map_err(SerializeError::from)?;
4694            }
4695            item.write_element("n", writer)?;
4696            #[cfg(feature = "extra-children")]
4697            {
4698                emit_idx += 1;
4699            }
4700        }
4701        for item in &self.b {
4702            #[cfg(feature = "extra-children")]
4703            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4704                extra_iter
4705                    .next()
4706                    .unwrap()
4707                    .node
4708                    .write_to(writer)
4709                    .map_err(SerializeError::from)?;
4710            }
4711            item.write_element("b", writer)?;
4712            #[cfg(feature = "extra-children")]
4713            {
4714                emit_idx += 1;
4715            }
4716        }
4717        for item in &self.e {
4718            #[cfg(feature = "extra-children")]
4719            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4720                extra_iter
4721                    .next()
4722                    .unwrap()
4723                    .node
4724                    .write_to(writer)
4725                    .map_err(SerializeError::from)?;
4726            }
4727            item.write_element("e", writer)?;
4728            #[cfg(feature = "extra-children")]
4729            {
4730                emit_idx += 1;
4731            }
4732        }
4733        for item in &self.style_index {
4734            #[cfg(feature = "extra-children")]
4735            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4736                extra_iter
4737                    .next()
4738                    .unwrap()
4739                    .node
4740                    .write_to(writer)
4741                    .map_err(SerializeError::from)?;
4742            }
4743            item.write_element("s", writer)?;
4744            #[cfg(feature = "extra-children")]
4745            {
4746                emit_idx += 1;
4747            }
4748        }
4749        for item in &self.d {
4750            #[cfg(feature = "extra-children")]
4751            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4752                extra_iter
4753                    .next()
4754                    .unwrap()
4755                    .node
4756                    .write_to(writer)
4757                    .map_err(SerializeError::from)?;
4758            }
4759            item.write_element("d", writer)?;
4760            #[cfg(feature = "extra-children")]
4761            {
4762                emit_idx += 1;
4763            }
4764        }
4765        for item in &self.x {
4766            #[cfg(feature = "extra-children")]
4767            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4768                extra_iter
4769                    .next()
4770                    .unwrap()
4771                    .node
4772                    .write_to(writer)
4773                    .map_err(SerializeError::from)?;
4774            }
4775            item.write_element("x", writer)?;
4776            #[cfg(feature = "extra-children")]
4777            {
4778                emit_idx += 1;
4779            }
4780        }
4781        #[cfg(feature = "extra-children")]
4782        for extra in extra_iter {
4783            extra.node.write_to(writer).map_err(SerializeError::from)?;
4784        }
4785        Ok(())
4786    }
4787
4788    fn is_empty_element(&self) -> bool {
4789        if !self.m.is_empty() {
4790            return false;
4791        }
4792        if !self.n.is_empty() {
4793            return false;
4794        }
4795        if !self.b.is_empty() {
4796            return false;
4797        }
4798        if !self.e.is_empty() {
4799            return false;
4800        }
4801        if !self.style_index.is_empty() {
4802            return false;
4803        }
4804        if !self.d.is_empty() {
4805            return false;
4806        }
4807        if !self.x.is_empty() {
4808            return false;
4809        }
4810        #[cfg(feature = "extra-children")]
4811        if !self.extra_children.is_empty() {
4812            return false;
4813        }
4814        true
4815    }
4816}
4817
4818impl ToXml for CTPCDKPIs {
4819    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4820        #[allow(unused_mut)]
4821        let mut start = start;
4822        if let Some(ref val) = self.count {
4823            {
4824                let s = val.to_string();
4825                start.push_attribute(("count", s.as_str()));
4826            }
4827        }
4828        #[cfg(feature = "extra-attrs")]
4829        for (key, value) in &self.extra_attrs {
4830            start.push_attribute((key.as_str(), value.as_str()));
4831        }
4832        start
4833    }
4834
4835    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
4836        #[cfg(feature = "extra-children")]
4837        let mut extra_iter = self.extra_children.iter().peekable();
4838        #[cfg(feature = "extra-children")]
4839        let mut emit_idx: usize = 0;
4840        for item in &self.kpi {
4841            #[cfg(feature = "extra-children")]
4842            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4843                extra_iter
4844                    .next()
4845                    .unwrap()
4846                    .node
4847                    .write_to(writer)
4848                    .map_err(SerializeError::from)?;
4849            }
4850            item.write_element("kpi", writer)?;
4851            #[cfg(feature = "extra-children")]
4852            {
4853                emit_idx += 1;
4854            }
4855        }
4856        #[cfg(feature = "extra-children")]
4857        for extra in extra_iter {
4858            extra.node.write_to(writer).map_err(SerializeError::from)?;
4859        }
4860        Ok(())
4861    }
4862
4863    fn is_empty_element(&self) -> bool {
4864        if !self.kpi.is_empty() {
4865            return false;
4866        }
4867        #[cfg(feature = "extra-children")]
4868        if !self.extra_children.is_empty() {
4869            return false;
4870        }
4871        true
4872    }
4873}
4874
4875impl ToXml for CTPCDKPI {
4876    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4877        #[allow(unused_mut)]
4878        let mut start = start;
4879        {
4880            let val = &self.unique_name;
4881            start.push_attribute(("uniqueName", val.as_str()));
4882        }
4883        if let Some(ref val) = self.caption {
4884            start.push_attribute(("caption", val.as_str()));
4885        }
4886        if let Some(ref val) = self.display_folder {
4887            start.push_attribute(("displayFolder", val.as_str()));
4888        }
4889        if let Some(ref val) = self.measure_group {
4890            start.push_attribute(("measureGroup", val.as_str()));
4891        }
4892        if let Some(ref val) = self.parent {
4893            start.push_attribute(("parent", val.as_str()));
4894        }
4895        {
4896            let val = &self.value;
4897            start.push_attribute(("value", val.as_str()));
4898        }
4899        if let Some(ref val) = self.goal {
4900            start.push_attribute(("goal", val.as_str()));
4901        }
4902        if let Some(ref val) = self.status {
4903            start.push_attribute(("status", val.as_str()));
4904        }
4905        if let Some(ref val) = self.trend {
4906            start.push_attribute(("trend", val.as_str()));
4907        }
4908        if let Some(ref val) = self.weight {
4909            start.push_attribute(("weight", val.as_str()));
4910        }
4911        if let Some(ref val) = self.time {
4912            start.push_attribute(("time", val.as_str()));
4913        }
4914        #[cfg(feature = "extra-attrs")]
4915        for (key, value) in &self.extra_attrs {
4916            start.push_attribute((key.as_str(), value.as_str()));
4917        }
4918        start
4919    }
4920
4921    fn is_empty_element(&self) -> bool {
4922        true
4923    }
4924}
4925
4926impl ToXml for CTCacheHierarchies {
4927    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4928        #[allow(unused_mut)]
4929        let mut start = start;
4930        if let Some(ref val) = self.count {
4931            {
4932                let s = val.to_string();
4933                start.push_attribute(("count", s.as_str()));
4934            }
4935        }
4936        #[cfg(feature = "extra-attrs")]
4937        for (key, value) in &self.extra_attrs {
4938            start.push_attribute((key.as_str(), value.as_str()));
4939        }
4940        start
4941    }
4942
4943    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
4944        #[cfg(feature = "extra-children")]
4945        let mut extra_iter = self.extra_children.iter().peekable();
4946        #[cfg(feature = "extra-children")]
4947        let mut emit_idx: usize = 0;
4948        for item in &self.cache_hierarchy {
4949            #[cfg(feature = "extra-children")]
4950            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
4951                extra_iter
4952                    .next()
4953                    .unwrap()
4954                    .node
4955                    .write_to(writer)
4956                    .map_err(SerializeError::from)?;
4957            }
4958            item.write_element("cacheHierarchy", writer)?;
4959            #[cfg(feature = "extra-children")]
4960            {
4961                emit_idx += 1;
4962            }
4963        }
4964        #[cfg(feature = "extra-children")]
4965        for extra in extra_iter {
4966            extra.node.write_to(writer).map_err(SerializeError::from)?;
4967        }
4968        Ok(())
4969    }
4970
4971    fn is_empty_element(&self) -> bool {
4972        if !self.cache_hierarchy.is_empty() {
4973            return false;
4974        }
4975        #[cfg(feature = "extra-children")]
4976        if !self.extra_children.is_empty() {
4977            return false;
4978        }
4979        true
4980    }
4981}
4982
4983impl ToXml for CTCacheHierarchy {
4984    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
4985        #[allow(unused_mut)]
4986        let mut start = start;
4987        {
4988            let val = &self.unique_name;
4989            start.push_attribute(("uniqueName", val.as_str()));
4990        }
4991        if let Some(ref val) = self.caption {
4992            start.push_attribute(("caption", val.as_str()));
4993        }
4994        if let Some(ref val) = self.measure {
4995            start.push_attribute(("measure", if *val { "1" } else { "0" }));
4996        }
4997        if let Some(ref val) = self.set {
4998            start.push_attribute(("set", if *val { "1" } else { "0" }));
4999        }
5000        if let Some(ref val) = self.parent_set {
5001            {
5002                let s = val.to_string();
5003                start.push_attribute(("parentSet", s.as_str()));
5004            }
5005        }
5006        if let Some(ref val) = self.icon_set {
5007            {
5008                let s = val.to_string();
5009                start.push_attribute(("iconSet", s.as_str()));
5010            }
5011        }
5012        if let Some(ref val) = self.attribute {
5013            start.push_attribute(("attribute", if *val { "1" } else { "0" }));
5014        }
5015        if let Some(ref val) = self.time {
5016            start.push_attribute(("time", if *val { "1" } else { "0" }));
5017        }
5018        if let Some(ref val) = self.key_attribute {
5019            start.push_attribute(("keyAttribute", if *val { "1" } else { "0" }));
5020        }
5021        if let Some(ref val) = self.default_member_unique_name {
5022            start.push_attribute(("defaultMemberUniqueName", val.as_str()));
5023        }
5024        if let Some(ref val) = self.all_unique_name {
5025            start.push_attribute(("allUniqueName", val.as_str()));
5026        }
5027        if let Some(ref val) = self.all_caption {
5028            start.push_attribute(("allCaption", val.as_str()));
5029        }
5030        if let Some(ref val) = self.dimension_unique_name {
5031            start.push_attribute(("dimensionUniqueName", val.as_str()));
5032        }
5033        if let Some(ref val) = self.display_folder {
5034            start.push_attribute(("displayFolder", val.as_str()));
5035        }
5036        if let Some(ref val) = self.measure_group {
5037            start.push_attribute(("measureGroup", val.as_str()));
5038        }
5039        if let Some(ref val) = self.measures {
5040            start.push_attribute(("measures", if *val { "1" } else { "0" }));
5041        }
5042        {
5043            let val = &self.count;
5044            {
5045                let s = val.to_string();
5046                start.push_attribute(("count", s.as_str()));
5047            }
5048        }
5049        if let Some(ref val) = self.one_field {
5050            start.push_attribute(("oneField", if *val { "1" } else { "0" }));
5051        }
5052        if let Some(ref val) = self.member_value_datatype {
5053            {
5054                let s = val.to_string();
5055                start.push_attribute(("memberValueDatatype", s.as_str()));
5056            }
5057        }
5058        if let Some(ref val) = self.unbalanced {
5059            start.push_attribute(("unbalanced", if *val { "1" } else { "0" }));
5060        }
5061        if let Some(ref val) = self.unbalanced_group {
5062            start.push_attribute(("unbalancedGroup", if *val { "1" } else { "0" }));
5063        }
5064        if let Some(ref val) = self.hidden {
5065            start.push_attribute(("hidden", if *val { "1" } else { "0" }));
5066        }
5067        #[cfg(feature = "extra-attrs")]
5068        for (key, value) in &self.extra_attrs {
5069            start.push_attribute((key.as_str(), value.as_str()));
5070        }
5071        start
5072    }
5073
5074    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5075        #[cfg(feature = "extra-children")]
5076        let mut extra_iter = self.extra_children.iter().peekable();
5077        #[cfg(feature = "extra-children")]
5078        let mut emit_idx: usize = 0;
5079        #[cfg(feature = "extra-children")]
5080        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5081            extra_iter
5082                .next()
5083                .unwrap()
5084                .node
5085                .write_to(writer)
5086                .map_err(SerializeError::from)?;
5087        }
5088        if let Some(ref val) = self.fields_usage {
5089            val.write_element("fieldsUsage", writer)?;
5090        }
5091        #[cfg(feature = "extra-children")]
5092        {
5093            emit_idx += 1;
5094        }
5095        #[cfg(feature = "extra-children")]
5096        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5097            extra_iter
5098                .next()
5099                .unwrap()
5100                .node
5101                .write_to(writer)
5102                .map_err(SerializeError::from)?;
5103        }
5104        if let Some(ref val) = self.group_levels {
5105            val.write_element("groupLevels", writer)?;
5106        }
5107        #[cfg(feature = "extra-children")]
5108        {
5109            emit_idx += 1;
5110        }
5111        #[cfg(feature = "extra-children")]
5112        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5113            extra_iter
5114                .next()
5115                .unwrap()
5116                .node
5117                .write_to(writer)
5118                .map_err(SerializeError::from)?;
5119        }
5120        if let Some(ref val) = self.extension_list {
5121            val.write_element("extLst", writer)?;
5122        }
5123        #[cfg(feature = "extra-children")]
5124        {
5125            emit_idx += 1;
5126        }
5127        #[cfg(feature = "extra-children")]
5128        for extra in extra_iter {
5129            extra.node.write_to(writer).map_err(SerializeError::from)?;
5130        }
5131        Ok(())
5132    }
5133
5134    fn is_empty_element(&self) -> bool {
5135        if self.fields_usage.is_some() {
5136            return false;
5137        }
5138        if self.group_levels.is_some() {
5139            return false;
5140        }
5141        if self.extension_list.is_some() {
5142            return false;
5143        }
5144        #[cfg(feature = "extra-children")]
5145        if !self.extra_children.is_empty() {
5146            return false;
5147        }
5148        true
5149    }
5150}
5151
5152impl ToXml for CTFieldsUsage {
5153    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5154        #[allow(unused_mut)]
5155        let mut start = start;
5156        if let Some(ref val) = self.count {
5157            {
5158                let s = val.to_string();
5159                start.push_attribute(("count", s.as_str()));
5160            }
5161        }
5162        #[cfg(feature = "extra-attrs")]
5163        for (key, value) in &self.extra_attrs {
5164            start.push_attribute((key.as_str(), value.as_str()));
5165        }
5166        start
5167    }
5168
5169    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5170        #[cfg(feature = "extra-children")]
5171        let mut extra_iter = self.extra_children.iter().peekable();
5172        #[cfg(feature = "extra-children")]
5173        let mut emit_idx: usize = 0;
5174        for item in &self.field_usage {
5175            #[cfg(feature = "extra-children")]
5176            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5177                extra_iter
5178                    .next()
5179                    .unwrap()
5180                    .node
5181                    .write_to(writer)
5182                    .map_err(SerializeError::from)?;
5183            }
5184            item.write_element("fieldUsage", writer)?;
5185            #[cfg(feature = "extra-children")]
5186            {
5187                emit_idx += 1;
5188            }
5189        }
5190        #[cfg(feature = "extra-children")]
5191        for extra in extra_iter {
5192            extra.node.write_to(writer).map_err(SerializeError::from)?;
5193        }
5194        Ok(())
5195    }
5196
5197    fn is_empty_element(&self) -> bool {
5198        if !self.field_usage.is_empty() {
5199            return false;
5200        }
5201        #[cfg(feature = "extra-children")]
5202        if !self.extra_children.is_empty() {
5203            return false;
5204        }
5205        true
5206    }
5207}
5208
5209impl ToXml for CTFieldUsage {
5210    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5211        #[allow(unused_mut)]
5212        let mut start = start;
5213        {
5214            let val = &self.x;
5215            {
5216                let s = val.to_string();
5217                start.push_attribute(("x", s.as_str()));
5218            }
5219        }
5220        #[cfg(feature = "extra-attrs")]
5221        for (key, value) in &self.extra_attrs {
5222            start.push_attribute((key.as_str(), value.as_str()));
5223        }
5224        start
5225    }
5226
5227    fn is_empty_element(&self) -> bool {
5228        true
5229    }
5230}
5231
5232impl ToXml for CTGroupLevels {
5233    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5234        #[allow(unused_mut)]
5235        let mut start = start;
5236        if let Some(ref val) = self.count {
5237            {
5238                let s = val.to_string();
5239                start.push_attribute(("count", s.as_str()));
5240            }
5241        }
5242        #[cfg(feature = "extra-attrs")]
5243        for (key, value) in &self.extra_attrs {
5244            start.push_attribute((key.as_str(), value.as_str()));
5245        }
5246        start
5247    }
5248
5249    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5250        #[cfg(feature = "extra-children")]
5251        let mut extra_iter = self.extra_children.iter().peekable();
5252        #[cfg(feature = "extra-children")]
5253        let mut emit_idx: usize = 0;
5254        for item in &self.group_level {
5255            #[cfg(feature = "extra-children")]
5256            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5257                extra_iter
5258                    .next()
5259                    .unwrap()
5260                    .node
5261                    .write_to(writer)
5262                    .map_err(SerializeError::from)?;
5263            }
5264            item.write_element("groupLevel", writer)?;
5265            #[cfg(feature = "extra-children")]
5266            {
5267                emit_idx += 1;
5268            }
5269        }
5270        #[cfg(feature = "extra-children")]
5271        for extra in extra_iter {
5272            extra.node.write_to(writer).map_err(SerializeError::from)?;
5273        }
5274        Ok(())
5275    }
5276
5277    fn is_empty_element(&self) -> bool {
5278        if !self.group_level.is_empty() {
5279            return false;
5280        }
5281        #[cfg(feature = "extra-children")]
5282        if !self.extra_children.is_empty() {
5283            return false;
5284        }
5285        true
5286    }
5287}
5288
5289impl ToXml for CTGroupLevel {
5290    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5291        #[allow(unused_mut)]
5292        let mut start = start;
5293        {
5294            let val = &self.unique_name;
5295            start.push_attribute(("uniqueName", val.as_str()));
5296        }
5297        {
5298            let val = &self.caption;
5299            start.push_attribute(("caption", val.as_str()));
5300        }
5301        if let Some(ref val) = self.user {
5302            start.push_attribute(("user", if *val { "1" } else { "0" }));
5303        }
5304        if let Some(ref val) = self.custom_roll_up {
5305            start.push_attribute(("customRollUp", if *val { "1" } else { "0" }));
5306        }
5307        #[cfg(feature = "extra-attrs")]
5308        for (key, value) in &self.extra_attrs {
5309            start.push_attribute((key.as_str(), value.as_str()));
5310        }
5311        start
5312    }
5313
5314    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5315        #[cfg(feature = "extra-children")]
5316        let mut extra_iter = self.extra_children.iter().peekable();
5317        #[cfg(feature = "extra-children")]
5318        let mut emit_idx: usize = 0;
5319        #[cfg(feature = "extra-children")]
5320        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5321            extra_iter
5322                .next()
5323                .unwrap()
5324                .node
5325                .write_to(writer)
5326                .map_err(SerializeError::from)?;
5327        }
5328        if let Some(ref val) = self.groups {
5329            val.write_element("groups", writer)?;
5330        }
5331        #[cfg(feature = "extra-children")]
5332        {
5333            emit_idx += 1;
5334        }
5335        #[cfg(feature = "extra-children")]
5336        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5337            extra_iter
5338                .next()
5339                .unwrap()
5340                .node
5341                .write_to(writer)
5342                .map_err(SerializeError::from)?;
5343        }
5344        if let Some(ref val) = self.extension_list {
5345            val.write_element("extLst", writer)?;
5346        }
5347        #[cfg(feature = "extra-children")]
5348        {
5349            emit_idx += 1;
5350        }
5351        #[cfg(feature = "extra-children")]
5352        for extra in extra_iter {
5353            extra.node.write_to(writer).map_err(SerializeError::from)?;
5354        }
5355        Ok(())
5356    }
5357
5358    fn is_empty_element(&self) -> bool {
5359        if self.groups.is_some() {
5360            return false;
5361        }
5362        if self.extension_list.is_some() {
5363            return false;
5364        }
5365        #[cfg(feature = "extra-children")]
5366        if !self.extra_children.is_empty() {
5367            return false;
5368        }
5369        true
5370    }
5371}
5372
5373impl ToXml for CTGroups {
5374    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5375        #[allow(unused_mut)]
5376        let mut start = start;
5377        if let Some(ref val) = self.count {
5378            {
5379                let s = val.to_string();
5380                start.push_attribute(("count", s.as_str()));
5381            }
5382        }
5383        #[cfg(feature = "extra-attrs")]
5384        for (key, value) in &self.extra_attrs {
5385            start.push_attribute((key.as_str(), value.as_str()));
5386        }
5387        start
5388    }
5389
5390    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5391        #[cfg(feature = "extra-children")]
5392        let mut extra_iter = self.extra_children.iter().peekable();
5393        #[cfg(feature = "extra-children")]
5394        let mut emit_idx: usize = 0;
5395        for item in &self.group {
5396            #[cfg(feature = "extra-children")]
5397            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5398                extra_iter
5399                    .next()
5400                    .unwrap()
5401                    .node
5402                    .write_to(writer)
5403                    .map_err(SerializeError::from)?;
5404            }
5405            item.write_element("group", writer)?;
5406            #[cfg(feature = "extra-children")]
5407            {
5408                emit_idx += 1;
5409            }
5410        }
5411        #[cfg(feature = "extra-children")]
5412        for extra in extra_iter {
5413            extra.node.write_to(writer).map_err(SerializeError::from)?;
5414        }
5415        Ok(())
5416    }
5417
5418    fn is_empty_element(&self) -> bool {
5419        if !self.group.is_empty() {
5420            return false;
5421        }
5422        #[cfg(feature = "extra-children")]
5423        if !self.extra_children.is_empty() {
5424            return false;
5425        }
5426        true
5427    }
5428}
5429
5430impl ToXml for CTLevelGroup {
5431    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5432        #[allow(unused_mut)]
5433        let mut start = start;
5434        {
5435            let val = &self.name;
5436            start.push_attribute(("name", val.as_str()));
5437        }
5438        {
5439            let val = &self.unique_name;
5440            start.push_attribute(("uniqueName", val.as_str()));
5441        }
5442        {
5443            let val = &self.caption;
5444            start.push_attribute(("caption", val.as_str()));
5445        }
5446        if let Some(ref val) = self.unique_parent {
5447            start.push_attribute(("uniqueParent", val.as_str()));
5448        }
5449        if let Some(ref val) = self.id {
5450            {
5451                let s = val.to_string();
5452                start.push_attribute(("id", s.as_str()));
5453            }
5454        }
5455        #[cfg(feature = "extra-attrs")]
5456        for (key, value) in &self.extra_attrs {
5457            start.push_attribute((key.as_str(), value.as_str()));
5458        }
5459        start
5460    }
5461
5462    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5463        #[cfg(feature = "extra-children")]
5464        let mut extra_iter = self.extra_children.iter().peekable();
5465        #[cfg(feature = "extra-children")]
5466        let mut emit_idx: usize = 0;
5467        #[cfg(feature = "extra-children")]
5468        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5469            extra_iter
5470                .next()
5471                .unwrap()
5472                .node
5473                .write_to(writer)
5474                .map_err(SerializeError::from)?;
5475        }
5476        {
5477            let val = &self.group_members;
5478            val.write_element("groupMembers", writer)?;
5479        }
5480        #[cfg(feature = "extra-children")]
5481        {
5482            emit_idx += 1;
5483        }
5484        #[cfg(feature = "extra-children")]
5485        for extra in extra_iter {
5486            extra.node.write_to(writer).map_err(SerializeError::from)?;
5487        }
5488        Ok(())
5489    }
5490
5491    fn is_empty_element(&self) -> bool {
5492        false
5493    }
5494}
5495
5496impl ToXml for CTGroupMembers {
5497    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5498        #[allow(unused_mut)]
5499        let mut start = start;
5500        if let Some(ref val) = self.count {
5501            {
5502                let s = val.to_string();
5503                start.push_attribute(("count", s.as_str()));
5504            }
5505        }
5506        #[cfg(feature = "extra-attrs")]
5507        for (key, value) in &self.extra_attrs {
5508            start.push_attribute((key.as_str(), value.as_str()));
5509        }
5510        start
5511    }
5512
5513    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5514        #[cfg(feature = "extra-children")]
5515        let mut extra_iter = self.extra_children.iter().peekable();
5516        #[cfg(feature = "extra-children")]
5517        let mut emit_idx: usize = 0;
5518        for item in &self.group_member {
5519            #[cfg(feature = "extra-children")]
5520            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5521                extra_iter
5522                    .next()
5523                    .unwrap()
5524                    .node
5525                    .write_to(writer)
5526                    .map_err(SerializeError::from)?;
5527            }
5528            item.write_element("groupMember", writer)?;
5529            #[cfg(feature = "extra-children")]
5530            {
5531                emit_idx += 1;
5532            }
5533        }
5534        #[cfg(feature = "extra-children")]
5535        for extra in extra_iter {
5536            extra.node.write_to(writer).map_err(SerializeError::from)?;
5537        }
5538        Ok(())
5539    }
5540
5541    fn is_empty_element(&self) -> bool {
5542        if !self.group_member.is_empty() {
5543            return false;
5544        }
5545        #[cfg(feature = "extra-children")]
5546        if !self.extra_children.is_empty() {
5547            return false;
5548        }
5549        true
5550    }
5551}
5552
5553impl ToXml for CTGroupMember {
5554    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5555        #[allow(unused_mut)]
5556        let mut start = start;
5557        {
5558            let val = &self.unique_name;
5559            start.push_attribute(("uniqueName", val.as_str()));
5560        }
5561        if let Some(ref val) = self.group {
5562            start.push_attribute(("group", if *val { "1" } else { "0" }));
5563        }
5564        #[cfg(feature = "extra-attrs")]
5565        for (key, value) in &self.extra_attrs {
5566            start.push_attribute((key.as_str(), value.as_str()));
5567        }
5568        start
5569    }
5570
5571    fn is_empty_element(&self) -> bool {
5572        true
5573    }
5574}
5575
5576impl ToXml for CTTupleCache {
5577    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5578        #[cfg(feature = "extra-children")]
5579        let mut extra_iter = self.extra_children.iter().peekable();
5580        #[cfg(feature = "extra-children")]
5581        let mut emit_idx: usize = 0;
5582        #[cfg(feature = "extra-children")]
5583        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5584            extra_iter
5585                .next()
5586                .unwrap()
5587                .node
5588                .write_to(writer)
5589                .map_err(SerializeError::from)?;
5590        }
5591        if let Some(ref val) = self.entries {
5592            val.write_element("entries", writer)?;
5593        }
5594        #[cfg(feature = "extra-children")]
5595        {
5596            emit_idx += 1;
5597        }
5598        #[cfg(feature = "extra-children")]
5599        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5600            extra_iter
5601                .next()
5602                .unwrap()
5603                .node
5604                .write_to(writer)
5605                .map_err(SerializeError::from)?;
5606        }
5607        if let Some(ref val) = self.sets {
5608            val.write_element("sets", writer)?;
5609        }
5610        #[cfg(feature = "extra-children")]
5611        {
5612            emit_idx += 1;
5613        }
5614        #[cfg(feature = "extra-children")]
5615        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5616            extra_iter
5617                .next()
5618                .unwrap()
5619                .node
5620                .write_to(writer)
5621                .map_err(SerializeError::from)?;
5622        }
5623        if let Some(ref val) = self.query_cache {
5624            val.write_element("queryCache", writer)?;
5625        }
5626        #[cfg(feature = "extra-children")]
5627        {
5628            emit_idx += 1;
5629        }
5630        #[cfg(feature = "extra-children")]
5631        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5632            extra_iter
5633                .next()
5634                .unwrap()
5635                .node
5636                .write_to(writer)
5637                .map_err(SerializeError::from)?;
5638        }
5639        if let Some(ref val) = self.server_formats {
5640            val.write_element("serverFormats", writer)?;
5641        }
5642        #[cfg(feature = "extra-children")]
5643        {
5644            emit_idx += 1;
5645        }
5646        #[cfg(feature = "extra-children")]
5647        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5648            extra_iter
5649                .next()
5650                .unwrap()
5651                .node
5652                .write_to(writer)
5653                .map_err(SerializeError::from)?;
5654        }
5655        if let Some(ref val) = self.extension_list {
5656            val.write_element("extLst", writer)?;
5657        }
5658        #[cfg(feature = "extra-children")]
5659        {
5660            emit_idx += 1;
5661        }
5662        #[cfg(feature = "extra-children")]
5663        for extra in extra_iter {
5664            extra.node.write_to(writer).map_err(SerializeError::from)?;
5665        }
5666        Ok(())
5667    }
5668
5669    fn is_empty_element(&self) -> bool {
5670        if self.entries.is_some() {
5671            return false;
5672        }
5673        if self.sets.is_some() {
5674            return false;
5675        }
5676        if self.query_cache.is_some() {
5677            return false;
5678        }
5679        if self.server_formats.is_some() {
5680            return false;
5681        }
5682        if self.extension_list.is_some() {
5683            return false;
5684        }
5685        #[cfg(feature = "extra-children")]
5686        if !self.extra_children.is_empty() {
5687            return false;
5688        }
5689        true
5690    }
5691}
5692
5693impl ToXml for CTServerFormat {
5694    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5695        #[allow(unused_mut)]
5696        let mut start = start;
5697        if let Some(ref val) = self.culture {
5698            start.push_attribute(("culture", val.as_str()));
5699        }
5700        if let Some(ref val) = self.format {
5701            start.push_attribute(("format", val.as_str()));
5702        }
5703        #[cfg(feature = "extra-attrs")]
5704        for (key, value) in &self.extra_attrs {
5705            start.push_attribute((key.as_str(), value.as_str()));
5706        }
5707        start
5708    }
5709
5710    fn is_empty_element(&self) -> bool {
5711        true
5712    }
5713}
5714
5715impl ToXml for CTServerFormats {
5716    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5717        #[allow(unused_mut)]
5718        let mut start = start;
5719        if let Some(ref val) = self.count {
5720            {
5721                let s = val.to_string();
5722                start.push_attribute(("count", s.as_str()));
5723            }
5724        }
5725        #[cfg(feature = "extra-attrs")]
5726        for (key, value) in &self.extra_attrs {
5727            start.push_attribute((key.as_str(), value.as_str()));
5728        }
5729        start
5730    }
5731
5732    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5733        #[cfg(feature = "extra-children")]
5734        let mut extra_iter = self.extra_children.iter().peekable();
5735        #[cfg(feature = "extra-children")]
5736        let mut emit_idx: usize = 0;
5737        for item in &self.server_format {
5738            #[cfg(feature = "extra-children")]
5739            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5740                extra_iter
5741                    .next()
5742                    .unwrap()
5743                    .node
5744                    .write_to(writer)
5745                    .map_err(SerializeError::from)?;
5746            }
5747            item.write_element("serverFormat", writer)?;
5748            #[cfg(feature = "extra-children")]
5749            {
5750                emit_idx += 1;
5751            }
5752        }
5753        #[cfg(feature = "extra-children")]
5754        for extra in extra_iter {
5755            extra.node.write_to(writer).map_err(SerializeError::from)?;
5756        }
5757        Ok(())
5758    }
5759
5760    fn is_empty_element(&self) -> bool {
5761        if !self.server_format.is_empty() {
5762            return false;
5763        }
5764        #[cfg(feature = "extra-children")]
5765        if !self.extra_children.is_empty() {
5766            return false;
5767        }
5768        true
5769    }
5770}
5771
5772impl ToXml for CTPCDSDTCEntries {
5773    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5774        #[allow(unused_mut)]
5775        let mut start = start;
5776        if let Some(ref val) = self.count {
5777            {
5778                let s = val.to_string();
5779                start.push_attribute(("count", s.as_str()));
5780            }
5781        }
5782        #[cfg(feature = "extra-attrs")]
5783        for (key, value) in &self.extra_attrs {
5784            start.push_attribute((key.as_str(), value.as_str()));
5785        }
5786        start
5787    }
5788
5789    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5790        #[cfg(feature = "extra-children")]
5791        let mut extra_iter = self.extra_children.iter().peekable();
5792        #[cfg(feature = "extra-children")]
5793        let mut emit_idx: usize = 0;
5794        for item in &self.m {
5795            #[cfg(feature = "extra-children")]
5796            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5797                extra_iter
5798                    .next()
5799                    .unwrap()
5800                    .node
5801                    .write_to(writer)
5802                    .map_err(SerializeError::from)?;
5803            }
5804            item.write_element("m", writer)?;
5805            #[cfg(feature = "extra-children")]
5806            {
5807                emit_idx += 1;
5808            }
5809        }
5810        for item in &self.n {
5811            #[cfg(feature = "extra-children")]
5812            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5813                extra_iter
5814                    .next()
5815                    .unwrap()
5816                    .node
5817                    .write_to(writer)
5818                    .map_err(SerializeError::from)?;
5819            }
5820            item.write_element("n", writer)?;
5821            #[cfg(feature = "extra-children")]
5822            {
5823                emit_idx += 1;
5824            }
5825        }
5826        for item in &self.e {
5827            #[cfg(feature = "extra-children")]
5828            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5829                extra_iter
5830                    .next()
5831                    .unwrap()
5832                    .node
5833                    .write_to(writer)
5834                    .map_err(SerializeError::from)?;
5835            }
5836            item.write_element("e", writer)?;
5837            #[cfg(feature = "extra-children")]
5838            {
5839                emit_idx += 1;
5840            }
5841        }
5842        for item in &self.style_index {
5843            #[cfg(feature = "extra-children")]
5844            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5845                extra_iter
5846                    .next()
5847                    .unwrap()
5848                    .node
5849                    .write_to(writer)
5850                    .map_err(SerializeError::from)?;
5851            }
5852            item.write_element("s", writer)?;
5853            #[cfg(feature = "extra-children")]
5854            {
5855                emit_idx += 1;
5856            }
5857        }
5858        #[cfg(feature = "extra-children")]
5859        for extra in extra_iter {
5860            extra.node.write_to(writer).map_err(SerializeError::from)?;
5861        }
5862        Ok(())
5863    }
5864
5865    fn is_empty_element(&self) -> bool {
5866        if !self.m.is_empty() {
5867            return false;
5868        }
5869        if !self.n.is_empty() {
5870            return false;
5871        }
5872        if !self.e.is_empty() {
5873            return false;
5874        }
5875        if !self.style_index.is_empty() {
5876            return false;
5877        }
5878        #[cfg(feature = "extra-children")]
5879        if !self.extra_children.is_empty() {
5880            return false;
5881        }
5882        true
5883    }
5884}
5885
5886impl ToXml for CTTuples {
5887    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5888        #[allow(unused_mut)]
5889        let mut start = start;
5890        if let Some(ref val) = self.cells {
5891            {
5892                let s = val.to_string();
5893                start.push_attribute(("c", s.as_str()));
5894            }
5895        }
5896        #[cfg(feature = "extra-attrs")]
5897        for (key, value) in &self.extra_attrs {
5898            start.push_attribute((key.as_str(), value.as_str()));
5899        }
5900        start
5901    }
5902
5903    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5904        #[cfg(feature = "extra-children")]
5905        let mut extra_iter = self.extra_children.iter().peekable();
5906        #[cfg(feature = "extra-children")]
5907        let mut emit_idx: usize = 0;
5908        for item in &self.tpl {
5909            #[cfg(feature = "extra-children")]
5910            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
5911                extra_iter
5912                    .next()
5913                    .unwrap()
5914                    .node
5915                    .write_to(writer)
5916                    .map_err(SerializeError::from)?;
5917            }
5918            item.write_element("tpl", writer)?;
5919            #[cfg(feature = "extra-children")]
5920            {
5921                emit_idx += 1;
5922            }
5923        }
5924        #[cfg(feature = "extra-children")]
5925        for extra in extra_iter {
5926            extra.node.write_to(writer).map_err(SerializeError::from)?;
5927        }
5928        Ok(())
5929    }
5930
5931    fn is_empty_element(&self) -> bool {
5932        if !self.tpl.is_empty() {
5933            return false;
5934        }
5935        #[cfg(feature = "extra-children")]
5936        if !self.extra_children.is_empty() {
5937            return false;
5938        }
5939        true
5940    }
5941}
5942
5943impl ToXml for CTTuple {
5944    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5945        #[allow(unused_mut)]
5946        let mut start = start;
5947        if let Some(ref val) = self.fld {
5948            {
5949                let s = val.to_string();
5950                start.push_attribute(("fld", s.as_str()));
5951            }
5952        }
5953        if let Some(ref val) = self.hier {
5954            {
5955                let s = val.to_string();
5956                start.push_attribute(("hier", s.as_str()));
5957            }
5958        }
5959        {
5960            let val = &self.item;
5961            {
5962                let s = val.to_string();
5963                start.push_attribute(("item", s.as_str()));
5964            }
5965        }
5966        #[cfg(feature = "extra-attrs")]
5967        for (key, value) in &self.extra_attrs {
5968            start.push_attribute((key.as_str(), value.as_str()));
5969        }
5970        start
5971    }
5972
5973    fn is_empty_element(&self) -> bool {
5974        true
5975    }
5976}
5977
5978impl ToXml for CTSets {
5979    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
5980        #[allow(unused_mut)]
5981        let mut start = start;
5982        if let Some(ref val) = self.count {
5983            {
5984                let s = val.to_string();
5985                start.push_attribute(("count", s.as_str()));
5986            }
5987        }
5988        #[cfg(feature = "extra-attrs")]
5989        for (key, value) in &self.extra_attrs {
5990            start.push_attribute((key.as_str(), value.as_str()));
5991        }
5992        start
5993    }
5994
5995    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
5996        #[cfg(feature = "extra-children")]
5997        let mut extra_iter = self.extra_children.iter().peekable();
5998        #[cfg(feature = "extra-children")]
5999        let mut emit_idx: usize = 0;
6000        for item in &self.set {
6001            #[cfg(feature = "extra-children")]
6002            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6003                extra_iter
6004                    .next()
6005                    .unwrap()
6006                    .node
6007                    .write_to(writer)
6008                    .map_err(SerializeError::from)?;
6009            }
6010            item.write_element("set", writer)?;
6011            #[cfg(feature = "extra-children")]
6012            {
6013                emit_idx += 1;
6014            }
6015        }
6016        #[cfg(feature = "extra-children")]
6017        for extra in extra_iter {
6018            extra.node.write_to(writer).map_err(SerializeError::from)?;
6019        }
6020        Ok(())
6021    }
6022
6023    fn is_empty_element(&self) -> bool {
6024        if !self.set.is_empty() {
6025            return false;
6026        }
6027        #[cfg(feature = "extra-children")]
6028        if !self.extra_children.is_empty() {
6029            return false;
6030        }
6031        true
6032    }
6033}
6034
6035impl ToXml for CTSet {
6036    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
6037        #[allow(unused_mut)]
6038        let mut start = start;
6039        if let Some(ref val) = self.count {
6040            {
6041                let s = val.to_string();
6042                start.push_attribute(("count", s.as_str()));
6043            }
6044        }
6045        {
6046            let val = &self.max_rank;
6047            {
6048                let s = val.to_string();
6049                start.push_attribute(("maxRank", s.as_str()));
6050            }
6051        }
6052        {
6053            let val = &self.set_definition;
6054            start.push_attribute(("setDefinition", val.as_str()));
6055        }
6056        if let Some(ref val) = self.sort_type {
6057            {
6058                let s = val.to_string();
6059                start.push_attribute(("sortType", s.as_str()));
6060            }
6061        }
6062        if let Some(ref val) = self.query_failed {
6063            start.push_attribute(("queryFailed", if *val { "1" } else { "0" }));
6064        }
6065        #[cfg(feature = "extra-attrs")]
6066        for (key, value) in &self.extra_attrs {
6067            start.push_attribute((key.as_str(), value.as_str()));
6068        }
6069        start
6070    }
6071
6072    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
6073        #[cfg(feature = "extra-children")]
6074        let mut extra_iter = self.extra_children.iter().peekable();
6075        #[cfg(feature = "extra-children")]
6076        let mut emit_idx: usize = 0;
6077        for item in &self.tpls {
6078            #[cfg(feature = "extra-children")]
6079            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6080                extra_iter
6081                    .next()
6082                    .unwrap()
6083                    .node
6084                    .write_to(writer)
6085                    .map_err(SerializeError::from)?;
6086            }
6087            item.write_element("tpls", writer)?;
6088            #[cfg(feature = "extra-children")]
6089            {
6090                emit_idx += 1;
6091            }
6092        }
6093        #[cfg(feature = "extra-children")]
6094        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6095            extra_iter
6096                .next()
6097                .unwrap()
6098                .node
6099                .write_to(writer)
6100                .map_err(SerializeError::from)?;
6101        }
6102        if let Some(ref val) = self.sort_by_tuple {
6103            val.write_element("sortByTuple", writer)?;
6104        }
6105        #[cfg(feature = "extra-children")]
6106        {
6107            emit_idx += 1;
6108        }
6109        #[cfg(feature = "extra-children")]
6110        for extra in extra_iter {
6111            extra.node.write_to(writer).map_err(SerializeError::from)?;
6112        }
6113        Ok(())
6114    }
6115
6116    fn is_empty_element(&self) -> bool {
6117        if !self.tpls.is_empty() {
6118            return false;
6119        }
6120        if self.sort_by_tuple.is_some() {
6121            return false;
6122        }
6123        #[cfg(feature = "extra-children")]
6124        if !self.extra_children.is_empty() {
6125            return false;
6126        }
6127        true
6128    }
6129}
6130
6131impl ToXml for CTQueryCache {
6132    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
6133        #[allow(unused_mut)]
6134        let mut start = start;
6135        if let Some(ref val) = self.count {
6136            {
6137                let s = val.to_string();
6138                start.push_attribute(("count", s.as_str()));
6139            }
6140        }
6141        #[cfg(feature = "extra-attrs")]
6142        for (key, value) in &self.extra_attrs {
6143            start.push_attribute((key.as_str(), value.as_str()));
6144        }
6145        start
6146    }
6147
6148    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
6149        #[cfg(feature = "extra-children")]
6150        let mut extra_iter = self.extra_children.iter().peekable();
6151        #[cfg(feature = "extra-children")]
6152        let mut emit_idx: usize = 0;
6153        for item in &self.query {
6154            #[cfg(feature = "extra-children")]
6155            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6156                extra_iter
6157                    .next()
6158                    .unwrap()
6159                    .node
6160                    .write_to(writer)
6161                    .map_err(SerializeError::from)?;
6162            }
6163            item.write_element("query", writer)?;
6164            #[cfg(feature = "extra-children")]
6165            {
6166                emit_idx += 1;
6167            }
6168        }
6169        #[cfg(feature = "extra-children")]
6170        for extra in extra_iter {
6171            extra.node.write_to(writer).map_err(SerializeError::from)?;
6172        }
6173        Ok(())
6174    }
6175
6176    fn is_empty_element(&self) -> bool {
6177        if !self.query.is_empty() {
6178            return false;
6179        }
6180        #[cfg(feature = "extra-children")]
6181        if !self.extra_children.is_empty() {
6182            return false;
6183        }
6184        true
6185    }
6186}
6187
6188impl ToXml for CTQuery {
6189    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
6190        #[allow(unused_mut)]
6191        let mut start = start;
6192        {
6193            let val = &self.mdx;
6194            start.push_attribute(("mdx", val.as_str()));
6195        }
6196        #[cfg(feature = "extra-attrs")]
6197        for (key, value) in &self.extra_attrs {
6198            start.push_attribute((key.as_str(), value.as_str()));
6199        }
6200        start
6201    }
6202
6203    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
6204        #[cfg(feature = "extra-children")]
6205        let mut extra_iter = self.extra_children.iter().peekable();
6206        #[cfg(feature = "extra-children")]
6207        let mut emit_idx: usize = 0;
6208        #[cfg(feature = "extra-children")]
6209        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6210            extra_iter
6211                .next()
6212                .unwrap()
6213                .node
6214                .write_to(writer)
6215                .map_err(SerializeError::from)?;
6216        }
6217        if let Some(ref val) = self.tpls {
6218            val.write_element("tpls", writer)?;
6219        }
6220        #[cfg(feature = "extra-children")]
6221        {
6222            emit_idx += 1;
6223        }
6224        #[cfg(feature = "extra-children")]
6225        for extra in extra_iter {
6226            extra.node.write_to(writer).map_err(SerializeError::from)?;
6227        }
6228        Ok(())
6229    }
6230
6231    fn is_empty_element(&self) -> bool {
6232        if self.tpls.is_some() {
6233            return false;
6234        }
6235        #[cfg(feature = "extra-children")]
6236        if !self.extra_children.is_empty() {
6237            return false;
6238        }
6239        true
6240    }
6241}
6242
6243impl ToXml for CTCalculatedItems {
6244    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
6245        #[allow(unused_mut)]
6246        let mut start = start;
6247        if let Some(ref val) = self.count {
6248            {
6249                let s = val.to_string();
6250                start.push_attribute(("count", s.as_str()));
6251            }
6252        }
6253        #[cfg(feature = "extra-attrs")]
6254        for (key, value) in &self.extra_attrs {
6255            start.push_attribute((key.as_str(), value.as_str()));
6256        }
6257        start
6258    }
6259
6260    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
6261        #[cfg(feature = "extra-children")]
6262        let mut extra_iter = self.extra_children.iter().peekable();
6263        #[cfg(feature = "extra-children")]
6264        let mut emit_idx: usize = 0;
6265        for item in &self.calculated_item {
6266            #[cfg(feature = "extra-children")]
6267            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6268                extra_iter
6269                    .next()
6270                    .unwrap()
6271                    .node
6272                    .write_to(writer)
6273                    .map_err(SerializeError::from)?;
6274            }
6275            item.write_element("calculatedItem", writer)?;
6276            #[cfg(feature = "extra-children")]
6277            {
6278                emit_idx += 1;
6279            }
6280        }
6281        #[cfg(feature = "extra-children")]
6282        for extra in extra_iter {
6283            extra.node.write_to(writer).map_err(SerializeError::from)?;
6284        }
6285        Ok(())
6286    }
6287
6288    fn is_empty_element(&self) -> bool {
6289        if !self.calculated_item.is_empty() {
6290            return false;
6291        }
6292        #[cfg(feature = "extra-children")]
6293        if !self.extra_children.is_empty() {
6294            return false;
6295        }
6296        true
6297    }
6298}
6299
6300impl ToXml for CTCalculatedItem {
6301    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
6302        #[allow(unused_mut)]
6303        let mut start = start;
6304        if let Some(ref val) = self.field {
6305            {
6306                let s = val.to_string();
6307                start.push_attribute(("field", s.as_str()));
6308            }
6309        }
6310        if let Some(ref val) = self.formula {
6311            start.push_attribute(("formula", val.as_str()));
6312        }
6313        #[cfg(feature = "extra-attrs")]
6314        for (key, value) in &self.extra_attrs {
6315            start.push_attribute((key.as_str(), value.as_str()));
6316        }
6317        start
6318    }
6319
6320    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
6321        #[cfg(feature = "extra-children")]
6322        let mut extra_iter = self.extra_children.iter().peekable();
6323        #[cfg(feature = "extra-children")]
6324        let mut emit_idx: usize = 0;
6325        #[cfg(feature = "extra-children")]
6326        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6327            extra_iter
6328                .next()
6329                .unwrap()
6330                .node
6331                .write_to(writer)
6332                .map_err(SerializeError::from)?;
6333        }
6334        {
6335            let val = &self.pivot_area;
6336            val.write_element("pivotArea", writer)?;
6337        }
6338        #[cfg(feature = "extra-children")]
6339        {
6340            emit_idx += 1;
6341        }
6342        #[cfg(feature = "extra-children")]
6343        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6344            extra_iter
6345                .next()
6346                .unwrap()
6347                .node
6348                .write_to(writer)
6349                .map_err(SerializeError::from)?;
6350        }
6351        if let Some(ref val) = self.extension_list {
6352            val.write_element("extLst", writer)?;
6353        }
6354        #[cfg(feature = "extra-children")]
6355        {
6356            emit_idx += 1;
6357        }
6358        #[cfg(feature = "extra-children")]
6359        for extra in extra_iter {
6360            extra.node.write_to(writer).map_err(SerializeError::from)?;
6361        }
6362        Ok(())
6363    }
6364
6365    fn is_empty_element(&self) -> bool {
6366        false
6367    }
6368}
6369
6370impl ToXml for CTCalculatedMembers {
6371    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
6372        #[allow(unused_mut)]
6373        let mut start = start;
6374        if let Some(ref val) = self.count {
6375            {
6376                let s = val.to_string();
6377                start.push_attribute(("count", s.as_str()));
6378            }
6379        }
6380        #[cfg(feature = "extra-attrs")]
6381        for (key, value) in &self.extra_attrs {
6382            start.push_attribute((key.as_str(), value.as_str()));
6383        }
6384        start
6385    }
6386
6387    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
6388        #[cfg(feature = "extra-children")]
6389        let mut extra_iter = self.extra_children.iter().peekable();
6390        #[cfg(feature = "extra-children")]
6391        let mut emit_idx: usize = 0;
6392        for item in &self.calculated_member {
6393            #[cfg(feature = "extra-children")]
6394            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6395                extra_iter
6396                    .next()
6397                    .unwrap()
6398                    .node
6399                    .write_to(writer)
6400                    .map_err(SerializeError::from)?;
6401            }
6402            item.write_element("calculatedMember", writer)?;
6403            #[cfg(feature = "extra-children")]
6404            {
6405                emit_idx += 1;
6406            }
6407        }
6408        #[cfg(feature = "extra-children")]
6409        for extra in extra_iter {
6410            extra.node.write_to(writer).map_err(SerializeError::from)?;
6411        }
6412        Ok(())
6413    }
6414
6415    fn is_empty_element(&self) -> bool {
6416        if !self.calculated_member.is_empty() {
6417            return false;
6418        }
6419        #[cfg(feature = "extra-children")]
6420        if !self.extra_children.is_empty() {
6421            return false;
6422        }
6423        true
6424    }
6425}
6426
6427impl ToXml for CTCalculatedMember {
6428    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
6429        #[allow(unused_mut)]
6430        let mut start = start;
6431        {
6432            let val = &self.name;
6433            start.push_attribute(("name", val.as_str()));
6434        }
6435        {
6436            let val = &self.mdx;
6437            start.push_attribute(("mdx", val.as_str()));
6438        }
6439        if let Some(ref val) = self.member_name {
6440            start.push_attribute(("memberName", val.as_str()));
6441        }
6442        if let Some(ref val) = self.hierarchy {
6443            start.push_attribute(("hierarchy", val.as_str()));
6444        }
6445        if let Some(ref val) = self.parent {
6446            start.push_attribute(("parent", val.as_str()));
6447        }
6448        if let Some(ref val) = self.solve_order {
6449            {
6450                let s = val.to_string();
6451                start.push_attribute(("solveOrder", s.as_str()));
6452            }
6453        }
6454        if let Some(ref val) = self.set {
6455            start.push_attribute(("set", if *val { "1" } else { "0" }));
6456        }
6457        #[cfg(feature = "extra-attrs")]
6458        for (key, value) in &self.extra_attrs {
6459            start.push_attribute((key.as_str(), value.as_str()));
6460        }
6461        start
6462    }
6463
6464    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
6465        #[cfg(feature = "extra-children")]
6466        let mut extra_iter = self.extra_children.iter().peekable();
6467        #[cfg(feature = "extra-children")]
6468        let mut emit_idx: usize = 0;
6469        #[cfg(feature = "extra-children")]
6470        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6471            extra_iter
6472                .next()
6473                .unwrap()
6474                .node
6475                .write_to(writer)
6476                .map_err(SerializeError::from)?;
6477        }
6478        if let Some(ref val) = self.extension_list {
6479            val.write_element("extLst", writer)?;
6480        }
6481        #[cfg(feature = "extra-children")]
6482        {
6483            emit_idx += 1;
6484        }
6485        #[cfg(feature = "extra-children")]
6486        for extra in extra_iter {
6487            extra.node.write_to(writer).map_err(SerializeError::from)?;
6488        }
6489        Ok(())
6490    }
6491
6492    fn is_empty_element(&self) -> bool {
6493        if self.extension_list.is_some() {
6494            return false;
6495        }
6496        #[cfg(feature = "extra-children")]
6497        if !self.extra_children.is_empty() {
6498            return false;
6499        }
6500        true
6501    }
6502}
6503
6504impl ToXml for CTPivotTableDefinition {
6505    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
6506        #[allow(unused_mut)]
6507        let mut start = start;
6508        {
6509            let val = &self.name;
6510            start.push_attribute(("name", val.as_str()));
6511        }
6512        {
6513            let val = &self.cache_id;
6514            {
6515                let s = val.to_string();
6516                start.push_attribute(("cacheId", s.as_str()));
6517            }
6518        }
6519        if let Some(ref val) = self.data_on_rows {
6520            start.push_attribute(("dataOnRows", if *val { "1" } else { "0" }));
6521        }
6522        if let Some(ref val) = self.data_position {
6523            {
6524                let s = val.to_string();
6525                start.push_attribute(("dataPosition", s.as_str()));
6526            }
6527        }
6528        if let Some(ref val) = self.auto_format_id {
6529            {
6530                let s = val.to_string();
6531                start.push_attribute(("autoFormatId", s.as_str()));
6532            }
6533        }
6534        if let Some(ref val) = self.apply_number_formats {
6535            start.push_attribute(("applyNumberFormats", if *val { "1" } else { "0" }));
6536        }
6537        if let Some(ref val) = self.apply_border_formats {
6538            start.push_attribute(("applyBorderFormats", if *val { "1" } else { "0" }));
6539        }
6540        if let Some(ref val) = self.apply_font_formats {
6541            start.push_attribute(("applyFontFormats", if *val { "1" } else { "0" }));
6542        }
6543        if let Some(ref val) = self.apply_pattern_formats {
6544            start.push_attribute(("applyPatternFormats", if *val { "1" } else { "0" }));
6545        }
6546        if let Some(ref val) = self.apply_alignment_formats {
6547            start.push_attribute(("applyAlignmentFormats", if *val { "1" } else { "0" }));
6548        }
6549        if let Some(ref val) = self.apply_width_height_formats {
6550            start.push_attribute(("applyWidthHeightFormats", if *val { "1" } else { "0" }));
6551        }
6552        {
6553            let val = &self.data_caption;
6554            start.push_attribute(("dataCaption", val.as_str()));
6555        }
6556        if let Some(ref val) = self.grand_total_caption {
6557            start.push_attribute(("grandTotalCaption", val.as_str()));
6558        }
6559        if let Some(ref val) = self.error_caption {
6560            start.push_attribute(("errorCaption", val.as_str()));
6561        }
6562        if let Some(ref val) = self.show_error {
6563            start.push_attribute(("showError", if *val { "1" } else { "0" }));
6564        }
6565        if let Some(ref val) = self.missing_caption {
6566            start.push_attribute(("missingCaption", val.as_str()));
6567        }
6568        if let Some(ref val) = self.show_missing {
6569            start.push_attribute(("showMissing", if *val { "1" } else { "0" }));
6570        }
6571        if let Some(ref val) = self.page_style {
6572            start.push_attribute(("pageStyle", val.as_str()));
6573        }
6574        if let Some(ref val) = self.pivot_table_style {
6575            start.push_attribute(("pivotTableStyle", val.as_str()));
6576        }
6577        if let Some(ref val) = self.vacated_style {
6578            start.push_attribute(("vacatedStyle", val.as_str()));
6579        }
6580        if let Some(ref val) = self.tag {
6581            start.push_attribute(("tag", val.as_str()));
6582        }
6583        if let Some(ref val) = self.updated_version {
6584            {
6585                let s = val.to_string();
6586                start.push_attribute(("updatedVersion", s.as_str()));
6587            }
6588        }
6589        if let Some(ref val) = self.min_refreshable_version {
6590            {
6591                let s = val.to_string();
6592                start.push_attribute(("minRefreshableVersion", s.as_str()));
6593            }
6594        }
6595        if let Some(ref val) = self.asterisk_totals {
6596            start.push_attribute(("asteriskTotals", if *val { "1" } else { "0" }));
6597        }
6598        if let Some(ref val) = self.show_items {
6599            start.push_attribute(("showItems", if *val { "1" } else { "0" }));
6600        }
6601        if let Some(ref val) = self.edit_data {
6602            start.push_attribute(("editData", if *val { "1" } else { "0" }));
6603        }
6604        if let Some(ref val) = self.disable_field_list {
6605            start.push_attribute(("disableFieldList", if *val { "1" } else { "0" }));
6606        }
6607        if let Some(ref val) = self.show_calc_mbrs {
6608            start.push_attribute(("showCalcMbrs", if *val { "1" } else { "0" }));
6609        }
6610        if let Some(ref val) = self.visual_totals {
6611            start.push_attribute(("visualTotals", if *val { "1" } else { "0" }));
6612        }
6613        if let Some(ref val) = self.show_multiple_label {
6614            start.push_attribute(("showMultipleLabel", if *val { "1" } else { "0" }));
6615        }
6616        if let Some(ref val) = self.show_data_drop_down {
6617            start.push_attribute(("showDataDropDown", if *val { "1" } else { "0" }));
6618        }
6619        if let Some(ref val) = self.show_drill {
6620            start.push_attribute(("showDrill", if *val { "1" } else { "0" }));
6621        }
6622        if let Some(ref val) = self.print_drill {
6623            start.push_attribute(("printDrill", if *val { "1" } else { "0" }));
6624        }
6625        if let Some(ref val) = self.show_member_property_tips {
6626            start.push_attribute(("showMemberPropertyTips", if *val { "1" } else { "0" }));
6627        }
6628        if let Some(ref val) = self.show_data_tips {
6629            start.push_attribute(("showDataTips", if *val { "1" } else { "0" }));
6630        }
6631        if let Some(ref val) = self.enable_wizard {
6632            start.push_attribute(("enableWizard", if *val { "1" } else { "0" }));
6633        }
6634        if let Some(ref val) = self.enable_drill {
6635            start.push_attribute(("enableDrill", if *val { "1" } else { "0" }));
6636        }
6637        if let Some(ref val) = self.enable_field_properties {
6638            start.push_attribute(("enableFieldProperties", if *val { "1" } else { "0" }));
6639        }
6640        if let Some(ref val) = self.preserve_formatting {
6641            start.push_attribute(("preserveFormatting", if *val { "1" } else { "0" }));
6642        }
6643        if let Some(ref val) = self.use_auto_formatting {
6644            start.push_attribute(("useAutoFormatting", if *val { "1" } else { "0" }));
6645        }
6646        if let Some(ref val) = self.page_wrap {
6647            {
6648                let s = val.to_string();
6649                start.push_attribute(("pageWrap", s.as_str()));
6650            }
6651        }
6652        if let Some(ref val) = self.page_over_then_down {
6653            start.push_attribute(("pageOverThenDown", if *val { "1" } else { "0" }));
6654        }
6655        if let Some(ref val) = self.subtotal_hidden_items {
6656            start.push_attribute(("subtotalHiddenItems", if *val { "1" } else { "0" }));
6657        }
6658        if let Some(ref val) = self.row_grand_totals {
6659            start.push_attribute(("rowGrandTotals", if *val { "1" } else { "0" }));
6660        }
6661        if let Some(ref val) = self.col_grand_totals {
6662            start.push_attribute(("colGrandTotals", if *val { "1" } else { "0" }));
6663        }
6664        if let Some(ref val) = self.field_print_titles {
6665            start.push_attribute(("fieldPrintTitles", if *val { "1" } else { "0" }));
6666        }
6667        if let Some(ref val) = self.item_print_titles {
6668            start.push_attribute(("itemPrintTitles", if *val { "1" } else { "0" }));
6669        }
6670        if let Some(ref val) = self.merge_item {
6671            start.push_attribute(("mergeItem", if *val { "1" } else { "0" }));
6672        }
6673        if let Some(ref val) = self.show_drop_zones {
6674            start.push_attribute(("showDropZones", if *val { "1" } else { "0" }));
6675        }
6676        if let Some(ref val) = self.created_version {
6677            {
6678                let s = val.to_string();
6679                start.push_attribute(("createdVersion", s.as_str()));
6680            }
6681        }
6682        if let Some(ref val) = self.indent {
6683            {
6684                let s = val.to_string();
6685                start.push_attribute(("indent", s.as_str()));
6686            }
6687        }
6688        if let Some(ref val) = self.show_empty_row {
6689            start.push_attribute(("showEmptyRow", if *val { "1" } else { "0" }));
6690        }
6691        if let Some(ref val) = self.show_empty_col {
6692            start.push_attribute(("showEmptyCol", if *val { "1" } else { "0" }));
6693        }
6694        if let Some(ref val) = self.show_headers {
6695            start.push_attribute(("showHeaders", if *val { "1" } else { "0" }));
6696        }
6697        if let Some(ref val) = self.compact {
6698            start.push_attribute(("compact", if *val { "1" } else { "0" }));
6699        }
6700        if let Some(ref val) = self.outline {
6701            start.push_attribute(("outline", if *val { "1" } else { "0" }));
6702        }
6703        if let Some(ref val) = self.outline_data {
6704            start.push_attribute(("outlineData", if *val { "1" } else { "0" }));
6705        }
6706        if let Some(ref val) = self.compact_data {
6707            start.push_attribute(("compactData", if *val { "1" } else { "0" }));
6708        }
6709        if let Some(ref val) = self.published {
6710            start.push_attribute(("published", if *val { "1" } else { "0" }));
6711        }
6712        if let Some(ref val) = self.grid_drop_zones {
6713            start.push_attribute(("gridDropZones", if *val { "1" } else { "0" }));
6714        }
6715        if let Some(ref val) = self.immersive {
6716            start.push_attribute(("immersive", if *val { "1" } else { "0" }));
6717        }
6718        if let Some(ref val) = self.multiple_field_filters {
6719            start.push_attribute(("multipleFieldFilters", if *val { "1" } else { "0" }));
6720        }
6721        if let Some(ref val) = self.chart_format {
6722            {
6723                let s = val.to_string();
6724                start.push_attribute(("chartFormat", s.as_str()));
6725            }
6726        }
6727        if let Some(ref val) = self.row_header_caption {
6728            start.push_attribute(("rowHeaderCaption", val.as_str()));
6729        }
6730        if let Some(ref val) = self.col_header_caption {
6731            start.push_attribute(("colHeaderCaption", val.as_str()));
6732        }
6733        if let Some(ref val) = self.field_list_sort_ascending {
6734            start.push_attribute(("fieldListSortAscending", if *val { "1" } else { "0" }));
6735        }
6736        if let Some(ref val) = self.mdx_subqueries {
6737            start.push_attribute(("mdxSubqueries", if *val { "1" } else { "0" }));
6738        }
6739        if let Some(ref val) = self.custom_list_sort {
6740            start.push_attribute(("customListSort", if *val { "1" } else { "0" }));
6741        }
6742        #[cfg(feature = "extra-attrs")]
6743        for (key, value) in &self.extra_attrs {
6744            start.push_attribute((key.as_str(), value.as_str()));
6745        }
6746        start
6747    }
6748
6749    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
6750        #[cfg(feature = "extra-children")]
6751        let mut extra_iter = self.extra_children.iter().peekable();
6752        #[cfg(feature = "extra-children")]
6753        let mut emit_idx: usize = 0;
6754        #[cfg(feature = "extra-children")]
6755        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6756            extra_iter
6757                .next()
6758                .unwrap()
6759                .node
6760                .write_to(writer)
6761                .map_err(SerializeError::from)?;
6762        }
6763        {
6764            let val = &self.location;
6765            val.write_element("location", writer)?;
6766        }
6767        #[cfg(feature = "extra-children")]
6768        {
6769            emit_idx += 1;
6770        }
6771        #[cfg(feature = "extra-children")]
6772        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6773            extra_iter
6774                .next()
6775                .unwrap()
6776                .node
6777                .write_to(writer)
6778                .map_err(SerializeError::from)?;
6779        }
6780        if let Some(ref val) = self.pivot_fields {
6781            val.write_element("pivotFields", writer)?;
6782        }
6783        #[cfg(feature = "extra-children")]
6784        {
6785            emit_idx += 1;
6786        }
6787        #[cfg(feature = "extra-children")]
6788        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6789            extra_iter
6790                .next()
6791                .unwrap()
6792                .node
6793                .write_to(writer)
6794                .map_err(SerializeError::from)?;
6795        }
6796        if let Some(ref val) = self.row_fields {
6797            val.write_element("rowFields", writer)?;
6798        }
6799        #[cfg(feature = "extra-children")]
6800        {
6801            emit_idx += 1;
6802        }
6803        #[cfg(feature = "extra-children")]
6804        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6805            extra_iter
6806                .next()
6807                .unwrap()
6808                .node
6809                .write_to(writer)
6810                .map_err(SerializeError::from)?;
6811        }
6812        if let Some(ref val) = self.row_items {
6813            val.write_element("rowItems", writer)?;
6814        }
6815        #[cfg(feature = "extra-children")]
6816        {
6817            emit_idx += 1;
6818        }
6819        #[cfg(feature = "extra-children")]
6820        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6821            extra_iter
6822                .next()
6823                .unwrap()
6824                .node
6825                .write_to(writer)
6826                .map_err(SerializeError::from)?;
6827        }
6828        if let Some(ref val) = self.col_fields {
6829            val.write_element("colFields", writer)?;
6830        }
6831        #[cfg(feature = "extra-children")]
6832        {
6833            emit_idx += 1;
6834        }
6835        #[cfg(feature = "extra-children")]
6836        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6837            extra_iter
6838                .next()
6839                .unwrap()
6840                .node
6841                .write_to(writer)
6842                .map_err(SerializeError::from)?;
6843        }
6844        if let Some(ref val) = self.col_items {
6845            val.write_element("colItems", writer)?;
6846        }
6847        #[cfg(feature = "extra-children")]
6848        {
6849            emit_idx += 1;
6850        }
6851        #[cfg(feature = "extra-children")]
6852        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6853            extra_iter
6854                .next()
6855                .unwrap()
6856                .node
6857                .write_to(writer)
6858                .map_err(SerializeError::from)?;
6859        }
6860        if let Some(ref val) = self.page_fields {
6861            val.write_element("pageFields", writer)?;
6862        }
6863        #[cfg(feature = "extra-children")]
6864        {
6865            emit_idx += 1;
6866        }
6867        #[cfg(feature = "extra-children")]
6868        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6869            extra_iter
6870                .next()
6871                .unwrap()
6872                .node
6873                .write_to(writer)
6874                .map_err(SerializeError::from)?;
6875        }
6876        if let Some(ref val) = self.data_fields {
6877            val.write_element("dataFields", writer)?;
6878        }
6879        #[cfg(feature = "extra-children")]
6880        {
6881            emit_idx += 1;
6882        }
6883        #[cfg(feature = "extra-children")]
6884        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6885            extra_iter
6886                .next()
6887                .unwrap()
6888                .node
6889                .write_to(writer)
6890                .map_err(SerializeError::from)?;
6891        }
6892        if let Some(ref val) = self.formats {
6893            val.write_element("formats", writer)?;
6894        }
6895        #[cfg(feature = "extra-children")]
6896        {
6897            emit_idx += 1;
6898        }
6899        #[cfg(feature = "extra-children")]
6900        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6901            extra_iter
6902                .next()
6903                .unwrap()
6904                .node
6905                .write_to(writer)
6906                .map_err(SerializeError::from)?;
6907        }
6908        if let Some(ref val) = self.conditional_formats {
6909            val.write_element("conditionalFormats", writer)?;
6910        }
6911        #[cfg(feature = "extra-children")]
6912        {
6913            emit_idx += 1;
6914        }
6915        #[cfg(feature = "extra-children")]
6916        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6917            extra_iter
6918                .next()
6919                .unwrap()
6920                .node
6921                .write_to(writer)
6922                .map_err(SerializeError::from)?;
6923        }
6924        if let Some(ref val) = self.chart_formats {
6925            val.write_element("chartFormats", writer)?;
6926        }
6927        #[cfg(feature = "extra-children")]
6928        {
6929            emit_idx += 1;
6930        }
6931        #[cfg(feature = "extra-children")]
6932        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6933            extra_iter
6934                .next()
6935                .unwrap()
6936                .node
6937                .write_to(writer)
6938                .map_err(SerializeError::from)?;
6939        }
6940        if let Some(ref val) = self.pivot_hierarchies {
6941            val.write_element("pivotHierarchies", writer)?;
6942        }
6943        #[cfg(feature = "extra-children")]
6944        {
6945            emit_idx += 1;
6946        }
6947        #[cfg(feature = "extra-children")]
6948        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6949            extra_iter
6950                .next()
6951                .unwrap()
6952                .node
6953                .write_to(writer)
6954                .map_err(SerializeError::from)?;
6955        }
6956        if let Some(ref val) = self.pivot_table_style_info {
6957            val.write_element("pivotTableStyleInfo", writer)?;
6958        }
6959        #[cfg(feature = "extra-children")]
6960        {
6961            emit_idx += 1;
6962        }
6963        #[cfg(feature = "extra-children")]
6964        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6965            extra_iter
6966                .next()
6967                .unwrap()
6968                .node
6969                .write_to(writer)
6970                .map_err(SerializeError::from)?;
6971        }
6972        if let Some(ref val) = self.filters {
6973            val.write_element("filters", writer)?;
6974        }
6975        #[cfg(feature = "extra-children")]
6976        {
6977            emit_idx += 1;
6978        }
6979        #[cfg(feature = "extra-children")]
6980        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6981            extra_iter
6982                .next()
6983                .unwrap()
6984                .node
6985                .write_to(writer)
6986                .map_err(SerializeError::from)?;
6987        }
6988        if let Some(ref val) = self.row_hierarchies_usage {
6989            val.write_element("rowHierarchiesUsage", writer)?;
6990        }
6991        #[cfg(feature = "extra-children")]
6992        {
6993            emit_idx += 1;
6994        }
6995        #[cfg(feature = "extra-children")]
6996        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
6997            extra_iter
6998                .next()
6999                .unwrap()
7000                .node
7001                .write_to(writer)
7002                .map_err(SerializeError::from)?;
7003        }
7004        if let Some(ref val) = self.col_hierarchies_usage {
7005            val.write_element("colHierarchiesUsage", writer)?;
7006        }
7007        #[cfg(feature = "extra-children")]
7008        {
7009            emit_idx += 1;
7010        }
7011        #[cfg(feature = "extra-children")]
7012        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7013            extra_iter
7014                .next()
7015                .unwrap()
7016                .node
7017                .write_to(writer)
7018                .map_err(SerializeError::from)?;
7019        }
7020        if let Some(ref val) = self.extension_list {
7021            val.write_element("extLst", writer)?;
7022        }
7023        #[cfg(feature = "extra-children")]
7024        {
7025            emit_idx += 1;
7026        }
7027        #[cfg(feature = "extra-children")]
7028        for extra in extra_iter {
7029            extra.node.write_to(writer).map_err(SerializeError::from)?;
7030        }
7031        Ok(())
7032    }
7033
7034    fn is_empty_element(&self) -> bool {
7035        false
7036    }
7037}
7038
7039impl ToXml for PivotLocation {
7040    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7041        #[allow(unused_mut)]
7042        let mut start = start;
7043        {
7044            let val = &self.reference;
7045            start.push_attribute(("ref", val.as_str()));
7046        }
7047        {
7048            let val = &self.first_header_row;
7049            {
7050                let s = val.to_string();
7051                start.push_attribute(("firstHeaderRow", s.as_str()));
7052            }
7053        }
7054        {
7055            let val = &self.first_data_row;
7056            {
7057                let s = val.to_string();
7058                start.push_attribute(("firstDataRow", s.as_str()));
7059            }
7060        }
7061        {
7062            let val = &self.first_data_col;
7063            {
7064                let s = val.to_string();
7065                start.push_attribute(("firstDataCol", s.as_str()));
7066            }
7067        }
7068        if let Some(ref val) = self.row_page_count {
7069            {
7070                let s = val.to_string();
7071                start.push_attribute(("rowPageCount", s.as_str()));
7072            }
7073        }
7074        if let Some(ref val) = self.col_page_count {
7075            {
7076                let s = val.to_string();
7077                start.push_attribute(("colPageCount", s.as_str()));
7078            }
7079        }
7080        #[cfg(feature = "extra-attrs")]
7081        for (key, value) in &self.extra_attrs {
7082            start.push_attribute((key.as_str(), value.as_str()));
7083        }
7084        start
7085    }
7086
7087    fn is_empty_element(&self) -> bool {
7088        true
7089    }
7090}
7091
7092impl ToXml for PivotFields {
7093    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7094        #[allow(unused_mut)]
7095        let mut start = start;
7096        if let Some(ref val) = self.count {
7097            {
7098                let s = val.to_string();
7099                start.push_attribute(("count", s.as_str()));
7100            }
7101        }
7102        #[cfg(feature = "extra-attrs")]
7103        for (key, value) in &self.extra_attrs {
7104            start.push_attribute((key.as_str(), value.as_str()));
7105        }
7106        start
7107    }
7108
7109    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7110        #[cfg(feature = "extra-children")]
7111        let mut extra_iter = self.extra_children.iter().peekable();
7112        #[cfg(feature = "extra-children")]
7113        let mut emit_idx: usize = 0;
7114        for item in &self.pivot_field {
7115            #[cfg(feature = "extra-children")]
7116            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7117                extra_iter
7118                    .next()
7119                    .unwrap()
7120                    .node
7121                    .write_to(writer)
7122                    .map_err(SerializeError::from)?;
7123            }
7124            item.write_element("pivotField", writer)?;
7125            #[cfg(feature = "extra-children")]
7126            {
7127                emit_idx += 1;
7128            }
7129        }
7130        #[cfg(feature = "extra-children")]
7131        for extra in extra_iter {
7132            extra.node.write_to(writer).map_err(SerializeError::from)?;
7133        }
7134        Ok(())
7135    }
7136
7137    fn is_empty_element(&self) -> bool {
7138        if !self.pivot_field.is_empty() {
7139            return false;
7140        }
7141        #[cfg(feature = "extra-children")]
7142        if !self.extra_children.is_empty() {
7143            return false;
7144        }
7145        true
7146    }
7147}
7148
7149impl ToXml for PivotField {
7150    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7151        #[allow(unused_mut)]
7152        let mut start = start;
7153        if let Some(ref val) = self.name {
7154            start.push_attribute(("name", val.as_str()));
7155        }
7156        if let Some(ref val) = self.axis {
7157            {
7158                let s = val.to_string();
7159                start.push_attribute(("axis", s.as_str()));
7160            }
7161        }
7162        if let Some(ref val) = self.data_field {
7163            start.push_attribute(("dataField", if *val { "1" } else { "0" }));
7164        }
7165        if let Some(ref val) = self.subtotal_caption {
7166            start.push_attribute(("subtotalCaption", val.as_str()));
7167        }
7168        if let Some(ref val) = self.show_drop_downs {
7169            start.push_attribute(("showDropDowns", if *val { "1" } else { "0" }));
7170        }
7171        if let Some(ref val) = self.hidden_level {
7172            start.push_attribute(("hiddenLevel", if *val { "1" } else { "0" }));
7173        }
7174        if let Some(ref val) = self.unique_member_property {
7175            start.push_attribute(("uniqueMemberProperty", val.as_str()));
7176        }
7177        if let Some(ref val) = self.compact {
7178            start.push_attribute(("compact", if *val { "1" } else { "0" }));
7179        }
7180        if let Some(ref val) = self.all_drilled {
7181            start.push_attribute(("allDrilled", if *val { "1" } else { "0" }));
7182        }
7183        if let Some(ref val) = self.number_format_id {
7184            {
7185                let s = val.to_string();
7186                start.push_attribute(("numFmtId", s.as_str()));
7187            }
7188        }
7189        if let Some(ref val) = self.outline {
7190            start.push_attribute(("outline", if *val { "1" } else { "0" }));
7191        }
7192        if let Some(ref val) = self.subtotal_top {
7193            start.push_attribute(("subtotalTop", if *val { "1" } else { "0" }));
7194        }
7195        if let Some(ref val) = self.drag_to_row {
7196            start.push_attribute(("dragToRow", if *val { "1" } else { "0" }));
7197        }
7198        if let Some(ref val) = self.drag_to_col {
7199            start.push_attribute(("dragToCol", if *val { "1" } else { "0" }));
7200        }
7201        if let Some(ref val) = self.multiple_item_selection_allowed {
7202            start.push_attribute(("multipleItemSelectionAllowed", if *val { "1" } else { "0" }));
7203        }
7204        if let Some(ref val) = self.drag_to_page {
7205            start.push_attribute(("dragToPage", if *val { "1" } else { "0" }));
7206        }
7207        if let Some(ref val) = self.drag_to_data {
7208            start.push_attribute(("dragToData", if *val { "1" } else { "0" }));
7209        }
7210        if let Some(ref val) = self.drag_off {
7211            start.push_attribute(("dragOff", if *val { "1" } else { "0" }));
7212        }
7213        if let Some(ref val) = self.show_all {
7214            start.push_attribute(("showAll", if *val { "1" } else { "0" }));
7215        }
7216        if let Some(ref val) = self.insert_blank_row {
7217            start.push_attribute(("insertBlankRow", if *val { "1" } else { "0" }));
7218        }
7219        if let Some(ref val) = self.server_field {
7220            start.push_attribute(("serverField", if *val { "1" } else { "0" }));
7221        }
7222        if let Some(ref val) = self.insert_page_break {
7223            start.push_attribute(("insertPageBreak", if *val { "1" } else { "0" }));
7224        }
7225        if let Some(ref val) = self.auto_show {
7226            start.push_attribute(("autoShow", if *val { "1" } else { "0" }));
7227        }
7228        if let Some(ref val) = self.top_auto_show {
7229            start.push_attribute(("topAutoShow", if *val { "1" } else { "0" }));
7230        }
7231        if let Some(ref val) = self.hide_new_items {
7232            start.push_attribute(("hideNewItems", if *val { "1" } else { "0" }));
7233        }
7234        if let Some(ref val) = self.measure_filter {
7235            start.push_attribute(("measureFilter", if *val { "1" } else { "0" }));
7236        }
7237        if let Some(ref val) = self.include_new_items_in_filter {
7238            start.push_attribute(("includeNewItemsInFilter", if *val { "1" } else { "0" }));
7239        }
7240        if let Some(ref val) = self.item_page_count {
7241            {
7242                let s = val.to_string();
7243                start.push_attribute(("itemPageCount", s.as_str()));
7244            }
7245        }
7246        if let Some(ref val) = self.sort_type {
7247            {
7248                let s = val.to_string();
7249                start.push_attribute(("sortType", s.as_str()));
7250            }
7251        }
7252        if let Some(ref val) = self.data_source_sort {
7253            start.push_attribute(("dataSourceSort", if *val { "1" } else { "0" }));
7254        }
7255        if let Some(ref val) = self.non_auto_sort_default {
7256            start.push_attribute(("nonAutoSortDefault", if *val { "1" } else { "0" }));
7257        }
7258        if let Some(ref val) = self.rank_by {
7259            {
7260                let s = val.to_string();
7261                start.push_attribute(("rankBy", s.as_str()));
7262            }
7263        }
7264        if let Some(ref val) = self.default_subtotal {
7265            start.push_attribute(("defaultSubtotal", if *val { "1" } else { "0" }));
7266        }
7267        if let Some(ref val) = self.sum_subtotal {
7268            start.push_attribute(("sumSubtotal", if *val { "1" } else { "0" }));
7269        }
7270        if let Some(ref val) = self.count_a_subtotal {
7271            start.push_attribute(("countASubtotal", if *val { "1" } else { "0" }));
7272        }
7273        if let Some(ref val) = self.avg_subtotal {
7274            start.push_attribute(("avgSubtotal", if *val { "1" } else { "0" }));
7275        }
7276        if let Some(ref val) = self.max_subtotal {
7277            start.push_attribute(("maxSubtotal", if *val { "1" } else { "0" }));
7278        }
7279        if let Some(ref val) = self.min_subtotal {
7280            start.push_attribute(("minSubtotal", if *val { "1" } else { "0" }));
7281        }
7282        if let Some(ref val) = self.product_subtotal {
7283            start.push_attribute(("productSubtotal", if *val { "1" } else { "0" }));
7284        }
7285        if let Some(ref val) = self.count_subtotal {
7286            start.push_attribute(("countSubtotal", if *val { "1" } else { "0" }));
7287        }
7288        if let Some(ref val) = self.std_dev_subtotal {
7289            start.push_attribute(("stdDevSubtotal", if *val { "1" } else { "0" }));
7290        }
7291        if let Some(ref val) = self.std_dev_p_subtotal {
7292            start.push_attribute(("stdDevPSubtotal", if *val { "1" } else { "0" }));
7293        }
7294        if let Some(ref val) = self.var_subtotal {
7295            start.push_attribute(("varSubtotal", if *val { "1" } else { "0" }));
7296        }
7297        if let Some(ref val) = self.var_p_subtotal {
7298            start.push_attribute(("varPSubtotal", if *val { "1" } else { "0" }));
7299        }
7300        if let Some(ref val) = self.show_prop_cell {
7301            start.push_attribute(("showPropCell", if *val { "1" } else { "0" }));
7302        }
7303        if let Some(ref val) = self.show_prop_tip {
7304            start.push_attribute(("showPropTip", if *val { "1" } else { "0" }));
7305        }
7306        if let Some(ref val) = self.show_prop_as_caption {
7307            start.push_attribute(("showPropAsCaption", if *val { "1" } else { "0" }));
7308        }
7309        if let Some(ref val) = self.default_attribute_drill_state {
7310            start.push_attribute(("defaultAttributeDrillState", if *val { "1" } else { "0" }));
7311        }
7312        #[cfg(feature = "extra-attrs")]
7313        for (key, value) in &self.extra_attrs {
7314            start.push_attribute((key.as_str(), value.as_str()));
7315        }
7316        start
7317    }
7318
7319    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7320        #[cfg(feature = "extra-children")]
7321        let mut extra_iter = self.extra_children.iter().peekable();
7322        #[cfg(feature = "extra-children")]
7323        let mut emit_idx: usize = 0;
7324        #[cfg(feature = "extra-children")]
7325        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7326            extra_iter
7327                .next()
7328                .unwrap()
7329                .node
7330                .write_to(writer)
7331                .map_err(SerializeError::from)?;
7332        }
7333        if let Some(ref val) = self.items {
7334            val.write_element("items", writer)?;
7335        }
7336        #[cfg(feature = "extra-children")]
7337        {
7338            emit_idx += 1;
7339        }
7340        #[cfg(feature = "extra-children")]
7341        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7342            extra_iter
7343                .next()
7344                .unwrap()
7345                .node
7346                .write_to(writer)
7347                .map_err(SerializeError::from)?;
7348        }
7349        if let Some(ref val) = self.auto_sort_scope {
7350            val.write_element("autoSortScope", writer)?;
7351        }
7352        #[cfg(feature = "extra-children")]
7353        {
7354            emit_idx += 1;
7355        }
7356        #[cfg(feature = "extra-children")]
7357        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7358            extra_iter
7359                .next()
7360                .unwrap()
7361                .node
7362                .write_to(writer)
7363                .map_err(SerializeError::from)?;
7364        }
7365        if let Some(ref val) = self.extension_list {
7366            val.write_element("extLst", writer)?;
7367        }
7368        #[cfg(feature = "extra-children")]
7369        {
7370            emit_idx += 1;
7371        }
7372        #[cfg(feature = "extra-children")]
7373        for extra in extra_iter {
7374            extra.node.write_to(writer).map_err(SerializeError::from)?;
7375        }
7376        Ok(())
7377    }
7378
7379    fn is_empty_element(&self) -> bool {
7380        if self.items.is_some() {
7381            return false;
7382        }
7383        if self.auto_sort_scope.is_some() {
7384            return false;
7385        }
7386        if self.extension_list.is_some() {
7387            return false;
7388        }
7389        #[cfg(feature = "extra-children")]
7390        if !self.extra_children.is_empty() {
7391            return false;
7392        }
7393        true
7394    }
7395}
7396
7397impl ToXml for PivotItems {
7398    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7399        #[allow(unused_mut)]
7400        let mut start = start;
7401        if let Some(ref val) = self.count {
7402            {
7403                let s = val.to_string();
7404                start.push_attribute(("count", s.as_str()));
7405            }
7406        }
7407        #[cfg(feature = "extra-attrs")]
7408        for (key, value) in &self.extra_attrs {
7409            start.push_attribute((key.as_str(), value.as_str()));
7410        }
7411        start
7412    }
7413
7414    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7415        #[cfg(feature = "extra-children")]
7416        let mut extra_iter = self.extra_children.iter().peekable();
7417        #[cfg(feature = "extra-children")]
7418        let mut emit_idx: usize = 0;
7419        for item in &self.item {
7420            #[cfg(feature = "extra-children")]
7421            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7422                extra_iter
7423                    .next()
7424                    .unwrap()
7425                    .node
7426                    .write_to(writer)
7427                    .map_err(SerializeError::from)?;
7428            }
7429            item.write_element("item", writer)?;
7430            #[cfg(feature = "extra-children")]
7431            {
7432                emit_idx += 1;
7433            }
7434        }
7435        #[cfg(feature = "extra-children")]
7436        for extra in extra_iter {
7437            extra.node.write_to(writer).map_err(SerializeError::from)?;
7438        }
7439        Ok(())
7440    }
7441
7442    fn is_empty_element(&self) -> bool {
7443        if !self.item.is_empty() {
7444            return false;
7445        }
7446        #[cfg(feature = "extra-children")]
7447        if !self.extra_children.is_empty() {
7448            return false;
7449        }
7450        true
7451    }
7452}
7453
7454impl ToXml for PivotItem {
7455    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7456        #[allow(unused_mut)]
7457        let mut start = start;
7458        if let Some(ref val) = self.n {
7459            start.push_attribute(("n", val.as_str()));
7460        }
7461        if let Some(ref val) = self.cell_type {
7462            {
7463                let s = val.to_string();
7464                start.push_attribute(("t", s.as_str()));
7465            }
7466        }
7467        if let Some(ref val) = self.height {
7468            start.push_attribute(("h", if *val { "1" } else { "0" }));
7469        }
7470        if let Some(ref val) = self.style_index {
7471            start.push_attribute(("s", if *val { "1" } else { "0" }));
7472        }
7473        if let Some(ref val) = self.sd {
7474            start.push_attribute(("sd", if *val { "1" } else { "0" }));
7475        }
7476        if let Some(ref val) = self.formula {
7477            start.push_attribute(("f", if *val { "1" } else { "0" }));
7478        }
7479        if let Some(ref val) = self.m {
7480            start.push_attribute(("m", if *val { "1" } else { "0" }));
7481        }
7482        if let Some(ref val) = self.cells {
7483            start.push_attribute(("c", if *val { "1" } else { "0" }));
7484        }
7485        if let Some(ref val) = self.x {
7486            {
7487                let s = val.to_string();
7488                start.push_attribute(("x", s.as_str()));
7489            }
7490        }
7491        if let Some(ref val) = self.d {
7492            start.push_attribute(("d", if *val { "1" } else { "0" }));
7493        }
7494        if let Some(ref val) = self.e {
7495            start.push_attribute(("e", if *val { "1" } else { "0" }));
7496        }
7497        #[cfg(feature = "extra-attrs")]
7498        for (key, value) in &self.extra_attrs {
7499            start.push_attribute((key.as_str(), value.as_str()));
7500        }
7501        start
7502    }
7503
7504    fn is_empty_element(&self) -> bool {
7505        true
7506    }
7507}
7508
7509impl ToXml for PageFields {
7510    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7511        #[allow(unused_mut)]
7512        let mut start = start;
7513        if let Some(ref val) = self.count {
7514            {
7515                let s = val.to_string();
7516                start.push_attribute(("count", s.as_str()));
7517            }
7518        }
7519        #[cfg(feature = "extra-attrs")]
7520        for (key, value) in &self.extra_attrs {
7521            start.push_attribute((key.as_str(), value.as_str()));
7522        }
7523        start
7524    }
7525
7526    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7527        #[cfg(feature = "extra-children")]
7528        let mut extra_iter = self.extra_children.iter().peekable();
7529        #[cfg(feature = "extra-children")]
7530        let mut emit_idx: usize = 0;
7531        for item in &self.page_field {
7532            #[cfg(feature = "extra-children")]
7533            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7534                extra_iter
7535                    .next()
7536                    .unwrap()
7537                    .node
7538                    .write_to(writer)
7539                    .map_err(SerializeError::from)?;
7540            }
7541            item.write_element("pageField", writer)?;
7542            #[cfg(feature = "extra-children")]
7543            {
7544                emit_idx += 1;
7545            }
7546        }
7547        #[cfg(feature = "extra-children")]
7548        for extra in extra_iter {
7549            extra.node.write_to(writer).map_err(SerializeError::from)?;
7550        }
7551        Ok(())
7552    }
7553
7554    fn is_empty_element(&self) -> bool {
7555        if !self.page_field.is_empty() {
7556            return false;
7557        }
7558        #[cfg(feature = "extra-children")]
7559        if !self.extra_children.is_empty() {
7560            return false;
7561        }
7562        true
7563    }
7564}
7565
7566impl ToXml for PageField {
7567    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7568        #[allow(unused_mut)]
7569        let mut start = start;
7570        {
7571            let val = &self.fld;
7572            {
7573                let s = val.to_string();
7574                start.push_attribute(("fld", s.as_str()));
7575            }
7576        }
7577        if let Some(ref val) = self.item {
7578            {
7579                let s = val.to_string();
7580                start.push_attribute(("item", s.as_str()));
7581            }
7582        }
7583        if let Some(ref val) = self.hier {
7584            {
7585                let s = val.to_string();
7586                start.push_attribute(("hier", s.as_str()));
7587            }
7588        }
7589        if let Some(ref val) = self.name {
7590            start.push_attribute(("name", val.as_str()));
7591        }
7592        if let Some(ref val) = self.cap {
7593            start.push_attribute(("cap", val.as_str()));
7594        }
7595        #[cfg(feature = "extra-attrs")]
7596        for (key, value) in &self.extra_attrs {
7597            start.push_attribute((key.as_str(), value.as_str()));
7598        }
7599        start
7600    }
7601
7602    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7603        #[cfg(feature = "extra-children")]
7604        let mut extra_iter = self.extra_children.iter().peekable();
7605        #[cfg(feature = "extra-children")]
7606        let mut emit_idx: usize = 0;
7607        #[cfg(feature = "extra-children")]
7608        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7609            extra_iter
7610                .next()
7611                .unwrap()
7612                .node
7613                .write_to(writer)
7614                .map_err(SerializeError::from)?;
7615        }
7616        if let Some(ref val) = self.extension_list {
7617            val.write_element("extLst", writer)?;
7618        }
7619        #[cfg(feature = "extra-children")]
7620        {
7621            emit_idx += 1;
7622        }
7623        #[cfg(feature = "extra-children")]
7624        for extra in extra_iter {
7625            extra.node.write_to(writer).map_err(SerializeError::from)?;
7626        }
7627        Ok(())
7628    }
7629
7630    fn is_empty_element(&self) -> bool {
7631        if self.extension_list.is_some() {
7632            return false;
7633        }
7634        #[cfg(feature = "extra-children")]
7635        if !self.extra_children.is_empty() {
7636            return false;
7637        }
7638        true
7639    }
7640}
7641
7642impl ToXml for DataFields {
7643    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7644        #[allow(unused_mut)]
7645        let mut start = start;
7646        if let Some(ref val) = self.count {
7647            {
7648                let s = val.to_string();
7649                start.push_attribute(("count", s.as_str()));
7650            }
7651        }
7652        #[cfg(feature = "extra-attrs")]
7653        for (key, value) in &self.extra_attrs {
7654            start.push_attribute((key.as_str(), value.as_str()));
7655        }
7656        start
7657    }
7658
7659    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7660        #[cfg(feature = "extra-children")]
7661        let mut extra_iter = self.extra_children.iter().peekable();
7662        #[cfg(feature = "extra-children")]
7663        let mut emit_idx: usize = 0;
7664        for item in &self.data_field {
7665            #[cfg(feature = "extra-children")]
7666            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7667                extra_iter
7668                    .next()
7669                    .unwrap()
7670                    .node
7671                    .write_to(writer)
7672                    .map_err(SerializeError::from)?;
7673            }
7674            item.write_element("dataField", writer)?;
7675            #[cfg(feature = "extra-children")]
7676            {
7677                emit_idx += 1;
7678            }
7679        }
7680        #[cfg(feature = "extra-children")]
7681        for extra in extra_iter {
7682            extra.node.write_to(writer).map_err(SerializeError::from)?;
7683        }
7684        Ok(())
7685    }
7686
7687    fn is_empty_element(&self) -> bool {
7688        if !self.data_field.is_empty() {
7689            return false;
7690        }
7691        #[cfg(feature = "extra-children")]
7692        if !self.extra_children.is_empty() {
7693            return false;
7694        }
7695        true
7696    }
7697}
7698
7699impl ToXml for DataField {
7700    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7701        #[allow(unused_mut)]
7702        let mut start = start;
7703        if let Some(ref val) = self.name {
7704            start.push_attribute(("name", val.as_str()));
7705        }
7706        {
7707            let val = &self.fld;
7708            {
7709                let s = val.to_string();
7710                start.push_attribute(("fld", s.as_str()));
7711            }
7712        }
7713        if let Some(ref val) = self.subtotal {
7714            {
7715                let s = val.to_string();
7716                start.push_attribute(("subtotal", s.as_str()));
7717            }
7718        }
7719        if let Some(ref val) = self.show_data_as {
7720            {
7721                let s = val.to_string();
7722                start.push_attribute(("showDataAs", s.as_str()));
7723            }
7724        }
7725        if let Some(ref val) = self.base_field {
7726            {
7727                let s = val.to_string();
7728                start.push_attribute(("baseField", s.as_str()));
7729            }
7730        }
7731        if let Some(ref val) = self.base_item {
7732            {
7733                let s = val.to_string();
7734                start.push_attribute(("baseItem", s.as_str()));
7735            }
7736        }
7737        if let Some(ref val) = self.number_format_id {
7738            {
7739                let s = val.to_string();
7740                start.push_attribute(("numFmtId", s.as_str()));
7741            }
7742        }
7743        #[cfg(feature = "extra-attrs")]
7744        for (key, value) in &self.extra_attrs {
7745            start.push_attribute((key.as_str(), value.as_str()));
7746        }
7747        start
7748    }
7749
7750    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7751        #[cfg(feature = "extra-children")]
7752        let mut extra_iter = self.extra_children.iter().peekable();
7753        #[cfg(feature = "extra-children")]
7754        let mut emit_idx: usize = 0;
7755        #[cfg(feature = "extra-children")]
7756        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7757            extra_iter
7758                .next()
7759                .unwrap()
7760                .node
7761                .write_to(writer)
7762                .map_err(SerializeError::from)?;
7763        }
7764        if let Some(ref val) = self.extension_list {
7765            val.write_element("extLst", writer)?;
7766        }
7767        #[cfg(feature = "extra-children")]
7768        {
7769            emit_idx += 1;
7770        }
7771        #[cfg(feature = "extra-children")]
7772        for extra in extra_iter {
7773            extra.node.write_to(writer).map_err(SerializeError::from)?;
7774        }
7775        Ok(())
7776    }
7777
7778    fn is_empty_element(&self) -> bool {
7779        if self.extension_list.is_some() {
7780            return false;
7781        }
7782        #[cfg(feature = "extra-children")]
7783        if !self.extra_children.is_empty() {
7784            return false;
7785        }
7786        true
7787    }
7788}
7789
7790impl ToXml for CTRowItems {
7791    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7792        #[allow(unused_mut)]
7793        let mut start = start;
7794        if let Some(ref val) = self.count {
7795            {
7796                let s = val.to_string();
7797                start.push_attribute(("count", s.as_str()));
7798            }
7799        }
7800        #[cfg(feature = "extra-attrs")]
7801        for (key, value) in &self.extra_attrs {
7802            start.push_attribute((key.as_str(), value.as_str()));
7803        }
7804        start
7805    }
7806
7807    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7808        #[cfg(feature = "extra-children")]
7809        let mut extra_iter = self.extra_children.iter().peekable();
7810        #[cfg(feature = "extra-children")]
7811        let mut emit_idx: usize = 0;
7812        for item in &self.i {
7813            #[cfg(feature = "extra-children")]
7814            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7815                extra_iter
7816                    .next()
7817                    .unwrap()
7818                    .node
7819                    .write_to(writer)
7820                    .map_err(SerializeError::from)?;
7821            }
7822            item.write_element("i", writer)?;
7823            #[cfg(feature = "extra-children")]
7824            {
7825                emit_idx += 1;
7826            }
7827        }
7828        #[cfg(feature = "extra-children")]
7829        for extra in extra_iter {
7830            extra.node.write_to(writer).map_err(SerializeError::from)?;
7831        }
7832        Ok(())
7833    }
7834
7835    fn is_empty_element(&self) -> bool {
7836        if !self.i.is_empty() {
7837            return false;
7838        }
7839        #[cfg(feature = "extra-children")]
7840        if !self.extra_children.is_empty() {
7841            return false;
7842        }
7843        true
7844    }
7845}
7846
7847impl ToXml for CTColItems {
7848    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7849        #[allow(unused_mut)]
7850        let mut start = start;
7851        if let Some(ref val) = self.count {
7852            {
7853                let s = val.to_string();
7854                start.push_attribute(("count", s.as_str()));
7855            }
7856        }
7857        #[cfg(feature = "extra-attrs")]
7858        for (key, value) in &self.extra_attrs {
7859            start.push_attribute((key.as_str(), value.as_str()));
7860        }
7861        start
7862    }
7863
7864    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7865        #[cfg(feature = "extra-children")]
7866        let mut extra_iter = self.extra_children.iter().peekable();
7867        #[cfg(feature = "extra-children")]
7868        let mut emit_idx: usize = 0;
7869        for item in &self.i {
7870            #[cfg(feature = "extra-children")]
7871            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7872                extra_iter
7873                    .next()
7874                    .unwrap()
7875                    .node
7876                    .write_to(writer)
7877                    .map_err(SerializeError::from)?;
7878            }
7879            item.write_element("i", writer)?;
7880            #[cfg(feature = "extra-children")]
7881            {
7882                emit_idx += 1;
7883            }
7884        }
7885        #[cfg(feature = "extra-children")]
7886        for extra in extra_iter {
7887            extra.node.write_to(writer).map_err(SerializeError::from)?;
7888        }
7889        Ok(())
7890    }
7891
7892    fn is_empty_element(&self) -> bool {
7893        if !self.i.is_empty() {
7894            return false;
7895        }
7896        #[cfg(feature = "extra-children")]
7897        if !self.extra_children.is_empty() {
7898            return false;
7899        }
7900        true
7901    }
7902}
7903
7904impl ToXml for CTI {
7905    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7906        #[allow(unused_mut)]
7907        let mut start = start;
7908        if let Some(ref val) = self.cell_type {
7909            {
7910                let s = val.to_string();
7911                start.push_attribute(("t", s.as_str()));
7912            }
7913        }
7914        if let Some(ref val) = self.reference {
7915            {
7916                let s = val.to_string();
7917                start.push_attribute(("r", s.as_str()));
7918            }
7919        }
7920        if let Some(ref val) = self.i {
7921            {
7922                let s = val.to_string();
7923                start.push_attribute(("i", s.as_str()));
7924            }
7925        }
7926        #[cfg(feature = "extra-attrs")]
7927        for (key, value) in &self.extra_attrs {
7928            start.push_attribute((key.as_str(), value.as_str()));
7929        }
7930        start
7931    }
7932
7933    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
7934        #[cfg(feature = "extra-children")]
7935        let mut extra_iter = self.extra_children.iter().peekable();
7936        #[cfg(feature = "extra-children")]
7937        let mut emit_idx: usize = 0;
7938        for item in &self.x {
7939            #[cfg(feature = "extra-children")]
7940            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
7941                extra_iter
7942                    .next()
7943                    .unwrap()
7944                    .node
7945                    .write_to(writer)
7946                    .map_err(SerializeError::from)?;
7947            }
7948            item.write_element("x", writer)?;
7949            #[cfg(feature = "extra-children")]
7950            {
7951                emit_idx += 1;
7952            }
7953        }
7954        #[cfg(feature = "extra-children")]
7955        for extra in extra_iter {
7956            extra.node.write_to(writer).map_err(SerializeError::from)?;
7957        }
7958        Ok(())
7959    }
7960
7961    fn is_empty_element(&self) -> bool {
7962        if !self.x.is_empty() {
7963            return false;
7964        }
7965        #[cfg(feature = "extra-children")]
7966        if !self.extra_children.is_empty() {
7967            return false;
7968        }
7969        true
7970    }
7971}
7972
7973impl ToXml for CTX {
7974    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7975        #[allow(unused_mut)]
7976        let mut start = start;
7977        if let Some(ref val) = self.value {
7978            {
7979                let s = val.to_string();
7980                start.push_attribute(("v", s.as_str()));
7981            }
7982        }
7983        #[cfg(feature = "extra-attrs")]
7984        for (key, value) in &self.extra_attrs {
7985            start.push_attribute((key.as_str(), value.as_str()));
7986        }
7987        start
7988    }
7989
7990    fn is_empty_element(&self) -> bool {
7991        true
7992    }
7993}
7994
7995impl ToXml for RowFields {
7996    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
7997        #[allow(unused_mut)]
7998        let mut start = start;
7999        if let Some(ref val) = self.count {
8000            {
8001                let s = val.to_string();
8002                start.push_attribute(("count", s.as_str()));
8003            }
8004        }
8005        #[cfg(feature = "extra-attrs")]
8006        for (key, value) in &self.extra_attrs {
8007            start.push_attribute((key.as_str(), value.as_str()));
8008        }
8009        start
8010    }
8011
8012    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8013        #[cfg(feature = "extra-children")]
8014        let mut extra_iter = self.extra_children.iter().peekable();
8015        #[cfg(feature = "extra-children")]
8016        let mut emit_idx: usize = 0;
8017        for item in &self.field {
8018            #[cfg(feature = "extra-children")]
8019            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8020                extra_iter
8021                    .next()
8022                    .unwrap()
8023                    .node
8024                    .write_to(writer)
8025                    .map_err(SerializeError::from)?;
8026            }
8027            item.write_element("field", writer)?;
8028            #[cfg(feature = "extra-children")]
8029            {
8030                emit_idx += 1;
8031            }
8032        }
8033        #[cfg(feature = "extra-children")]
8034        for extra in extra_iter {
8035            extra.node.write_to(writer).map_err(SerializeError::from)?;
8036        }
8037        Ok(())
8038    }
8039
8040    fn is_empty_element(&self) -> bool {
8041        if !self.field.is_empty() {
8042            return false;
8043        }
8044        #[cfg(feature = "extra-children")]
8045        if !self.extra_children.is_empty() {
8046            return false;
8047        }
8048        true
8049    }
8050}
8051
8052impl ToXml for ColFields {
8053    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8054        #[allow(unused_mut)]
8055        let mut start = start;
8056        if let Some(ref val) = self.count {
8057            {
8058                let s = val.to_string();
8059                start.push_attribute(("count", s.as_str()));
8060            }
8061        }
8062        #[cfg(feature = "extra-attrs")]
8063        for (key, value) in &self.extra_attrs {
8064            start.push_attribute((key.as_str(), value.as_str()));
8065        }
8066        start
8067    }
8068
8069    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8070        #[cfg(feature = "extra-children")]
8071        let mut extra_iter = self.extra_children.iter().peekable();
8072        #[cfg(feature = "extra-children")]
8073        let mut emit_idx: usize = 0;
8074        for item in &self.field {
8075            #[cfg(feature = "extra-children")]
8076            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8077                extra_iter
8078                    .next()
8079                    .unwrap()
8080                    .node
8081                    .write_to(writer)
8082                    .map_err(SerializeError::from)?;
8083            }
8084            item.write_element("field", writer)?;
8085            #[cfg(feature = "extra-children")]
8086            {
8087                emit_idx += 1;
8088            }
8089        }
8090        #[cfg(feature = "extra-children")]
8091        for extra in extra_iter {
8092            extra.node.write_to(writer).map_err(SerializeError::from)?;
8093        }
8094        Ok(())
8095    }
8096
8097    fn is_empty_element(&self) -> bool {
8098        if !self.field.is_empty() {
8099            return false;
8100        }
8101        #[cfg(feature = "extra-children")]
8102        if !self.extra_children.is_empty() {
8103            return false;
8104        }
8105        true
8106    }
8107}
8108
8109impl ToXml for CTField {
8110    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8111        #[allow(unused_mut)]
8112        let mut start = start;
8113        {
8114            let val = &self.x;
8115            {
8116                let s = val.to_string();
8117                start.push_attribute(("x", s.as_str()));
8118            }
8119        }
8120        #[cfg(feature = "extra-attrs")]
8121        for (key, value) in &self.extra_attrs {
8122            start.push_attribute((key.as_str(), value.as_str()));
8123        }
8124        start
8125    }
8126
8127    fn is_empty_element(&self) -> bool {
8128        true
8129    }
8130}
8131
8132impl ToXml for CTFormats {
8133    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8134        #[allow(unused_mut)]
8135        let mut start = start;
8136        if let Some(ref val) = self.count {
8137            {
8138                let s = val.to_string();
8139                start.push_attribute(("count", s.as_str()));
8140            }
8141        }
8142        #[cfg(feature = "extra-attrs")]
8143        for (key, value) in &self.extra_attrs {
8144            start.push_attribute((key.as_str(), value.as_str()));
8145        }
8146        start
8147    }
8148
8149    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8150        #[cfg(feature = "extra-children")]
8151        let mut extra_iter = self.extra_children.iter().peekable();
8152        #[cfg(feature = "extra-children")]
8153        let mut emit_idx: usize = 0;
8154        for item in &self.format {
8155            #[cfg(feature = "extra-children")]
8156            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8157                extra_iter
8158                    .next()
8159                    .unwrap()
8160                    .node
8161                    .write_to(writer)
8162                    .map_err(SerializeError::from)?;
8163            }
8164            item.write_element("format", writer)?;
8165            #[cfg(feature = "extra-children")]
8166            {
8167                emit_idx += 1;
8168            }
8169        }
8170        #[cfg(feature = "extra-children")]
8171        for extra in extra_iter {
8172            extra.node.write_to(writer).map_err(SerializeError::from)?;
8173        }
8174        Ok(())
8175    }
8176
8177    fn is_empty_element(&self) -> bool {
8178        if !self.format.is_empty() {
8179            return false;
8180        }
8181        #[cfg(feature = "extra-children")]
8182        if !self.extra_children.is_empty() {
8183            return false;
8184        }
8185        true
8186    }
8187}
8188
8189impl ToXml for CTFormat {
8190    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8191        #[allow(unused_mut)]
8192        let mut start = start;
8193        if let Some(ref val) = self.action {
8194            {
8195                let s = val.to_string();
8196                start.push_attribute(("action", s.as_str()));
8197            }
8198        }
8199        if let Some(ref val) = self.dxf_id {
8200            {
8201                let s = val.to_string();
8202                start.push_attribute(("dxfId", s.as_str()));
8203            }
8204        }
8205        #[cfg(feature = "extra-attrs")]
8206        for (key, value) in &self.extra_attrs {
8207            start.push_attribute((key.as_str(), value.as_str()));
8208        }
8209        start
8210    }
8211
8212    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8213        #[cfg(feature = "extra-children")]
8214        let mut extra_iter = self.extra_children.iter().peekable();
8215        #[cfg(feature = "extra-children")]
8216        let mut emit_idx: usize = 0;
8217        #[cfg(feature = "extra-children")]
8218        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8219            extra_iter
8220                .next()
8221                .unwrap()
8222                .node
8223                .write_to(writer)
8224                .map_err(SerializeError::from)?;
8225        }
8226        {
8227            let val = &self.pivot_area;
8228            val.write_element("pivotArea", writer)?;
8229        }
8230        #[cfg(feature = "extra-children")]
8231        {
8232            emit_idx += 1;
8233        }
8234        #[cfg(feature = "extra-children")]
8235        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8236            extra_iter
8237                .next()
8238                .unwrap()
8239                .node
8240                .write_to(writer)
8241                .map_err(SerializeError::from)?;
8242        }
8243        if let Some(ref val) = self.extension_list {
8244            val.write_element("extLst", writer)?;
8245        }
8246        #[cfg(feature = "extra-children")]
8247        {
8248            emit_idx += 1;
8249        }
8250        #[cfg(feature = "extra-children")]
8251        for extra in extra_iter {
8252            extra.node.write_to(writer).map_err(SerializeError::from)?;
8253        }
8254        Ok(())
8255    }
8256
8257    fn is_empty_element(&self) -> bool {
8258        false
8259    }
8260}
8261
8262impl ToXml for CTConditionalFormats {
8263    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8264        #[allow(unused_mut)]
8265        let mut start = start;
8266        if let Some(ref val) = self.count {
8267            {
8268                let s = val.to_string();
8269                start.push_attribute(("count", s.as_str()));
8270            }
8271        }
8272        #[cfg(feature = "extra-attrs")]
8273        for (key, value) in &self.extra_attrs {
8274            start.push_attribute((key.as_str(), value.as_str()));
8275        }
8276        start
8277    }
8278
8279    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8280        #[cfg(feature = "extra-children")]
8281        let mut extra_iter = self.extra_children.iter().peekable();
8282        #[cfg(feature = "extra-children")]
8283        let mut emit_idx: usize = 0;
8284        for item in &self.conditional_format {
8285            #[cfg(feature = "extra-children")]
8286            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8287                extra_iter
8288                    .next()
8289                    .unwrap()
8290                    .node
8291                    .write_to(writer)
8292                    .map_err(SerializeError::from)?;
8293            }
8294            item.write_element("conditionalFormat", writer)?;
8295            #[cfg(feature = "extra-children")]
8296            {
8297                emit_idx += 1;
8298            }
8299        }
8300        #[cfg(feature = "extra-children")]
8301        for extra in extra_iter {
8302            extra.node.write_to(writer).map_err(SerializeError::from)?;
8303        }
8304        Ok(())
8305    }
8306
8307    fn is_empty_element(&self) -> bool {
8308        if !self.conditional_format.is_empty() {
8309            return false;
8310        }
8311        #[cfg(feature = "extra-children")]
8312        if !self.extra_children.is_empty() {
8313            return false;
8314        }
8315        true
8316    }
8317}
8318
8319impl ToXml for CTConditionalFormat {
8320    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8321        #[allow(unused_mut)]
8322        let mut start = start;
8323        if let Some(ref val) = self.scope {
8324            {
8325                let s = val.to_string();
8326                start.push_attribute(("scope", s.as_str()));
8327            }
8328        }
8329        if let Some(ref val) = self.r#type {
8330            {
8331                let s = val.to_string();
8332                start.push_attribute(("type", s.as_str()));
8333            }
8334        }
8335        {
8336            let val = &self.priority;
8337            {
8338                let s = val.to_string();
8339                start.push_attribute(("priority", s.as_str()));
8340            }
8341        }
8342        #[cfg(feature = "extra-attrs")]
8343        for (key, value) in &self.extra_attrs {
8344            start.push_attribute((key.as_str(), value.as_str()));
8345        }
8346        start
8347    }
8348
8349    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8350        #[cfg(feature = "extra-children")]
8351        let mut extra_iter = self.extra_children.iter().peekable();
8352        #[cfg(feature = "extra-children")]
8353        let mut emit_idx: usize = 0;
8354        #[cfg(feature = "extra-children")]
8355        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8356            extra_iter
8357                .next()
8358                .unwrap()
8359                .node
8360                .write_to(writer)
8361                .map_err(SerializeError::from)?;
8362        }
8363        {
8364            let val = &self.pivot_areas;
8365            val.write_element("pivotAreas", writer)?;
8366        }
8367        #[cfg(feature = "extra-children")]
8368        {
8369            emit_idx += 1;
8370        }
8371        #[cfg(feature = "extra-children")]
8372        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8373            extra_iter
8374                .next()
8375                .unwrap()
8376                .node
8377                .write_to(writer)
8378                .map_err(SerializeError::from)?;
8379        }
8380        if let Some(ref val) = self.extension_list {
8381            val.write_element("extLst", writer)?;
8382        }
8383        #[cfg(feature = "extra-children")]
8384        {
8385            emit_idx += 1;
8386        }
8387        #[cfg(feature = "extra-children")]
8388        for extra in extra_iter {
8389            extra.node.write_to(writer).map_err(SerializeError::from)?;
8390        }
8391        Ok(())
8392    }
8393
8394    fn is_empty_element(&self) -> bool {
8395        false
8396    }
8397}
8398
8399impl ToXml for PivotAreas {
8400    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8401        #[allow(unused_mut)]
8402        let mut start = start;
8403        if let Some(ref val) = self.count {
8404            {
8405                let s = val.to_string();
8406                start.push_attribute(("count", s.as_str()));
8407            }
8408        }
8409        #[cfg(feature = "extra-attrs")]
8410        for (key, value) in &self.extra_attrs {
8411            start.push_attribute((key.as_str(), value.as_str()));
8412        }
8413        start
8414    }
8415
8416    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8417        #[cfg(feature = "extra-children")]
8418        let mut extra_iter = self.extra_children.iter().peekable();
8419        #[cfg(feature = "extra-children")]
8420        let mut emit_idx: usize = 0;
8421        for item in &self.pivot_area {
8422            #[cfg(feature = "extra-children")]
8423            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8424                extra_iter
8425                    .next()
8426                    .unwrap()
8427                    .node
8428                    .write_to(writer)
8429                    .map_err(SerializeError::from)?;
8430            }
8431            item.write_element("pivotArea", writer)?;
8432            #[cfg(feature = "extra-children")]
8433            {
8434                emit_idx += 1;
8435            }
8436        }
8437        #[cfg(feature = "extra-children")]
8438        for extra in extra_iter {
8439            extra.node.write_to(writer).map_err(SerializeError::from)?;
8440        }
8441        Ok(())
8442    }
8443
8444    fn is_empty_element(&self) -> bool {
8445        if !self.pivot_area.is_empty() {
8446            return false;
8447        }
8448        #[cfg(feature = "extra-children")]
8449        if !self.extra_children.is_empty() {
8450            return false;
8451        }
8452        true
8453    }
8454}
8455
8456impl ToXml for CTChartFormats {
8457    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8458        #[allow(unused_mut)]
8459        let mut start = start;
8460        if let Some(ref val) = self.count {
8461            {
8462                let s = val.to_string();
8463                start.push_attribute(("count", s.as_str()));
8464            }
8465        }
8466        #[cfg(feature = "extra-attrs")]
8467        for (key, value) in &self.extra_attrs {
8468            start.push_attribute((key.as_str(), value.as_str()));
8469        }
8470        start
8471    }
8472
8473    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8474        #[cfg(feature = "extra-children")]
8475        let mut extra_iter = self.extra_children.iter().peekable();
8476        #[cfg(feature = "extra-children")]
8477        let mut emit_idx: usize = 0;
8478        for item in &self.chart_format {
8479            #[cfg(feature = "extra-children")]
8480            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8481                extra_iter
8482                    .next()
8483                    .unwrap()
8484                    .node
8485                    .write_to(writer)
8486                    .map_err(SerializeError::from)?;
8487            }
8488            item.write_element("chartFormat", writer)?;
8489            #[cfg(feature = "extra-children")]
8490            {
8491                emit_idx += 1;
8492            }
8493        }
8494        #[cfg(feature = "extra-children")]
8495        for extra in extra_iter {
8496            extra.node.write_to(writer).map_err(SerializeError::from)?;
8497        }
8498        Ok(())
8499    }
8500
8501    fn is_empty_element(&self) -> bool {
8502        if !self.chart_format.is_empty() {
8503            return false;
8504        }
8505        #[cfg(feature = "extra-children")]
8506        if !self.extra_children.is_empty() {
8507            return false;
8508        }
8509        true
8510    }
8511}
8512
8513impl ToXml for CTChartFormat {
8514    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8515        #[allow(unused_mut)]
8516        let mut start = start;
8517        {
8518            let val = &self.chart;
8519            {
8520                let s = val.to_string();
8521                start.push_attribute(("chart", s.as_str()));
8522            }
8523        }
8524        {
8525            let val = &self.format;
8526            {
8527                let s = val.to_string();
8528                start.push_attribute(("format", s.as_str()));
8529            }
8530        }
8531        if let Some(ref val) = self.series {
8532            start.push_attribute(("series", if *val { "1" } else { "0" }));
8533        }
8534        #[cfg(feature = "extra-attrs")]
8535        for (key, value) in &self.extra_attrs {
8536            start.push_attribute((key.as_str(), value.as_str()));
8537        }
8538        start
8539    }
8540
8541    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8542        #[cfg(feature = "extra-children")]
8543        let mut extra_iter = self.extra_children.iter().peekable();
8544        #[cfg(feature = "extra-children")]
8545        let mut emit_idx: usize = 0;
8546        #[cfg(feature = "extra-children")]
8547        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8548            extra_iter
8549                .next()
8550                .unwrap()
8551                .node
8552                .write_to(writer)
8553                .map_err(SerializeError::from)?;
8554        }
8555        {
8556            let val = &self.pivot_area;
8557            val.write_element("pivotArea", writer)?;
8558        }
8559        #[cfg(feature = "extra-children")]
8560        {
8561            emit_idx += 1;
8562        }
8563        #[cfg(feature = "extra-children")]
8564        for extra in extra_iter {
8565            extra.node.write_to(writer).map_err(SerializeError::from)?;
8566        }
8567        Ok(())
8568    }
8569
8570    fn is_empty_element(&self) -> bool {
8571        false
8572    }
8573}
8574
8575impl ToXml for CTPivotHierarchies {
8576    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8577        #[allow(unused_mut)]
8578        let mut start = start;
8579        if let Some(ref val) = self.count {
8580            {
8581                let s = val.to_string();
8582                start.push_attribute(("count", s.as_str()));
8583            }
8584        }
8585        #[cfg(feature = "extra-attrs")]
8586        for (key, value) in &self.extra_attrs {
8587            start.push_attribute((key.as_str(), value.as_str()));
8588        }
8589        start
8590    }
8591
8592    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8593        #[cfg(feature = "extra-children")]
8594        let mut extra_iter = self.extra_children.iter().peekable();
8595        #[cfg(feature = "extra-children")]
8596        let mut emit_idx: usize = 0;
8597        for item in &self.pivot_hierarchy {
8598            #[cfg(feature = "extra-children")]
8599            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8600                extra_iter
8601                    .next()
8602                    .unwrap()
8603                    .node
8604                    .write_to(writer)
8605                    .map_err(SerializeError::from)?;
8606            }
8607            item.write_element("pivotHierarchy", writer)?;
8608            #[cfg(feature = "extra-children")]
8609            {
8610                emit_idx += 1;
8611            }
8612        }
8613        #[cfg(feature = "extra-children")]
8614        for extra in extra_iter {
8615            extra.node.write_to(writer).map_err(SerializeError::from)?;
8616        }
8617        Ok(())
8618    }
8619
8620    fn is_empty_element(&self) -> bool {
8621        if !self.pivot_hierarchy.is_empty() {
8622            return false;
8623        }
8624        #[cfg(feature = "extra-children")]
8625        if !self.extra_children.is_empty() {
8626            return false;
8627        }
8628        true
8629    }
8630}
8631
8632impl ToXml for CTPivotHierarchy {
8633    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8634        #[allow(unused_mut)]
8635        let mut start = start;
8636        if let Some(ref val) = self.outline {
8637            start.push_attribute(("outline", if *val { "1" } else { "0" }));
8638        }
8639        if let Some(ref val) = self.multiple_item_selection_allowed {
8640            start.push_attribute(("multipleItemSelectionAllowed", if *val { "1" } else { "0" }));
8641        }
8642        if let Some(ref val) = self.subtotal_top {
8643            start.push_attribute(("subtotalTop", if *val { "1" } else { "0" }));
8644        }
8645        if let Some(ref val) = self.show_in_field_list {
8646            start.push_attribute(("showInFieldList", if *val { "1" } else { "0" }));
8647        }
8648        if let Some(ref val) = self.drag_to_row {
8649            start.push_attribute(("dragToRow", if *val { "1" } else { "0" }));
8650        }
8651        if let Some(ref val) = self.drag_to_col {
8652            start.push_attribute(("dragToCol", if *val { "1" } else { "0" }));
8653        }
8654        if let Some(ref val) = self.drag_to_page {
8655            start.push_attribute(("dragToPage", if *val { "1" } else { "0" }));
8656        }
8657        if let Some(ref val) = self.drag_to_data {
8658            start.push_attribute(("dragToData", if *val { "1" } else { "0" }));
8659        }
8660        if let Some(ref val) = self.drag_off {
8661            start.push_attribute(("dragOff", if *val { "1" } else { "0" }));
8662        }
8663        if let Some(ref val) = self.include_new_items_in_filter {
8664            start.push_attribute(("includeNewItemsInFilter", if *val { "1" } else { "0" }));
8665        }
8666        if let Some(ref val) = self.caption {
8667            start.push_attribute(("caption", val.as_str()));
8668        }
8669        #[cfg(feature = "extra-attrs")]
8670        for (key, value) in &self.extra_attrs {
8671            start.push_attribute((key.as_str(), value.as_str()));
8672        }
8673        start
8674    }
8675
8676    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8677        #[cfg(feature = "extra-children")]
8678        let mut extra_iter = self.extra_children.iter().peekable();
8679        #[cfg(feature = "extra-children")]
8680        let mut emit_idx: usize = 0;
8681        #[cfg(feature = "extra-children")]
8682        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8683            extra_iter
8684                .next()
8685                .unwrap()
8686                .node
8687                .write_to(writer)
8688                .map_err(SerializeError::from)?;
8689        }
8690        if let Some(ref val) = self.mps {
8691            val.write_element("mps", writer)?;
8692        }
8693        #[cfg(feature = "extra-children")]
8694        {
8695            emit_idx += 1;
8696        }
8697        for item in &self.members {
8698            #[cfg(feature = "extra-children")]
8699            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8700                extra_iter
8701                    .next()
8702                    .unwrap()
8703                    .node
8704                    .write_to(writer)
8705                    .map_err(SerializeError::from)?;
8706            }
8707            item.write_element("members", writer)?;
8708            #[cfg(feature = "extra-children")]
8709            {
8710                emit_idx += 1;
8711            }
8712        }
8713        #[cfg(feature = "extra-children")]
8714        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8715            extra_iter
8716                .next()
8717                .unwrap()
8718                .node
8719                .write_to(writer)
8720                .map_err(SerializeError::from)?;
8721        }
8722        if let Some(ref val) = self.extension_list {
8723            val.write_element("extLst", writer)?;
8724        }
8725        #[cfg(feature = "extra-children")]
8726        {
8727            emit_idx += 1;
8728        }
8729        #[cfg(feature = "extra-children")]
8730        for extra in extra_iter {
8731            extra.node.write_to(writer).map_err(SerializeError::from)?;
8732        }
8733        Ok(())
8734    }
8735
8736    fn is_empty_element(&self) -> bool {
8737        if self.mps.is_some() {
8738            return false;
8739        }
8740        if !self.members.is_empty() {
8741            return false;
8742        }
8743        if self.extension_list.is_some() {
8744            return false;
8745        }
8746        #[cfg(feature = "extra-children")]
8747        if !self.extra_children.is_empty() {
8748            return false;
8749        }
8750        true
8751    }
8752}
8753
8754impl ToXml for CTRowHierarchiesUsage {
8755    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8756        #[allow(unused_mut)]
8757        let mut start = start;
8758        if let Some(ref val) = self.count {
8759            {
8760                let s = val.to_string();
8761                start.push_attribute(("count", s.as_str()));
8762            }
8763        }
8764        #[cfg(feature = "extra-attrs")]
8765        for (key, value) in &self.extra_attrs {
8766            start.push_attribute((key.as_str(), value.as_str()));
8767        }
8768        start
8769    }
8770
8771    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8772        #[cfg(feature = "extra-children")]
8773        let mut extra_iter = self.extra_children.iter().peekable();
8774        #[cfg(feature = "extra-children")]
8775        let mut emit_idx: usize = 0;
8776        for item in &self.row_hierarchy_usage {
8777            #[cfg(feature = "extra-children")]
8778            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8779                extra_iter
8780                    .next()
8781                    .unwrap()
8782                    .node
8783                    .write_to(writer)
8784                    .map_err(SerializeError::from)?;
8785            }
8786            item.write_element("rowHierarchyUsage", writer)?;
8787            #[cfg(feature = "extra-children")]
8788            {
8789                emit_idx += 1;
8790            }
8791        }
8792        #[cfg(feature = "extra-children")]
8793        for extra in extra_iter {
8794            extra.node.write_to(writer).map_err(SerializeError::from)?;
8795        }
8796        Ok(())
8797    }
8798
8799    fn is_empty_element(&self) -> bool {
8800        if !self.row_hierarchy_usage.is_empty() {
8801            return false;
8802        }
8803        #[cfg(feature = "extra-children")]
8804        if !self.extra_children.is_empty() {
8805            return false;
8806        }
8807        true
8808    }
8809}
8810
8811impl ToXml for CTColHierarchiesUsage {
8812    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8813        #[allow(unused_mut)]
8814        let mut start = start;
8815        if let Some(ref val) = self.count {
8816            {
8817                let s = val.to_string();
8818                start.push_attribute(("count", s.as_str()));
8819            }
8820        }
8821        #[cfg(feature = "extra-attrs")]
8822        for (key, value) in &self.extra_attrs {
8823            start.push_attribute((key.as_str(), value.as_str()));
8824        }
8825        start
8826    }
8827
8828    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8829        #[cfg(feature = "extra-children")]
8830        let mut extra_iter = self.extra_children.iter().peekable();
8831        #[cfg(feature = "extra-children")]
8832        let mut emit_idx: usize = 0;
8833        for item in &self.col_hierarchy_usage {
8834            #[cfg(feature = "extra-children")]
8835            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8836                extra_iter
8837                    .next()
8838                    .unwrap()
8839                    .node
8840                    .write_to(writer)
8841                    .map_err(SerializeError::from)?;
8842            }
8843            item.write_element("colHierarchyUsage", writer)?;
8844            #[cfg(feature = "extra-children")]
8845            {
8846                emit_idx += 1;
8847            }
8848        }
8849        #[cfg(feature = "extra-children")]
8850        for extra in extra_iter {
8851            extra.node.write_to(writer).map_err(SerializeError::from)?;
8852        }
8853        Ok(())
8854    }
8855
8856    fn is_empty_element(&self) -> bool {
8857        if !self.col_hierarchy_usage.is_empty() {
8858            return false;
8859        }
8860        #[cfg(feature = "extra-children")]
8861        if !self.extra_children.is_empty() {
8862            return false;
8863        }
8864        true
8865    }
8866}
8867
8868impl ToXml for CTHierarchyUsage {
8869    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8870        #[allow(unused_mut)]
8871        let mut start = start;
8872        {
8873            let val = &self.hierarchy_usage;
8874            {
8875                let s = val.to_string();
8876                start.push_attribute(("hierarchyUsage", s.as_str()));
8877            }
8878        }
8879        #[cfg(feature = "extra-attrs")]
8880        for (key, value) in &self.extra_attrs {
8881            start.push_attribute((key.as_str(), value.as_str()));
8882        }
8883        start
8884    }
8885
8886    fn is_empty_element(&self) -> bool {
8887        true
8888    }
8889}
8890
8891impl ToXml for CTMemberProperties {
8892    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8893        #[allow(unused_mut)]
8894        let mut start = start;
8895        if let Some(ref val) = self.count {
8896            {
8897                let s = val.to_string();
8898                start.push_attribute(("count", s.as_str()));
8899            }
8900        }
8901        #[cfg(feature = "extra-attrs")]
8902        for (key, value) in &self.extra_attrs {
8903            start.push_attribute((key.as_str(), value.as_str()));
8904        }
8905        start
8906    }
8907
8908    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
8909        #[cfg(feature = "extra-children")]
8910        let mut extra_iter = self.extra_children.iter().peekable();
8911        #[cfg(feature = "extra-children")]
8912        let mut emit_idx: usize = 0;
8913        for item in &self.mp {
8914            #[cfg(feature = "extra-children")]
8915            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
8916                extra_iter
8917                    .next()
8918                    .unwrap()
8919                    .node
8920                    .write_to(writer)
8921                    .map_err(SerializeError::from)?;
8922            }
8923            item.write_element("mp", writer)?;
8924            #[cfg(feature = "extra-children")]
8925            {
8926                emit_idx += 1;
8927            }
8928        }
8929        #[cfg(feature = "extra-children")]
8930        for extra in extra_iter {
8931            extra.node.write_to(writer).map_err(SerializeError::from)?;
8932        }
8933        Ok(())
8934    }
8935
8936    fn is_empty_element(&self) -> bool {
8937        if !self.mp.is_empty() {
8938            return false;
8939        }
8940        #[cfg(feature = "extra-children")]
8941        if !self.extra_children.is_empty() {
8942            return false;
8943        }
8944        true
8945    }
8946}
8947
8948impl ToXml for CTMemberProperty {
8949    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
8950        #[allow(unused_mut)]
8951        let mut start = start;
8952        if let Some(ref val) = self.name {
8953            start.push_attribute(("name", val.as_str()));
8954        }
8955        if let Some(ref val) = self.show_cell {
8956            start.push_attribute(("showCell", if *val { "1" } else { "0" }));
8957        }
8958        if let Some(ref val) = self.show_tip {
8959            start.push_attribute(("showTip", if *val { "1" } else { "0" }));
8960        }
8961        if let Some(ref val) = self.show_as_caption {
8962            start.push_attribute(("showAsCaption", if *val { "1" } else { "0" }));
8963        }
8964        if let Some(ref val) = self.name_len {
8965            {
8966                let s = val.to_string();
8967                start.push_attribute(("nameLen", s.as_str()));
8968            }
8969        }
8970        if let Some(ref val) = self.p_pos {
8971            {
8972                let s = val.to_string();
8973                start.push_attribute(("pPos", s.as_str()));
8974            }
8975        }
8976        if let Some(ref val) = self.p_len {
8977            {
8978                let s = val.to_string();
8979                start.push_attribute(("pLen", s.as_str()));
8980            }
8981        }
8982        if let Some(ref val) = self.level {
8983            {
8984                let s = val.to_string();
8985                start.push_attribute(("level", s.as_str()));
8986            }
8987        }
8988        {
8989            let val = &self.field;
8990            {
8991                let s = val.to_string();
8992                start.push_attribute(("field", s.as_str()));
8993            }
8994        }
8995        #[cfg(feature = "extra-attrs")]
8996        for (key, value) in &self.extra_attrs {
8997            start.push_attribute((key.as_str(), value.as_str()));
8998        }
8999        start
9000    }
9001
9002    fn is_empty_element(&self) -> bool {
9003        true
9004    }
9005}
9006
9007impl ToXml for CTMembers {
9008    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9009        #[allow(unused_mut)]
9010        let mut start = start;
9011        if let Some(ref val) = self.count {
9012            {
9013                let s = val.to_string();
9014                start.push_attribute(("count", s.as_str()));
9015            }
9016        }
9017        if let Some(ref val) = self.level {
9018            {
9019                let s = val.to_string();
9020                start.push_attribute(("level", s.as_str()));
9021            }
9022        }
9023        #[cfg(feature = "extra-attrs")]
9024        for (key, value) in &self.extra_attrs {
9025            start.push_attribute((key.as_str(), value.as_str()));
9026        }
9027        start
9028    }
9029
9030    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9031        #[cfg(feature = "extra-children")]
9032        let mut extra_iter = self.extra_children.iter().peekable();
9033        #[cfg(feature = "extra-children")]
9034        let mut emit_idx: usize = 0;
9035        for item in &self.member {
9036            #[cfg(feature = "extra-children")]
9037            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9038                extra_iter
9039                    .next()
9040                    .unwrap()
9041                    .node
9042                    .write_to(writer)
9043                    .map_err(SerializeError::from)?;
9044            }
9045            item.write_element("member", writer)?;
9046            #[cfg(feature = "extra-children")]
9047            {
9048                emit_idx += 1;
9049            }
9050        }
9051        #[cfg(feature = "extra-children")]
9052        for extra in extra_iter {
9053            extra.node.write_to(writer).map_err(SerializeError::from)?;
9054        }
9055        Ok(())
9056    }
9057
9058    fn is_empty_element(&self) -> bool {
9059        if !self.member.is_empty() {
9060            return false;
9061        }
9062        #[cfg(feature = "extra-children")]
9063        if !self.extra_children.is_empty() {
9064            return false;
9065        }
9066        true
9067    }
9068}
9069
9070impl ToXml for CTMember {
9071    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9072        #[allow(unused_mut)]
9073        let mut start = start;
9074        {
9075            let val = &self.name;
9076            start.push_attribute(("name", val.as_str()));
9077        }
9078        #[cfg(feature = "extra-attrs")]
9079        for (key, value) in &self.extra_attrs {
9080            start.push_attribute((key.as_str(), value.as_str()));
9081        }
9082        start
9083    }
9084
9085    fn is_empty_element(&self) -> bool {
9086        true
9087    }
9088}
9089
9090impl ToXml for CTDimensions {
9091    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9092        #[allow(unused_mut)]
9093        let mut start = start;
9094        if let Some(ref val) = self.count {
9095            {
9096                let s = val.to_string();
9097                start.push_attribute(("count", s.as_str()));
9098            }
9099        }
9100        #[cfg(feature = "extra-attrs")]
9101        for (key, value) in &self.extra_attrs {
9102            start.push_attribute((key.as_str(), value.as_str()));
9103        }
9104        start
9105    }
9106
9107    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9108        #[cfg(feature = "extra-children")]
9109        let mut extra_iter = self.extra_children.iter().peekable();
9110        #[cfg(feature = "extra-children")]
9111        let mut emit_idx: usize = 0;
9112        for item in &self.dimension {
9113            #[cfg(feature = "extra-children")]
9114            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9115                extra_iter
9116                    .next()
9117                    .unwrap()
9118                    .node
9119                    .write_to(writer)
9120                    .map_err(SerializeError::from)?;
9121            }
9122            item.write_element("dimension", writer)?;
9123            #[cfg(feature = "extra-children")]
9124            {
9125                emit_idx += 1;
9126            }
9127        }
9128        #[cfg(feature = "extra-children")]
9129        for extra in extra_iter {
9130            extra.node.write_to(writer).map_err(SerializeError::from)?;
9131        }
9132        Ok(())
9133    }
9134
9135    fn is_empty_element(&self) -> bool {
9136        if !self.dimension.is_empty() {
9137            return false;
9138        }
9139        #[cfg(feature = "extra-children")]
9140        if !self.extra_children.is_empty() {
9141            return false;
9142        }
9143        true
9144    }
9145}
9146
9147impl ToXml for CTPivotDimension {
9148    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9149        #[allow(unused_mut)]
9150        let mut start = start;
9151        if let Some(ref val) = self.measure {
9152            start.push_attribute(("measure", if *val { "1" } else { "0" }));
9153        }
9154        {
9155            let val = &self.name;
9156            start.push_attribute(("name", val.as_str()));
9157        }
9158        {
9159            let val = &self.unique_name;
9160            start.push_attribute(("uniqueName", val.as_str()));
9161        }
9162        {
9163            let val = &self.caption;
9164            start.push_attribute(("caption", val.as_str()));
9165        }
9166        #[cfg(feature = "extra-attrs")]
9167        for (key, value) in &self.extra_attrs {
9168            start.push_attribute((key.as_str(), value.as_str()));
9169        }
9170        start
9171    }
9172
9173    fn is_empty_element(&self) -> bool {
9174        true
9175    }
9176}
9177
9178impl ToXml for CTMeasureGroups {
9179    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9180        #[allow(unused_mut)]
9181        let mut start = start;
9182        if let Some(ref val) = self.count {
9183            {
9184                let s = val.to_string();
9185                start.push_attribute(("count", s.as_str()));
9186            }
9187        }
9188        #[cfg(feature = "extra-attrs")]
9189        for (key, value) in &self.extra_attrs {
9190            start.push_attribute((key.as_str(), value.as_str()));
9191        }
9192        start
9193    }
9194
9195    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9196        #[cfg(feature = "extra-children")]
9197        let mut extra_iter = self.extra_children.iter().peekable();
9198        #[cfg(feature = "extra-children")]
9199        let mut emit_idx: usize = 0;
9200        for item in &self.measure_group {
9201            #[cfg(feature = "extra-children")]
9202            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9203                extra_iter
9204                    .next()
9205                    .unwrap()
9206                    .node
9207                    .write_to(writer)
9208                    .map_err(SerializeError::from)?;
9209            }
9210            item.write_element("measureGroup", writer)?;
9211            #[cfg(feature = "extra-children")]
9212            {
9213                emit_idx += 1;
9214            }
9215        }
9216        #[cfg(feature = "extra-children")]
9217        for extra in extra_iter {
9218            extra.node.write_to(writer).map_err(SerializeError::from)?;
9219        }
9220        Ok(())
9221    }
9222
9223    fn is_empty_element(&self) -> bool {
9224        if !self.measure_group.is_empty() {
9225            return false;
9226        }
9227        #[cfg(feature = "extra-children")]
9228        if !self.extra_children.is_empty() {
9229            return false;
9230        }
9231        true
9232    }
9233}
9234
9235impl ToXml for CTMeasureDimensionMaps {
9236    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9237        #[allow(unused_mut)]
9238        let mut start = start;
9239        if let Some(ref val) = self.count {
9240            {
9241                let s = val.to_string();
9242                start.push_attribute(("count", s.as_str()));
9243            }
9244        }
9245        #[cfg(feature = "extra-attrs")]
9246        for (key, value) in &self.extra_attrs {
9247            start.push_attribute((key.as_str(), value.as_str()));
9248        }
9249        start
9250    }
9251
9252    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9253        #[cfg(feature = "extra-children")]
9254        let mut extra_iter = self.extra_children.iter().peekable();
9255        #[cfg(feature = "extra-children")]
9256        let mut emit_idx: usize = 0;
9257        for item in &self.map {
9258            #[cfg(feature = "extra-children")]
9259            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9260                extra_iter
9261                    .next()
9262                    .unwrap()
9263                    .node
9264                    .write_to(writer)
9265                    .map_err(SerializeError::from)?;
9266            }
9267            item.write_element("map", writer)?;
9268            #[cfg(feature = "extra-children")]
9269            {
9270                emit_idx += 1;
9271            }
9272        }
9273        #[cfg(feature = "extra-children")]
9274        for extra in extra_iter {
9275            extra.node.write_to(writer).map_err(SerializeError::from)?;
9276        }
9277        Ok(())
9278    }
9279
9280    fn is_empty_element(&self) -> bool {
9281        if !self.map.is_empty() {
9282            return false;
9283        }
9284        #[cfg(feature = "extra-children")]
9285        if !self.extra_children.is_empty() {
9286            return false;
9287        }
9288        true
9289    }
9290}
9291
9292impl ToXml for CTMeasureGroup {
9293    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9294        #[allow(unused_mut)]
9295        let mut start = start;
9296        {
9297            let val = &self.name;
9298            start.push_attribute(("name", val.as_str()));
9299        }
9300        {
9301            let val = &self.caption;
9302            start.push_attribute(("caption", val.as_str()));
9303        }
9304        #[cfg(feature = "extra-attrs")]
9305        for (key, value) in &self.extra_attrs {
9306            start.push_attribute((key.as_str(), value.as_str()));
9307        }
9308        start
9309    }
9310
9311    fn is_empty_element(&self) -> bool {
9312        true
9313    }
9314}
9315
9316impl ToXml for CTMeasureDimensionMap {
9317    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9318        #[allow(unused_mut)]
9319        let mut start = start;
9320        if let Some(ref val) = self.measure_group {
9321            {
9322                let s = val.to_string();
9323                start.push_attribute(("measureGroup", s.as_str()));
9324            }
9325        }
9326        if let Some(ref val) = self.dimension {
9327            {
9328                let s = val.to_string();
9329                start.push_attribute(("dimension", s.as_str()));
9330            }
9331        }
9332        #[cfg(feature = "extra-attrs")]
9333        for (key, value) in &self.extra_attrs {
9334            start.push_attribute((key.as_str(), value.as_str()));
9335        }
9336        start
9337    }
9338
9339    fn is_empty_element(&self) -> bool {
9340        true
9341    }
9342}
9343
9344impl ToXml for CTPivotTableStyle {
9345    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9346        #[allow(unused_mut)]
9347        let mut start = start;
9348        if let Some(ref val) = self.name {
9349            start.push_attribute(("name", val.as_str()));
9350        }
9351        if let Some(ref val) = self.show_row_headers {
9352            start.push_attribute(("showRowHeaders", if *val { "1" } else { "0" }));
9353        }
9354        if let Some(ref val) = self.show_col_headers {
9355            start.push_attribute(("showColHeaders", if *val { "1" } else { "0" }));
9356        }
9357        if let Some(ref val) = self.show_row_stripes {
9358            start.push_attribute(("showRowStripes", if *val { "1" } else { "0" }));
9359        }
9360        if let Some(ref val) = self.show_col_stripes {
9361            start.push_attribute(("showColStripes", if *val { "1" } else { "0" }));
9362        }
9363        if let Some(ref val) = self.show_last_column {
9364            start.push_attribute(("showLastColumn", if *val { "1" } else { "0" }));
9365        }
9366        #[cfg(feature = "extra-attrs")]
9367        for (key, value) in &self.extra_attrs {
9368            start.push_attribute((key.as_str(), value.as_str()));
9369        }
9370        start
9371    }
9372
9373    fn is_empty_element(&self) -> bool {
9374        true
9375    }
9376}
9377
9378impl ToXml for PivotFilters {
9379    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9380        #[allow(unused_mut)]
9381        let mut start = start;
9382        if let Some(ref val) = self.count {
9383            {
9384                let s = val.to_string();
9385                start.push_attribute(("count", s.as_str()));
9386            }
9387        }
9388        #[cfg(feature = "extra-attrs")]
9389        for (key, value) in &self.extra_attrs {
9390            start.push_attribute((key.as_str(), value.as_str()));
9391        }
9392        start
9393    }
9394
9395    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9396        #[cfg(feature = "extra-children")]
9397        let mut extra_iter = self.extra_children.iter().peekable();
9398        #[cfg(feature = "extra-children")]
9399        let mut emit_idx: usize = 0;
9400        for item in &self.filter {
9401            #[cfg(feature = "extra-children")]
9402            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9403                extra_iter
9404                    .next()
9405                    .unwrap()
9406                    .node
9407                    .write_to(writer)
9408                    .map_err(SerializeError::from)?;
9409            }
9410            item.write_element("filter", writer)?;
9411            #[cfg(feature = "extra-children")]
9412            {
9413                emit_idx += 1;
9414            }
9415        }
9416        #[cfg(feature = "extra-children")]
9417        for extra in extra_iter {
9418            extra.node.write_to(writer).map_err(SerializeError::from)?;
9419        }
9420        Ok(())
9421    }
9422
9423    fn is_empty_element(&self) -> bool {
9424        if !self.filter.is_empty() {
9425            return false;
9426        }
9427        #[cfg(feature = "extra-children")]
9428        if !self.extra_children.is_empty() {
9429            return false;
9430        }
9431        true
9432    }
9433}
9434
9435impl ToXml for PivotFilter {
9436    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9437        #[allow(unused_mut)]
9438        let mut start = start;
9439        {
9440            let val = &self.fld;
9441            {
9442                let s = val.to_string();
9443                start.push_attribute(("fld", s.as_str()));
9444            }
9445        }
9446        if let Some(ref val) = self.mp_fld {
9447            {
9448                let s = val.to_string();
9449                start.push_attribute(("mpFld", s.as_str()));
9450            }
9451        }
9452        {
9453            let val = &self.r#type;
9454            {
9455                let s = val.to_string();
9456                start.push_attribute(("type", s.as_str()));
9457            }
9458        }
9459        if let Some(ref val) = self.eval_order {
9460            {
9461                let s = val.to_string();
9462                start.push_attribute(("evalOrder", s.as_str()));
9463            }
9464        }
9465        {
9466            let val = &self.id;
9467            {
9468                let s = val.to_string();
9469                start.push_attribute(("id", s.as_str()));
9470            }
9471        }
9472        if let Some(ref val) = self.i_measure_hier {
9473            {
9474                let s = val.to_string();
9475                start.push_attribute(("iMeasureHier", s.as_str()));
9476            }
9477        }
9478        if let Some(ref val) = self.i_measure_fld {
9479            {
9480                let s = val.to_string();
9481                start.push_attribute(("iMeasureFld", s.as_str()));
9482            }
9483        }
9484        if let Some(ref val) = self.name {
9485            start.push_attribute(("name", val.as_str()));
9486        }
9487        if let Some(ref val) = self.description {
9488            start.push_attribute(("description", val.as_str()));
9489        }
9490        if let Some(ref val) = self.string_value1 {
9491            start.push_attribute(("stringValue1", val.as_str()));
9492        }
9493        if let Some(ref val) = self.string_value2 {
9494            start.push_attribute(("stringValue2", val.as_str()));
9495        }
9496        #[cfg(feature = "extra-attrs")]
9497        for (key, value) in &self.extra_attrs {
9498            start.push_attribute((key.as_str(), value.as_str()));
9499        }
9500        start
9501    }
9502
9503    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9504        #[cfg(feature = "extra-children")]
9505        let mut extra_iter = self.extra_children.iter().peekable();
9506        #[cfg(feature = "extra-children")]
9507        let mut emit_idx: usize = 0;
9508        #[cfg(feature = "extra-children")]
9509        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9510            extra_iter
9511                .next()
9512                .unwrap()
9513                .node
9514                .write_to(writer)
9515                .map_err(SerializeError::from)?;
9516        }
9517        {
9518            let val = &self.auto_filter;
9519            val.write_element("autoFilter", writer)?;
9520        }
9521        #[cfg(feature = "extra-children")]
9522        {
9523            emit_idx += 1;
9524        }
9525        #[cfg(feature = "extra-children")]
9526        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9527            extra_iter
9528                .next()
9529                .unwrap()
9530                .node
9531                .write_to(writer)
9532                .map_err(SerializeError::from)?;
9533        }
9534        if let Some(ref val) = self.extension_list {
9535            val.write_element("extLst", writer)?;
9536        }
9537        #[cfg(feature = "extra-children")]
9538        {
9539            emit_idx += 1;
9540        }
9541        #[cfg(feature = "extra-children")]
9542        for extra in extra_iter {
9543            extra.node.write_to(writer).map_err(SerializeError::from)?;
9544        }
9545        Ok(())
9546    }
9547
9548    fn is_empty_element(&self) -> bool {
9549        false
9550    }
9551}
9552
9553impl ToXml for PivotArea {
9554    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9555        #[allow(unused_mut)]
9556        let mut start = start;
9557        if let Some(ref val) = self.field {
9558            {
9559                let s = val.to_string();
9560                start.push_attribute(("field", s.as_str()));
9561            }
9562        }
9563        if let Some(ref val) = self.r#type {
9564            {
9565                let s = val.to_string();
9566                start.push_attribute(("type", s.as_str()));
9567            }
9568        }
9569        if let Some(ref val) = self.data_only {
9570            start.push_attribute(("dataOnly", if *val { "1" } else { "0" }));
9571        }
9572        if let Some(ref val) = self.label_only {
9573            start.push_attribute(("labelOnly", if *val { "1" } else { "0" }));
9574        }
9575        if let Some(ref val) = self.grand_row {
9576            start.push_attribute(("grandRow", if *val { "1" } else { "0" }));
9577        }
9578        if let Some(ref val) = self.grand_col {
9579            start.push_attribute(("grandCol", if *val { "1" } else { "0" }));
9580        }
9581        if let Some(ref val) = self.cache_index {
9582            start.push_attribute(("cacheIndex", if *val { "1" } else { "0" }));
9583        }
9584        if let Some(ref val) = self.outline {
9585            start.push_attribute(("outline", if *val { "1" } else { "0" }));
9586        }
9587        if let Some(ref val) = self.offset {
9588            start.push_attribute(("offset", val.as_str()));
9589        }
9590        if let Some(ref val) = self.collapsed_levels_are_subtotals {
9591            start.push_attribute(("collapsedLevelsAreSubtotals", if *val { "1" } else { "0" }));
9592        }
9593        if let Some(ref val) = self.axis {
9594            {
9595                let s = val.to_string();
9596                start.push_attribute(("axis", s.as_str()));
9597            }
9598        }
9599        if let Some(ref val) = self.field_position {
9600            {
9601                let s = val.to_string();
9602                start.push_attribute(("fieldPosition", s.as_str()));
9603            }
9604        }
9605        #[cfg(feature = "extra-attrs")]
9606        for (key, value) in &self.extra_attrs {
9607            start.push_attribute((key.as_str(), value.as_str()));
9608        }
9609        start
9610    }
9611
9612    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9613        #[cfg(feature = "extra-children")]
9614        let mut extra_iter = self.extra_children.iter().peekable();
9615        #[cfg(feature = "extra-children")]
9616        let mut emit_idx: usize = 0;
9617        #[cfg(feature = "extra-children")]
9618        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9619            extra_iter
9620                .next()
9621                .unwrap()
9622                .node
9623                .write_to(writer)
9624                .map_err(SerializeError::from)?;
9625        }
9626        if let Some(ref val) = self.references {
9627            val.write_element("references", writer)?;
9628        }
9629        #[cfg(feature = "extra-children")]
9630        {
9631            emit_idx += 1;
9632        }
9633        #[cfg(feature = "extra-children")]
9634        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9635            extra_iter
9636                .next()
9637                .unwrap()
9638                .node
9639                .write_to(writer)
9640                .map_err(SerializeError::from)?;
9641        }
9642        if let Some(ref val) = self.extension_list {
9643            val.write_element("extLst", writer)?;
9644        }
9645        #[cfg(feature = "extra-children")]
9646        {
9647            emit_idx += 1;
9648        }
9649        #[cfg(feature = "extra-children")]
9650        for extra in extra_iter {
9651            extra.node.write_to(writer).map_err(SerializeError::from)?;
9652        }
9653        Ok(())
9654    }
9655
9656    fn is_empty_element(&self) -> bool {
9657        if self.references.is_some() {
9658            return false;
9659        }
9660        if self.extension_list.is_some() {
9661            return false;
9662        }
9663        #[cfg(feature = "extra-children")]
9664        if !self.extra_children.is_empty() {
9665            return false;
9666        }
9667        true
9668    }
9669}
9670
9671impl ToXml for CTPivotAreaReferences {
9672    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9673        #[allow(unused_mut)]
9674        let mut start = start;
9675        if let Some(ref val) = self.count {
9676            {
9677                let s = val.to_string();
9678                start.push_attribute(("count", s.as_str()));
9679            }
9680        }
9681        #[cfg(feature = "extra-attrs")]
9682        for (key, value) in &self.extra_attrs {
9683            start.push_attribute((key.as_str(), value.as_str()));
9684        }
9685        start
9686    }
9687
9688    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9689        #[cfg(feature = "extra-children")]
9690        let mut extra_iter = self.extra_children.iter().peekable();
9691        #[cfg(feature = "extra-children")]
9692        let mut emit_idx: usize = 0;
9693        for item in &self.reference {
9694            #[cfg(feature = "extra-children")]
9695            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9696                extra_iter
9697                    .next()
9698                    .unwrap()
9699                    .node
9700                    .write_to(writer)
9701                    .map_err(SerializeError::from)?;
9702            }
9703            item.write_element("reference", writer)?;
9704            #[cfg(feature = "extra-children")]
9705            {
9706                emit_idx += 1;
9707            }
9708        }
9709        #[cfg(feature = "extra-children")]
9710        for extra in extra_iter {
9711            extra.node.write_to(writer).map_err(SerializeError::from)?;
9712        }
9713        Ok(())
9714    }
9715
9716    fn is_empty_element(&self) -> bool {
9717        if !self.reference.is_empty() {
9718            return false;
9719        }
9720        #[cfg(feature = "extra-children")]
9721        if !self.extra_children.is_empty() {
9722            return false;
9723        }
9724        true
9725    }
9726}
9727
9728impl ToXml for CTPivotAreaReference {
9729    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9730        #[allow(unused_mut)]
9731        let mut start = start;
9732        if let Some(ref val) = self.field {
9733            {
9734                let s = val.to_string();
9735                start.push_attribute(("field", s.as_str()));
9736            }
9737        }
9738        if let Some(ref val) = self.count {
9739            {
9740                let s = val.to_string();
9741                start.push_attribute(("count", s.as_str()));
9742            }
9743        }
9744        if let Some(ref val) = self.selected {
9745            start.push_attribute(("selected", if *val { "1" } else { "0" }));
9746        }
9747        if let Some(ref val) = self.by_position {
9748            start.push_attribute(("byPosition", if *val { "1" } else { "0" }));
9749        }
9750        if let Some(ref val) = self.relative {
9751            start.push_attribute(("relative", if *val { "1" } else { "0" }));
9752        }
9753        if let Some(ref val) = self.default_subtotal {
9754            start.push_attribute(("defaultSubtotal", if *val { "1" } else { "0" }));
9755        }
9756        if let Some(ref val) = self.sum_subtotal {
9757            start.push_attribute(("sumSubtotal", if *val { "1" } else { "0" }));
9758        }
9759        if let Some(ref val) = self.count_a_subtotal {
9760            start.push_attribute(("countASubtotal", if *val { "1" } else { "0" }));
9761        }
9762        if let Some(ref val) = self.avg_subtotal {
9763            start.push_attribute(("avgSubtotal", if *val { "1" } else { "0" }));
9764        }
9765        if let Some(ref val) = self.max_subtotal {
9766            start.push_attribute(("maxSubtotal", if *val { "1" } else { "0" }));
9767        }
9768        if let Some(ref val) = self.min_subtotal {
9769            start.push_attribute(("minSubtotal", if *val { "1" } else { "0" }));
9770        }
9771        if let Some(ref val) = self.product_subtotal {
9772            start.push_attribute(("productSubtotal", if *val { "1" } else { "0" }));
9773        }
9774        if let Some(ref val) = self.count_subtotal {
9775            start.push_attribute(("countSubtotal", if *val { "1" } else { "0" }));
9776        }
9777        if let Some(ref val) = self.std_dev_subtotal {
9778            start.push_attribute(("stdDevSubtotal", if *val { "1" } else { "0" }));
9779        }
9780        if let Some(ref val) = self.std_dev_p_subtotal {
9781            start.push_attribute(("stdDevPSubtotal", if *val { "1" } else { "0" }));
9782        }
9783        if let Some(ref val) = self.var_subtotal {
9784            start.push_attribute(("varSubtotal", if *val { "1" } else { "0" }));
9785        }
9786        if let Some(ref val) = self.var_p_subtotal {
9787            start.push_attribute(("varPSubtotal", if *val { "1" } else { "0" }));
9788        }
9789        #[cfg(feature = "extra-attrs")]
9790        for (key, value) in &self.extra_attrs {
9791            start.push_attribute((key.as_str(), value.as_str()));
9792        }
9793        start
9794    }
9795
9796    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9797        #[cfg(feature = "extra-children")]
9798        let mut extra_iter = self.extra_children.iter().peekable();
9799        #[cfg(feature = "extra-children")]
9800        let mut emit_idx: usize = 0;
9801        for item in &self.x {
9802            #[cfg(feature = "extra-children")]
9803            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9804                extra_iter
9805                    .next()
9806                    .unwrap()
9807                    .node
9808                    .write_to(writer)
9809                    .map_err(SerializeError::from)?;
9810            }
9811            item.write_element("x", writer)?;
9812            #[cfg(feature = "extra-children")]
9813            {
9814                emit_idx += 1;
9815            }
9816        }
9817        #[cfg(feature = "extra-children")]
9818        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9819            extra_iter
9820                .next()
9821                .unwrap()
9822                .node
9823                .write_to(writer)
9824                .map_err(SerializeError::from)?;
9825        }
9826        if let Some(ref val) = self.extension_list {
9827            val.write_element("extLst", writer)?;
9828        }
9829        #[cfg(feature = "extra-children")]
9830        {
9831            emit_idx += 1;
9832        }
9833        #[cfg(feature = "extra-children")]
9834        for extra in extra_iter {
9835            extra.node.write_to(writer).map_err(SerializeError::from)?;
9836        }
9837        Ok(())
9838    }
9839
9840    fn is_empty_element(&self) -> bool {
9841        if !self.x.is_empty() {
9842            return false;
9843        }
9844        if self.extension_list.is_some() {
9845            return false;
9846        }
9847        #[cfg(feature = "extra-children")]
9848        if !self.extra_children.is_empty() {
9849            return false;
9850        }
9851        true
9852    }
9853}
9854
9855impl ToXml for CTIndex {
9856    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9857        #[allow(unused_mut)]
9858        let mut start = start;
9859        {
9860            let val = &self.value;
9861            {
9862                let s = val.to_string();
9863                start.push_attribute(("v", s.as_str()));
9864            }
9865        }
9866        #[cfg(feature = "extra-attrs")]
9867        for (key, value) in &self.extra_attrs {
9868            start.push_attribute((key.as_str(), value.as_str()));
9869        }
9870        start
9871    }
9872
9873    fn is_empty_element(&self) -> bool {
9874        true
9875    }
9876}
9877
9878impl ToXml for QueryTable {
9879    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
9880        #[allow(unused_mut)]
9881        let mut start = start;
9882        {
9883            let val = &self.name;
9884            start.push_attribute(("name", val.as_str()));
9885        }
9886        if let Some(ref val) = self.headers {
9887            start.push_attribute(("headers", if *val { "1" } else { "0" }));
9888        }
9889        if let Some(ref val) = self.row_numbers {
9890            start.push_attribute(("rowNumbers", if *val { "1" } else { "0" }));
9891        }
9892        if let Some(ref val) = self.disable_refresh {
9893            start.push_attribute(("disableRefresh", if *val { "1" } else { "0" }));
9894        }
9895        if let Some(ref val) = self.background_refresh {
9896            start.push_attribute(("backgroundRefresh", if *val { "1" } else { "0" }));
9897        }
9898        if let Some(ref val) = self.first_background_refresh {
9899            start.push_attribute(("firstBackgroundRefresh", if *val { "1" } else { "0" }));
9900        }
9901        if let Some(ref val) = self.refresh_on_load {
9902            start.push_attribute(("refreshOnLoad", if *val { "1" } else { "0" }));
9903        }
9904        if let Some(ref val) = self.grow_shrink_type {
9905            {
9906                let s = val.to_string();
9907                start.push_attribute(("growShrinkType", s.as_str()));
9908            }
9909        }
9910        if let Some(ref val) = self.fill_formulas {
9911            start.push_attribute(("fillFormulas", if *val { "1" } else { "0" }));
9912        }
9913        if let Some(ref val) = self.remove_data_on_save {
9914            start.push_attribute(("removeDataOnSave", if *val { "1" } else { "0" }));
9915        }
9916        if let Some(ref val) = self.disable_edit {
9917            start.push_attribute(("disableEdit", if *val { "1" } else { "0" }));
9918        }
9919        if let Some(ref val) = self.preserve_formatting {
9920            start.push_attribute(("preserveFormatting", if *val { "1" } else { "0" }));
9921        }
9922        if let Some(ref val) = self.adjust_column_width {
9923            start.push_attribute(("adjustColumnWidth", if *val { "1" } else { "0" }));
9924        }
9925        if let Some(ref val) = self.intermediate {
9926            start.push_attribute(("intermediate", if *val { "1" } else { "0" }));
9927        }
9928        {
9929            let val = &self.connection_id;
9930            {
9931                let s = val.to_string();
9932                start.push_attribute(("connectionId", s.as_str()));
9933            }
9934        }
9935        if let Some(ref val) = self.auto_format_id {
9936            {
9937                let s = val.to_string();
9938                start.push_attribute(("autoFormatId", s.as_str()));
9939            }
9940        }
9941        if let Some(ref val) = self.apply_number_formats {
9942            start.push_attribute(("applyNumberFormats", if *val { "1" } else { "0" }));
9943        }
9944        if let Some(ref val) = self.apply_border_formats {
9945            start.push_attribute(("applyBorderFormats", if *val { "1" } else { "0" }));
9946        }
9947        if let Some(ref val) = self.apply_font_formats {
9948            start.push_attribute(("applyFontFormats", if *val { "1" } else { "0" }));
9949        }
9950        if let Some(ref val) = self.apply_pattern_formats {
9951            start.push_attribute(("applyPatternFormats", if *val { "1" } else { "0" }));
9952        }
9953        if let Some(ref val) = self.apply_alignment_formats {
9954            start.push_attribute(("applyAlignmentFormats", if *val { "1" } else { "0" }));
9955        }
9956        if let Some(ref val) = self.apply_width_height_formats {
9957            start.push_attribute(("applyWidthHeightFormats", if *val { "1" } else { "0" }));
9958        }
9959        #[cfg(feature = "extra-attrs")]
9960        for (key, value) in &self.extra_attrs {
9961            start.push_attribute((key.as_str(), value.as_str()));
9962        }
9963        start
9964    }
9965
9966    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
9967        #[cfg(feature = "extra-children")]
9968        let mut extra_iter = self.extra_children.iter().peekable();
9969        #[cfg(feature = "extra-children")]
9970        let mut emit_idx: usize = 0;
9971        #[cfg(feature = "extra-children")]
9972        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9973            extra_iter
9974                .next()
9975                .unwrap()
9976                .node
9977                .write_to(writer)
9978                .map_err(SerializeError::from)?;
9979        }
9980        if let Some(ref val) = self.query_table_refresh {
9981            val.write_element("queryTableRefresh", writer)?;
9982        }
9983        #[cfg(feature = "extra-children")]
9984        {
9985            emit_idx += 1;
9986        }
9987        #[cfg(feature = "extra-children")]
9988        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
9989            extra_iter
9990                .next()
9991                .unwrap()
9992                .node
9993                .write_to(writer)
9994                .map_err(SerializeError::from)?;
9995        }
9996        if let Some(ref val) = self.extension_list {
9997            val.write_element("extLst", writer)?;
9998        }
9999        #[cfg(feature = "extra-children")]
10000        {
10001            emit_idx += 1;
10002        }
10003        #[cfg(feature = "extra-children")]
10004        for extra in extra_iter {
10005            extra.node.write_to(writer).map_err(SerializeError::from)?;
10006        }
10007        Ok(())
10008    }
10009
10010    fn is_empty_element(&self) -> bool {
10011        if self.query_table_refresh.is_some() {
10012            return false;
10013        }
10014        if self.extension_list.is_some() {
10015            return false;
10016        }
10017        #[cfg(feature = "extra-children")]
10018        if !self.extra_children.is_empty() {
10019            return false;
10020        }
10021        true
10022    }
10023}
10024
10025impl ToXml for QueryTableRefresh {
10026    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
10027        #[allow(unused_mut)]
10028        let mut start = start;
10029        if let Some(ref val) = self.preserve_sort_filter_layout {
10030            start.push_attribute(("preserveSortFilterLayout", if *val { "1" } else { "0" }));
10031        }
10032        if let Some(ref val) = self.field_id_wrapped {
10033            start.push_attribute(("fieldIdWrapped", if *val { "1" } else { "0" }));
10034        }
10035        if let Some(ref val) = self.headers_in_last_refresh {
10036            start.push_attribute(("headersInLastRefresh", if *val { "1" } else { "0" }));
10037        }
10038        if let Some(ref val) = self.minimum_version {
10039            {
10040                let s = val.to_string();
10041                start.push_attribute(("minimumVersion", s.as_str()));
10042            }
10043        }
10044        if let Some(ref val) = self.next_id {
10045            {
10046                let s = val.to_string();
10047                start.push_attribute(("nextId", s.as_str()));
10048            }
10049        }
10050        if let Some(ref val) = self.unbound_columns_left {
10051            {
10052                let s = val.to_string();
10053                start.push_attribute(("unboundColumnsLeft", s.as_str()));
10054            }
10055        }
10056        if let Some(ref val) = self.unbound_columns_right {
10057            {
10058                let s = val.to_string();
10059                start.push_attribute(("unboundColumnsRight", s.as_str()));
10060            }
10061        }
10062        #[cfg(feature = "extra-attrs")]
10063        for (key, value) in &self.extra_attrs {
10064            start.push_attribute((key.as_str(), value.as_str()));
10065        }
10066        start
10067    }
10068
10069    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
10070        #[cfg(feature = "extra-children")]
10071        let mut extra_iter = self.extra_children.iter().peekable();
10072        #[cfg(feature = "extra-children")]
10073        let mut emit_idx: usize = 0;
10074        #[cfg(feature = "extra-children")]
10075        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10076            extra_iter
10077                .next()
10078                .unwrap()
10079                .node
10080                .write_to(writer)
10081                .map_err(SerializeError::from)?;
10082        }
10083        {
10084            let val = &self.query_table_fields;
10085            val.write_element("queryTableFields", writer)?;
10086        }
10087        #[cfg(feature = "extra-children")]
10088        {
10089            emit_idx += 1;
10090        }
10091        #[cfg(feature = "extra-children")]
10092        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10093            extra_iter
10094                .next()
10095                .unwrap()
10096                .node
10097                .write_to(writer)
10098                .map_err(SerializeError::from)?;
10099        }
10100        if let Some(ref val) = self.query_table_deleted_fields {
10101            val.write_element("queryTableDeletedFields", writer)?;
10102        }
10103        #[cfg(feature = "extra-children")]
10104        {
10105            emit_idx += 1;
10106        }
10107        #[cfg(feature = "extra-children")]
10108        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10109            extra_iter
10110                .next()
10111                .unwrap()
10112                .node
10113                .write_to(writer)
10114                .map_err(SerializeError::from)?;
10115        }
10116        if let Some(ref val) = self.sort_state {
10117            val.write_element("sortState", writer)?;
10118        }
10119        #[cfg(feature = "extra-children")]
10120        {
10121            emit_idx += 1;
10122        }
10123        #[cfg(feature = "extra-children")]
10124        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10125            extra_iter
10126                .next()
10127                .unwrap()
10128                .node
10129                .write_to(writer)
10130                .map_err(SerializeError::from)?;
10131        }
10132        if let Some(ref val) = self.extension_list {
10133            val.write_element("extLst", writer)?;
10134        }
10135        #[cfg(feature = "extra-children")]
10136        {
10137            emit_idx += 1;
10138        }
10139        #[cfg(feature = "extra-children")]
10140        for extra in extra_iter {
10141            extra.node.write_to(writer).map_err(SerializeError::from)?;
10142        }
10143        Ok(())
10144    }
10145
10146    fn is_empty_element(&self) -> bool {
10147        false
10148    }
10149}
10150
10151impl ToXml for QueryTableDeletedFields {
10152    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
10153        #[allow(unused_mut)]
10154        let mut start = start;
10155        if let Some(ref val) = self.count {
10156            {
10157                let s = val.to_string();
10158                start.push_attribute(("count", s.as_str()));
10159            }
10160        }
10161        #[cfg(feature = "extra-attrs")]
10162        for (key, value) in &self.extra_attrs {
10163            start.push_attribute((key.as_str(), value.as_str()));
10164        }
10165        start
10166    }
10167
10168    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
10169        #[cfg(feature = "extra-children")]
10170        let mut extra_iter = self.extra_children.iter().peekable();
10171        #[cfg(feature = "extra-children")]
10172        let mut emit_idx: usize = 0;
10173        for item in &self.deleted_field {
10174            #[cfg(feature = "extra-children")]
10175            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10176                extra_iter
10177                    .next()
10178                    .unwrap()
10179                    .node
10180                    .write_to(writer)
10181                    .map_err(SerializeError::from)?;
10182            }
10183            item.write_element("deletedField", writer)?;
10184            #[cfg(feature = "extra-children")]
10185            {
10186                emit_idx += 1;
10187            }
10188        }
10189        #[cfg(feature = "extra-children")]
10190        for extra in extra_iter {
10191            extra.node.write_to(writer).map_err(SerializeError::from)?;
10192        }
10193        Ok(())
10194    }
10195
10196    fn is_empty_element(&self) -> bool {
10197        if !self.deleted_field.is_empty() {
10198            return false;
10199        }
10200        #[cfg(feature = "extra-children")]
10201        if !self.extra_children.is_empty() {
10202            return false;
10203        }
10204        true
10205    }
10206}
10207
10208impl ToXml for CTDeletedField {
10209    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
10210        #[allow(unused_mut)]
10211        let mut start = start;
10212        {
10213            let val = &self.name;
10214            start.push_attribute(("name", val.as_str()));
10215        }
10216        #[cfg(feature = "extra-attrs")]
10217        for (key, value) in &self.extra_attrs {
10218            start.push_attribute((key.as_str(), value.as_str()));
10219        }
10220        start
10221    }
10222
10223    fn is_empty_element(&self) -> bool {
10224        true
10225    }
10226}
10227
10228impl ToXml for QueryTableFields {
10229    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
10230        #[allow(unused_mut)]
10231        let mut start = start;
10232        if let Some(ref val) = self.count {
10233            {
10234                let s = val.to_string();
10235                start.push_attribute(("count", s.as_str()));
10236            }
10237        }
10238        #[cfg(feature = "extra-attrs")]
10239        for (key, value) in &self.extra_attrs {
10240            start.push_attribute((key.as_str(), value.as_str()));
10241        }
10242        start
10243    }
10244
10245    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
10246        #[cfg(feature = "extra-children")]
10247        let mut extra_iter = self.extra_children.iter().peekable();
10248        #[cfg(feature = "extra-children")]
10249        let mut emit_idx: usize = 0;
10250        for item in &self.query_table_field {
10251            #[cfg(feature = "extra-children")]
10252            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10253                extra_iter
10254                    .next()
10255                    .unwrap()
10256                    .node
10257                    .write_to(writer)
10258                    .map_err(SerializeError::from)?;
10259            }
10260            item.write_element("queryTableField", writer)?;
10261            #[cfg(feature = "extra-children")]
10262            {
10263                emit_idx += 1;
10264            }
10265        }
10266        #[cfg(feature = "extra-children")]
10267        for extra in extra_iter {
10268            extra.node.write_to(writer).map_err(SerializeError::from)?;
10269        }
10270        Ok(())
10271    }
10272
10273    fn is_empty_element(&self) -> bool {
10274        if !self.query_table_field.is_empty() {
10275            return false;
10276        }
10277        #[cfg(feature = "extra-children")]
10278        if !self.extra_children.is_empty() {
10279            return false;
10280        }
10281        true
10282    }
10283}
10284
10285impl ToXml for QueryTableField {
10286    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
10287        #[allow(unused_mut)]
10288        let mut start = start;
10289        {
10290            let val = &self.id;
10291            {
10292                let s = val.to_string();
10293                start.push_attribute(("id", s.as_str()));
10294            }
10295        }
10296        if let Some(ref val) = self.name {
10297            start.push_attribute(("name", val.as_str()));
10298        }
10299        if let Some(ref val) = self.data_bound {
10300            start.push_attribute(("dataBound", if *val { "1" } else { "0" }));
10301        }
10302        if let Some(ref val) = self.row_numbers {
10303            start.push_attribute(("rowNumbers", if *val { "1" } else { "0" }));
10304        }
10305        if let Some(ref val) = self.fill_formulas {
10306            start.push_attribute(("fillFormulas", if *val { "1" } else { "0" }));
10307        }
10308        if let Some(ref val) = self.clipped {
10309            start.push_attribute(("clipped", if *val { "1" } else { "0" }));
10310        }
10311        if let Some(ref val) = self.table_column_id {
10312            {
10313                let s = val.to_string();
10314                start.push_attribute(("tableColumnId", s.as_str()));
10315            }
10316        }
10317        #[cfg(feature = "extra-attrs")]
10318        for (key, value) in &self.extra_attrs {
10319            start.push_attribute((key.as_str(), value.as_str()));
10320        }
10321        start
10322    }
10323
10324    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
10325        #[cfg(feature = "extra-children")]
10326        let mut extra_iter = self.extra_children.iter().peekable();
10327        #[cfg(feature = "extra-children")]
10328        let mut emit_idx: usize = 0;
10329        #[cfg(feature = "extra-children")]
10330        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10331            extra_iter
10332                .next()
10333                .unwrap()
10334                .node
10335                .write_to(writer)
10336                .map_err(SerializeError::from)?;
10337        }
10338        if let Some(ref val) = self.extension_list {
10339            val.write_element("extLst", writer)?;
10340        }
10341        #[cfg(feature = "extra-children")]
10342        {
10343            emit_idx += 1;
10344        }
10345        #[cfg(feature = "extra-children")]
10346        for extra in extra_iter {
10347            extra.node.write_to(writer).map_err(SerializeError::from)?;
10348        }
10349        Ok(())
10350    }
10351
10352    fn is_empty_element(&self) -> bool {
10353        if self.extension_list.is_some() {
10354            return false;
10355        }
10356        #[cfg(feature = "extra-children")]
10357        if !self.extra_children.is_empty() {
10358            return false;
10359        }
10360        true
10361    }
10362}
10363
10364impl ToXml for SharedStrings {
10365    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
10366        #[allow(unused_mut)]
10367        let mut start = start;
10368        if let Some(ref val) = self.count {
10369            {
10370                let s = val.to_string();
10371                start.push_attribute(("count", s.as_str()));
10372            }
10373        }
10374        if let Some(ref val) = self.unique_count {
10375            {
10376                let s = val.to_string();
10377                start.push_attribute(("uniqueCount", s.as_str()));
10378            }
10379        }
10380        #[cfg(feature = "extra-attrs")]
10381        for (key, value) in &self.extra_attrs {
10382            start.push_attribute((key.as_str(), value.as_str()));
10383        }
10384        start
10385    }
10386
10387    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
10388        #[cfg(feature = "extra-children")]
10389        let mut extra_iter = self.extra_children.iter().peekable();
10390        #[cfg(feature = "extra-children")]
10391        let mut emit_idx: usize = 0;
10392        for item in &self.si {
10393            #[cfg(feature = "extra-children")]
10394            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10395                extra_iter
10396                    .next()
10397                    .unwrap()
10398                    .node
10399                    .write_to(writer)
10400                    .map_err(SerializeError::from)?;
10401            }
10402            item.write_element("si", writer)?;
10403            #[cfg(feature = "extra-children")]
10404            {
10405                emit_idx += 1;
10406            }
10407        }
10408        #[cfg(feature = "extra-children")]
10409        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10410            extra_iter
10411                .next()
10412                .unwrap()
10413                .node
10414                .write_to(writer)
10415                .map_err(SerializeError::from)?;
10416        }
10417        if let Some(ref val) = self.extension_list {
10418            val.write_element("extLst", writer)?;
10419        }
10420        #[cfg(feature = "extra-children")]
10421        {
10422            emit_idx += 1;
10423        }
10424        #[cfg(feature = "extra-children")]
10425        for extra in extra_iter {
10426            extra.node.write_to(writer).map_err(SerializeError::from)?;
10427        }
10428        Ok(())
10429    }
10430
10431    fn is_empty_element(&self) -> bool {
10432        if !self.si.is_empty() {
10433            return false;
10434        }
10435        if self.extension_list.is_some() {
10436            return false;
10437        }
10438        #[cfg(feature = "extra-children")]
10439        if !self.extra_children.is_empty() {
10440            return false;
10441        }
10442        true
10443    }
10444}
10445
10446impl ToXml for PhoneticRun {
10447    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
10448        #[allow(unused_mut)]
10449        let mut start = start;
10450        {
10451            let val = &self.sb;
10452            {
10453                let s = val.to_string();
10454                start.push_attribute(("sb", s.as_str()));
10455            }
10456        }
10457        {
10458            let val = &self.eb;
10459            {
10460                let s = val.to_string();
10461                start.push_attribute(("eb", s.as_str()));
10462            }
10463        }
10464        #[cfg(feature = "extra-attrs")]
10465        for (key, value) in &self.extra_attrs {
10466            start.push_attribute((key.as_str(), value.as_str()));
10467        }
10468        start
10469    }
10470
10471    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
10472        #[cfg(feature = "extra-children")]
10473        let mut extra_iter = self.extra_children.iter().peekable();
10474        #[cfg(feature = "extra-children")]
10475        let mut emit_idx: usize = 0;
10476        #[cfg(feature = "extra-children")]
10477        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10478            extra_iter
10479                .next()
10480                .unwrap()
10481                .node
10482                .write_to(writer)
10483                .map_err(SerializeError::from)?;
10484        }
10485        {
10486            let val = &self.cell_type;
10487            {
10488                let start = BytesStart::new("t");
10489                writer.write_event(Event::Start(start))?;
10490                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
10491                writer.write_event(Event::End(BytesEnd::new("t")))?;
10492            }
10493        }
10494        #[cfg(feature = "extra-children")]
10495        {
10496            emit_idx += 1;
10497        }
10498        #[cfg(feature = "extra-children")]
10499        for extra in extra_iter {
10500            extra.node.write_to(writer).map_err(SerializeError::from)?;
10501        }
10502        Ok(())
10503    }
10504
10505    fn is_empty_element(&self) -> bool {
10506        false
10507    }
10508}
10509
10510impl ToXml for RichTextElement {
10511    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
10512        #[cfg(feature = "extra-children")]
10513        let mut extra_iter = self.extra_children.iter().peekable();
10514        #[cfg(feature = "extra-children")]
10515        let mut emit_idx: usize = 0;
10516        #[cfg(feature = "extra-children")]
10517        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10518            extra_iter
10519                .next()
10520                .unwrap()
10521                .node
10522                .write_to(writer)
10523                .map_err(SerializeError::from)?;
10524        }
10525        if let Some(ref val) = self.r_pr {
10526            val.write_element("rPr", writer)?;
10527        }
10528        #[cfg(feature = "extra-children")]
10529        {
10530            emit_idx += 1;
10531        }
10532        #[cfg(feature = "extra-children")]
10533        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10534            extra_iter
10535                .next()
10536                .unwrap()
10537                .node
10538                .write_to(writer)
10539                .map_err(SerializeError::from)?;
10540        }
10541        {
10542            let val = &self.cell_type;
10543            {
10544                let start = BytesStart::new("t");
10545                writer.write_event(Event::Start(start))?;
10546                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
10547                writer.write_event(Event::End(BytesEnd::new("t")))?;
10548            }
10549        }
10550        #[cfg(feature = "extra-children")]
10551        {
10552            emit_idx += 1;
10553        }
10554        #[cfg(feature = "extra-children")]
10555        for extra in extra_iter {
10556            extra.node.write_to(writer).map_err(SerializeError::from)?;
10557        }
10558        Ok(())
10559    }
10560
10561    fn is_empty_element(&self) -> bool {
10562        if self.r_pr.is_some() {
10563            return false;
10564        }
10565        false
10566    }
10567}
10568
10569impl ToXml for RichTextRunProperties {
10570    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
10571        #[cfg(feature = "extra-children")]
10572        let mut extra_iter = self.extra_children.iter().peekable();
10573        #[cfg(feature = "extra-children")]
10574        let mut emit_idx: usize = 0;
10575        #[cfg(feature = "extra-children")]
10576        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10577            extra_iter
10578                .next()
10579                .unwrap()
10580                .node
10581                .write_to(writer)
10582                .map_err(SerializeError::from)?;
10583        }
10584        if let Some(ref val) = self.r_font {
10585            val.write_element("rFont", writer)?;
10586        }
10587        #[cfg(feature = "extra-children")]
10588        {
10589            emit_idx += 1;
10590        }
10591        #[cfg(feature = "extra-children")]
10592        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10593            extra_iter
10594                .next()
10595                .unwrap()
10596                .node
10597                .write_to(writer)
10598                .map_err(SerializeError::from)?;
10599        }
10600        if let Some(ref val) = self.charset {
10601            val.write_element("charset", writer)?;
10602        }
10603        #[cfg(feature = "extra-children")]
10604        {
10605            emit_idx += 1;
10606        }
10607        #[cfg(feature = "extra-children")]
10608        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10609            extra_iter
10610                .next()
10611                .unwrap()
10612                .node
10613                .write_to(writer)
10614                .map_err(SerializeError::from)?;
10615        }
10616        if let Some(ref val) = self.family {
10617            val.write_element("family", writer)?;
10618        }
10619        #[cfg(feature = "extra-children")]
10620        {
10621            emit_idx += 1;
10622        }
10623        #[cfg(feature = "extra-children")]
10624        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10625            extra_iter
10626                .next()
10627                .unwrap()
10628                .node
10629                .write_to(writer)
10630                .map_err(SerializeError::from)?;
10631        }
10632        if let Some(ref val) = self.b {
10633            val.write_element("b", writer)?;
10634        }
10635        #[cfg(feature = "extra-children")]
10636        {
10637            emit_idx += 1;
10638        }
10639        #[cfg(feature = "extra-children")]
10640        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10641            extra_iter
10642                .next()
10643                .unwrap()
10644                .node
10645                .write_to(writer)
10646                .map_err(SerializeError::from)?;
10647        }
10648        if let Some(ref val) = self.i {
10649            val.write_element("i", writer)?;
10650        }
10651        #[cfg(feature = "extra-children")]
10652        {
10653            emit_idx += 1;
10654        }
10655        #[cfg(feature = "extra-children")]
10656        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10657            extra_iter
10658                .next()
10659                .unwrap()
10660                .node
10661                .write_to(writer)
10662                .map_err(SerializeError::from)?;
10663        }
10664        if let Some(ref val) = self.strike {
10665            val.write_element("strike", writer)?;
10666        }
10667        #[cfg(feature = "extra-children")]
10668        {
10669            emit_idx += 1;
10670        }
10671        #[cfg(feature = "extra-children")]
10672        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10673            extra_iter
10674                .next()
10675                .unwrap()
10676                .node
10677                .write_to(writer)
10678                .map_err(SerializeError::from)?;
10679        }
10680        if let Some(ref val) = self.outline {
10681            val.write_element("outline", writer)?;
10682        }
10683        #[cfg(feature = "extra-children")]
10684        {
10685            emit_idx += 1;
10686        }
10687        #[cfg(feature = "extra-children")]
10688        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10689            extra_iter
10690                .next()
10691                .unwrap()
10692                .node
10693                .write_to(writer)
10694                .map_err(SerializeError::from)?;
10695        }
10696        if let Some(ref val) = self.shadow {
10697            val.write_element("shadow", writer)?;
10698        }
10699        #[cfg(feature = "extra-children")]
10700        {
10701            emit_idx += 1;
10702        }
10703        #[cfg(feature = "extra-children")]
10704        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10705            extra_iter
10706                .next()
10707                .unwrap()
10708                .node
10709                .write_to(writer)
10710                .map_err(SerializeError::from)?;
10711        }
10712        if let Some(ref val) = self.condense {
10713            val.write_element("condense", writer)?;
10714        }
10715        #[cfg(feature = "extra-children")]
10716        {
10717            emit_idx += 1;
10718        }
10719        #[cfg(feature = "extra-children")]
10720        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10721            extra_iter
10722                .next()
10723                .unwrap()
10724                .node
10725                .write_to(writer)
10726                .map_err(SerializeError::from)?;
10727        }
10728        if let Some(ref val) = self.extend {
10729            val.write_element("extend", writer)?;
10730        }
10731        #[cfg(feature = "extra-children")]
10732        {
10733            emit_idx += 1;
10734        }
10735        #[cfg(feature = "extra-children")]
10736        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10737            extra_iter
10738                .next()
10739                .unwrap()
10740                .node
10741                .write_to(writer)
10742                .map_err(SerializeError::from)?;
10743        }
10744        if let Some(ref val) = self.color {
10745            val.write_element("color", writer)?;
10746        }
10747        #[cfg(feature = "extra-children")]
10748        {
10749            emit_idx += 1;
10750        }
10751        #[cfg(feature = "extra-children")]
10752        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10753            extra_iter
10754                .next()
10755                .unwrap()
10756                .node
10757                .write_to(writer)
10758                .map_err(SerializeError::from)?;
10759        }
10760        if let Some(ref val) = self.sz {
10761            val.write_element("sz", writer)?;
10762        }
10763        #[cfg(feature = "extra-children")]
10764        {
10765            emit_idx += 1;
10766        }
10767        #[cfg(feature = "extra-children")]
10768        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10769            extra_iter
10770                .next()
10771                .unwrap()
10772                .node
10773                .write_to(writer)
10774                .map_err(SerializeError::from)?;
10775        }
10776        if let Some(ref val) = self.u {
10777            val.write_element("u", writer)?;
10778        }
10779        #[cfg(feature = "extra-children")]
10780        {
10781            emit_idx += 1;
10782        }
10783        #[cfg(feature = "extra-children")]
10784        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10785            extra_iter
10786                .next()
10787                .unwrap()
10788                .node
10789                .write_to(writer)
10790                .map_err(SerializeError::from)?;
10791        }
10792        if let Some(ref val) = self.vert_align {
10793            val.write_element("vertAlign", writer)?;
10794        }
10795        #[cfg(feature = "extra-children")]
10796        {
10797            emit_idx += 1;
10798        }
10799        #[cfg(feature = "extra-children")]
10800        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10801            extra_iter
10802                .next()
10803                .unwrap()
10804                .node
10805                .write_to(writer)
10806                .map_err(SerializeError::from)?;
10807        }
10808        if let Some(ref val) = self.scheme {
10809            val.write_element("scheme", writer)?;
10810        }
10811        #[cfg(feature = "extra-children")]
10812        {
10813            emit_idx += 1;
10814        }
10815        #[cfg(feature = "extra-children")]
10816        for extra in extra_iter {
10817            extra.node.write_to(writer).map_err(SerializeError::from)?;
10818        }
10819        Ok(())
10820    }
10821
10822    fn is_empty_element(&self) -> bool {
10823        if self.r_font.is_some() {
10824            return false;
10825        }
10826        if self.charset.is_some() {
10827            return false;
10828        }
10829        if self.family.is_some() {
10830            return false;
10831        }
10832        if self.b.is_some() {
10833            return false;
10834        }
10835        if self.i.is_some() {
10836            return false;
10837        }
10838        if self.strike.is_some() {
10839            return false;
10840        }
10841        if self.outline.is_some() {
10842            return false;
10843        }
10844        if self.shadow.is_some() {
10845            return false;
10846        }
10847        if self.condense.is_some() {
10848            return false;
10849        }
10850        if self.extend.is_some() {
10851            return false;
10852        }
10853        if self.color.is_some() {
10854            return false;
10855        }
10856        if self.sz.is_some() {
10857            return false;
10858        }
10859        if self.u.is_some() {
10860            return false;
10861        }
10862        if self.vert_align.is_some() {
10863            return false;
10864        }
10865        if self.scheme.is_some() {
10866            return false;
10867        }
10868        #[cfg(feature = "extra-children")]
10869        if !self.extra_children.is_empty() {
10870            return false;
10871        }
10872        true
10873    }
10874}
10875
10876impl ToXml for RichString {
10877    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
10878        #[cfg(feature = "extra-children")]
10879        let mut extra_iter = self.extra_children.iter().peekable();
10880        #[cfg(feature = "extra-children")]
10881        let mut emit_idx: usize = 0;
10882        #[cfg(feature = "extra-children")]
10883        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10884            extra_iter
10885                .next()
10886                .unwrap()
10887                .node
10888                .write_to(writer)
10889                .map_err(SerializeError::from)?;
10890        }
10891        if let Some(ref val) = self.cell_type {
10892            {
10893                let start = BytesStart::new("t");
10894                writer.write_event(Event::Start(start))?;
10895                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
10896                writer.write_event(Event::End(BytesEnd::new("t")))?;
10897            }
10898        }
10899        #[cfg(feature = "extra-children")]
10900        {
10901            emit_idx += 1;
10902        }
10903        for item in &self.reference {
10904            #[cfg(feature = "extra-children")]
10905            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10906                extra_iter
10907                    .next()
10908                    .unwrap()
10909                    .node
10910                    .write_to(writer)
10911                    .map_err(SerializeError::from)?;
10912            }
10913            item.write_element("r", writer)?;
10914            #[cfg(feature = "extra-children")]
10915            {
10916                emit_idx += 1;
10917            }
10918        }
10919        for item in &self.r_ph {
10920            #[cfg(feature = "extra-children")]
10921            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10922                extra_iter
10923                    .next()
10924                    .unwrap()
10925                    .node
10926                    .write_to(writer)
10927                    .map_err(SerializeError::from)?;
10928            }
10929            item.write_element("rPh", writer)?;
10930            #[cfg(feature = "extra-children")]
10931            {
10932                emit_idx += 1;
10933            }
10934        }
10935        #[cfg(feature = "extra-children")]
10936        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
10937            extra_iter
10938                .next()
10939                .unwrap()
10940                .node
10941                .write_to(writer)
10942                .map_err(SerializeError::from)?;
10943        }
10944        if let Some(ref val) = self.phonetic_pr {
10945            val.write_element("phoneticPr", writer)?;
10946        }
10947        #[cfg(feature = "extra-children")]
10948        {
10949            emit_idx += 1;
10950        }
10951        #[cfg(feature = "extra-children")]
10952        for extra in extra_iter {
10953            extra.node.write_to(writer).map_err(SerializeError::from)?;
10954        }
10955        Ok(())
10956    }
10957
10958    fn is_empty_element(&self) -> bool {
10959        if self.cell_type.is_some() {
10960            return false;
10961        }
10962        if !self.reference.is_empty() {
10963            return false;
10964        }
10965        if !self.r_ph.is_empty() {
10966            return false;
10967        }
10968        if self.phonetic_pr.is_some() {
10969            return false;
10970        }
10971        #[cfg(feature = "extra-children")]
10972        if !self.extra_children.is_empty() {
10973            return false;
10974        }
10975        true
10976    }
10977}
10978
10979impl ToXml for PhoneticProperties {
10980    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
10981        #[allow(unused_mut)]
10982        let mut start = start;
10983        {
10984            let val = &self.font_id;
10985            {
10986                let s = val.to_string();
10987                start.push_attribute(("fontId", s.as_str()));
10988            }
10989        }
10990        if let Some(ref val) = self.r#type {
10991            {
10992                let s = val.to_string();
10993                start.push_attribute(("type", s.as_str()));
10994            }
10995        }
10996        if let Some(ref val) = self.alignment {
10997            {
10998                let s = val.to_string();
10999                start.push_attribute(("alignment", s.as_str()));
11000            }
11001        }
11002        #[cfg(feature = "extra-attrs")]
11003        for (key, value) in &self.extra_attrs {
11004            start.push_attribute((key.as_str(), value.as_str()));
11005        }
11006        start
11007    }
11008
11009    fn is_empty_element(&self) -> bool {
11010        true
11011    }
11012}
11013
11014impl ToXml for RevisionHeaders {
11015    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11016        #[allow(unused_mut)]
11017        let mut start = start;
11018        {
11019            let val = &self.guid;
11020            start.push_attribute(("guid", val.as_str()));
11021        }
11022        if let Some(ref val) = self.last_guid {
11023            start.push_attribute(("lastGuid", val.as_str()));
11024        }
11025        if let Some(ref val) = self.shared {
11026            start.push_attribute(("shared", if *val { "1" } else { "0" }));
11027        }
11028        if let Some(ref val) = self.disk_revisions {
11029            start.push_attribute(("diskRevisions", if *val { "1" } else { "0" }));
11030        }
11031        if let Some(ref val) = self.history {
11032            start.push_attribute(("history", if *val { "1" } else { "0" }));
11033        }
11034        if let Some(ref val) = self.track_revisions {
11035            start.push_attribute(("trackRevisions", if *val { "1" } else { "0" }));
11036        }
11037        if let Some(ref val) = self.exclusive {
11038            start.push_attribute(("exclusive", if *val { "1" } else { "0" }));
11039        }
11040        if let Some(ref val) = self.revision_id {
11041            {
11042                let s = val.to_string();
11043                start.push_attribute(("revisionId", s.as_str()));
11044            }
11045        }
11046        if let Some(ref val) = self.version {
11047            {
11048                let s = val.to_string();
11049                start.push_attribute(("version", s.as_str()));
11050            }
11051        }
11052        if let Some(ref val) = self.keep_change_history {
11053            start.push_attribute(("keepChangeHistory", if *val { "1" } else { "0" }));
11054        }
11055        if let Some(ref val) = self.protected {
11056            start.push_attribute(("protected", if *val { "1" } else { "0" }));
11057        }
11058        if let Some(ref val) = self.preserve_history {
11059            {
11060                let s = val.to_string();
11061                start.push_attribute(("preserveHistory", s.as_str()));
11062            }
11063        }
11064        #[cfg(feature = "extra-attrs")]
11065        for (key, value) in &self.extra_attrs {
11066            start.push_attribute((key.as_str(), value.as_str()));
11067        }
11068        start
11069    }
11070
11071    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
11072        #[cfg(feature = "extra-children")]
11073        let mut extra_iter = self.extra_children.iter().peekable();
11074        #[cfg(feature = "extra-children")]
11075        let mut emit_idx: usize = 0;
11076        for item in &self.header {
11077            #[cfg(feature = "extra-children")]
11078            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11079                extra_iter
11080                    .next()
11081                    .unwrap()
11082                    .node
11083                    .write_to(writer)
11084                    .map_err(SerializeError::from)?;
11085            }
11086            item.write_element("header", writer)?;
11087            #[cfg(feature = "extra-children")]
11088            {
11089                emit_idx += 1;
11090            }
11091        }
11092        #[cfg(feature = "extra-children")]
11093        for extra in extra_iter {
11094            extra.node.write_to(writer).map_err(SerializeError::from)?;
11095        }
11096        Ok(())
11097    }
11098
11099    fn is_empty_element(&self) -> bool {
11100        if !self.header.is_empty() {
11101            return false;
11102        }
11103        #[cfg(feature = "extra-children")]
11104        if !self.extra_children.is_empty() {
11105            return false;
11106        }
11107        true
11108    }
11109}
11110
11111impl ToXml for Revisions {
11112    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
11113        #[cfg(feature = "extra-children")]
11114        for child in &self.extra_children {
11115            child.node.write_to(writer).map_err(SerializeError::from)?;
11116        }
11117        Ok(())
11118    }
11119
11120    fn is_empty_element(&self) -> bool {
11121        #[cfg(feature = "extra-children")]
11122        if !self.extra_children.is_empty() {
11123            return false;
11124        }
11125        true
11126    }
11127}
11128
11129impl ToXml for SmlAGRevData {
11130    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11131        #[allow(unused_mut)]
11132        let mut start = start;
11133        {
11134            let val = &self.r_id;
11135            {
11136                let s = val.to_string();
11137                start.push_attribute(("rId", s.as_str()));
11138            }
11139        }
11140        if let Some(ref val) = self.ua {
11141            start.push_attribute(("ua", if *val { "1" } else { "0" }));
11142        }
11143        if let Some(ref val) = self.ra {
11144            start.push_attribute(("ra", if *val { "1" } else { "0" }));
11145        }
11146        #[cfg(feature = "extra-attrs")]
11147        for (key, value) in &self.extra_attrs {
11148            start.push_attribute((key.as_str(), value.as_str()));
11149        }
11150        start
11151    }
11152
11153    fn is_empty_element(&self) -> bool {
11154        true
11155    }
11156}
11157
11158impl ToXml for RevisionHeader {
11159    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11160        #[allow(unused_mut)]
11161        let mut start = start;
11162        {
11163            let val = &self.guid;
11164            start.push_attribute(("guid", val.as_str()));
11165        }
11166        {
11167            let val = &self.date_time;
11168            start.push_attribute(("dateTime", val.as_str()));
11169        }
11170        {
11171            let val = &self.max_sheet_id;
11172            {
11173                let s = val.to_string();
11174                start.push_attribute(("maxSheetId", s.as_str()));
11175            }
11176        }
11177        {
11178            let val = &self.user_name;
11179            start.push_attribute(("userName", val.as_str()));
11180        }
11181        {
11182            let val = &self.id;
11183            start.push_attribute(("r:id", val.as_str()));
11184        }
11185        if let Some(ref val) = self.min_r_id {
11186            {
11187                let s = val.to_string();
11188                start.push_attribute(("minRId", s.as_str()));
11189            }
11190        }
11191        if let Some(ref val) = self.max_r_id {
11192            {
11193                let s = val.to_string();
11194                start.push_attribute(("maxRId", s.as_str()));
11195            }
11196        }
11197        #[cfg(feature = "extra-attrs")]
11198        for (key, value) in &self.extra_attrs {
11199            start.push_attribute((key.as_str(), value.as_str()));
11200        }
11201        start
11202    }
11203
11204    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
11205        #[cfg(feature = "extra-children")]
11206        let mut extra_iter = self.extra_children.iter().peekable();
11207        #[cfg(feature = "extra-children")]
11208        let mut emit_idx: usize = 0;
11209        #[cfg(feature = "extra-children")]
11210        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11211            extra_iter
11212                .next()
11213                .unwrap()
11214                .node
11215                .write_to(writer)
11216                .map_err(SerializeError::from)?;
11217        }
11218        {
11219            let val = &self.sheet_id_map;
11220            val.write_element("sheetIdMap", writer)?;
11221        }
11222        #[cfg(feature = "extra-children")]
11223        {
11224            emit_idx += 1;
11225        }
11226        #[cfg(feature = "extra-children")]
11227        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11228            extra_iter
11229                .next()
11230                .unwrap()
11231                .node
11232                .write_to(writer)
11233                .map_err(SerializeError::from)?;
11234        }
11235        if let Some(ref val) = self.reviewed_list {
11236            val.write_element("reviewedList", writer)?;
11237        }
11238        #[cfg(feature = "extra-children")]
11239        {
11240            emit_idx += 1;
11241        }
11242        #[cfg(feature = "extra-children")]
11243        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11244            extra_iter
11245                .next()
11246                .unwrap()
11247                .node
11248                .write_to(writer)
11249                .map_err(SerializeError::from)?;
11250        }
11251        if let Some(ref val) = self.extension_list {
11252            val.write_element("extLst", writer)?;
11253        }
11254        #[cfg(feature = "extra-children")]
11255        {
11256            emit_idx += 1;
11257        }
11258        #[cfg(feature = "extra-children")]
11259        for extra in extra_iter {
11260            extra.node.write_to(writer).map_err(SerializeError::from)?;
11261        }
11262        Ok(())
11263    }
11264
11265    fn is_empty_element(&self) -> bool {
11266        false
11267    }
11268}
11269
11270impl ToXml for CTSheetIdMap {
11271    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11272        #[allow(unused_mut)]
11273        let mut start = start;
11274        if let Some(ref val) = self.count {
11275            {
11276                let s = val.to_string();
11277                start.push_attribute(("count", s.as_str()));
11278            }
11279        }
11280        #[cfg(feature = "extra-attrs")]
11281        for (key, value) in &self.extra_attrs {
11282            start.push_attribute((key.as_str(), value.as_str()));
11283        }
11284        start
11285    }
11286
11287    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
11288        #[cfg(feature = "extra-children")]
11289        let mut extra_iter = self.extra_children.iter().peekable();
11290        #[cfg(feature = "extra-children")]
11291        let mut emit_idx: usize = 0;
11292        for item in &self.sheet_id {
11293            #[cfg(feature = "extra-children")]
11294            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11295                extra_iter
11296                    .next()
11297                    .unwrap()
11298                    .node
11299                    .write_to(writer)
11300                    .map_err(SerializeError::from)?;
11301            }
11302            item.write_element("sheetId", writer)?;
11303            #[cfg(feature = "extra-children")]
11304            {
11305                emit_idx += 1;
11306            }
11307        }
11308        #[cfg(feature = "extra-children")]
11309        for extra in extra_iter {
11310            extra.node.write_to(writer).map_err(SerializeError::from)?;
11311        }
11312        Ok(())
11313    }
11314
11315    fn is_empty_element(&self) -> bool {
11316        if !self.sheet_id.is_empty() {
11317            return false;
11318        }
11319        #[cfg(feature = "extra-children")]
11320        if !self.extra_children.is_empty() {
11321            return false;
11322        }
11323        true
11324    }
11325}
11326
11327impl ToXml for CTSheetId {
11328    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11329        #[allow(unused_mut)]
11330        let mut start = start;
11331        {
11332            let val = &self.value;
11333            {
11334                let s = val.to_string();
11335                start.push_attribute(("val", s.as_str()));
11336            }
11337        }
11338        #[cfg(feature = "extra-attrs")]
11339        for (key, value) in &self.extra_attrs {
11340            start.push_attribute((key.as_str(), value.as_str()));
11341        }
11342        start
11343    }
11344
11345    fn is_empty_element(&self) -> bool {
11346        true
11347    }
11348}
11349
11350impl ToXml for ReviewedRevisions {
11351    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11352        #[allow(unused_mut)]
11353        let mut start = start;
11354        if let Some(ref val) = self.count {
11355            {
11356                let s = val.to_string();
11357                start.push_attribute(("count", s.as_str()));
11358            }
11359        }
11360        #[cfg(feature = "extra-attrs")]
11361        for (key, value) in &self.extra_attrs {
11362            start.push_attribute((key.as_str(), value.as_str()));
11363        }
11364        start
11365    }
11366
11367    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
11368        #[cfg(feature = "extra-children")]
11369        let mut extra_iter = self.extra_children.iter().peekable();
11370        #[cfg(feature = "extra-children")]
11371        let mut emit_idx: usize = 0;
11372        for item in &self.reviewed {
11373            #[cfg(feature = "extra-children")]
11374            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11375                extra_iter
11376                    .next()
11377                    .unwrap()
11378                    .node
11379                    .write_to(writer)
11380                    .map_err(SerializeError::from)?;
11381            }
11382            item.write_element("reviewed", writer)?;
11383            #[cfg(feature = "extra-children")]
11384            {
11385                emit_idx += 1;
11386            }
11387        }
11388        #[cfg(feature = "extra-children")]
11389        for extra in extra_iter {
11390            extra.node.write_to(writer).map_err(SerializeError::from)?;
11391        }
11392        Ok(())
11393    }
11394
11395    fn is_empty_element(&self) -> bool {
11396        if !self.reviewed.is_empty() {
11397            return false;
11398        }
11399        #[cfg(feature = "extra-children")]
11400        if !self.extra_children.is_empty() {
11401            return false;
11402        }
11403        true
11404    }
11405}
11406
11407impl ToXml for Reviewed {
11408    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11409        #[allow(unused_mut)]
11410        let mut start = start;
11411        {
11412            let val = &self.r_id;
11413            {
11414                let s = val.to_string();
11415                start.push_attribute(("rId", s.as_str()));
11416            }
11417        }
11418        #[cfg(feature = "extra-attrs")]
11419        for (key, value) in &self.extra_attrs {
11420            start.push_attribute((key.as_str(), value.as_str()));
11421        }
11422        start
11423    }
11424
11425    fn is_empty_element(&self) -> bool {
11426        true
11427    }
11428}
11429
11430impl ToXml for UndoInfo {
11431    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11432        #[allow(unused_mut)]
11433        let mut start = start;
11434        {
11435            let val = &self.index;
11436            {
11437                let s = val.to_string();
11438                start.push_attribute(("index", s.as_str()));
11439            }
11440        }
11441        {
11442            let val = &self.exp;
11443            {
11444                let s = val.to_string();
11445                start.push_attribute(("exp", s.as_str()));
11446            }
11447        }
11448        if let Some(ref val) = self.ref3_d {
11449            start.push_attribute(("ref3D", if *val { "1" } else { "0" }));
11450        }
11451        if let Some(ref val) = self.array {
11452            start.push_attribute(("array", if *val { "1" } else { "0" }));
11453        }
11454        if let Some(ref val) = self.value {
11455            start.push_attribute(("v", if *val { "1" } else { "0" }));
11456        }
11457        if let Some(ref val) = self.nf {
11458            start.push_attribute(("nf", if *val { "1" } else { "0" }));
11459        }
11460        if let Some(ref val) = self.cs {
11461            start.push_attribute(("cs", if *val { "1" } else { "0" }));
11462        }
11463        {
11464            let val = &self.dr;
11465            start.push_attribute(("dr", val.as_str()));
11466        }
11467        if let Some(ref val) = self.dn {
11468            start.push_attribute(("dn", val.as_str()));
11469        }
11470        if let Some(ref val) = self.reference {
11471            start.push_attribute(("r", val.as_str()));
11472        }
11473        if let Some(ref val) = self.s_id {
11474            {
11475                let s = val.to_string();
11476                start.push_attribute(("sId", s.as_str()));
11477            }
11478        }
11479        #[cfg(feature = "extra-attrs")]
11480        for (key, value) in &self.extra_attrs {
11481            start.push_attribute((key.as_str(), value.as_str()));
11482        }
11483        start
11484    }
11485
11486    fn is_empty_element(&self) -> bool {
11487        true
11488    }
11489}
11490
11491impl ToXml for RevisionRowColumn {
11492    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11493        #[allow(unused_mut)]
11494        let mut start = start;
11495        {
11496            let val = &self.r_id;
11497            {
11498                let s = val.to_string();
11499                start.push_attribute(("rId", s.as_str()));
11500            }
11501        }
11502        if let Some(ref val) = self.ua {
11503            start.push_attribute(("ua", if *val { "1" } else { "0" }));
11504        }
11505        if let Some(ref val) = self.ra {
11506            start.push_attribute(("ra", if *val { "1" } else { "0" }));
11507        }
11508        {
11509            let val = &self.s_id;
11510            {
11511                let s = val.to_string();
11512                start.push_attribute(("sId", s.as_str()));
11513            }
11514        }
11515        if let Some(ref val) = self.eol {
11516            start.push_attribute(("eol", if *val { "1" } else { "0" }));
11517        }
11518        {
11519            let val = &self.reference;
11520            start.push_attribute(("ref", val.as_str()));
11521        }
11522        {
11523            let val = &self.action;
11524            {
11525                let s = val.to_string();
11526                start.push_attribute(("action", s.as_str()));
11527            }
11528        }
11529        if let Some(ref val) = self.edge {
11530            start.push_attribute(("edge", if *val { "1" } else { "0" }));
11531        }
11532        #[cfg(feature = "extra-attrs")]
11533        for (key, value) in &self.extra_attrs {
11534            start.push_attribute((key.as_str(), value.as_str()));
11535        }
11536        start
11537    }
11538
11539    fn is_empty_element(&self) -> bool {
11540        true
11541    }
11542}
11543
11544impl ToXml for RevisionMove {
11545    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11546        #[allow(unused_mut)]
11547        let mut start = start;
11548        {
11549            let val = &self.r_id;
11550            {
11551                let s = val.to_string();
11552                start.push_attribute(("rId", s.as_str()));
11553            }
11554        }
11555        if let Some(ref val) = self.ua {
11556            start.push_attribute(("ua", if *val { "1" } else { "0" }));
11557        }
11558        if let Some(ref val) = self.ra {
11559            start.push_attribute(("ra", if *val { "1" } else { "0" }));
11560        }
11561        {
11562            let val = &self.sheet_id;
11563            {
11564                let s = val.to_string();
11565                start.push_attribute(("sheetId", s.as_str()));
11566            }
11567        }
11568        {
11569            let val = &self.source;
11570            start.push_attribute(("source", val.as_str()));
11571        }
11572        {
11573            let val = &self.destination;
11574            start.push_attribute(("destination", val.as_str()));
11575        }
11576        if let Some(ref val) = self.source_sheet_id {
11577            {
11578                let s = val.to_string();
11579                start.push_attribute(("sourceSheetId", s.as_str()));
11580            }
11581        }
11582        #[cfg(feature = "extra-attrs")]
11583        for (key, value) in &self.extra_attrs {
11584            start.push_attribute((key.as_str(), value.as_str()));
11585        }
11586        start
11587    }
11588
11589    fn is_empty_element(&self) -> bool {
11590        true
11591    }
11592}
11593
11594impl ToXml for RevisionCustomView {
11595    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11596        #[allow(unused_mut)]
11597        let mut start = start;
11598        {
11599            let val = &self.guid;
11600            start.push_attribute(("guid", val.as_str()));
11601        }
11602        {
11603            let val = &self.action;
11604            {
11605                let s = val.to_string();
11606                start.push_attribute(("action", s.as_str()));
11607            }
11608        }
11609        #[cfg(feature = "extra-attrs")]
11610        for (key, value) in &self.extra_attrs {
11611            start.push_attribute((key.as_str(), value.as_str()));
11612        }
11613        start
11614    }
11615
11616    fn is_empty_element(&self) -> bool {
11617        true
11618    }
11619}
11620
11621impl ToXml for RevisionSheetRename {
11622    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11623        #[allow(unused_mut)]
11624        let mut start = start;
11625        {
11626            let val = &self.r_id;
11627            {
11628                let s = val.to_string();
11629                start.push_attribute(("rId", s.as_str()));
11630            }
11631        }
11632        if let Some(ref val) = self.ua {
11633            start.push_attribute(("ua", if *val { "1" } else { "0" }));
11634        }
11635        if let Some(ref val) = self.ra {
11636            start.push_attribute(("ra", if *val { "1" } else { "0" }));
11637        }
11638        {
11639            let val = &self.sheet_id;
11640            {
11641                let s = val.to_string();
11642                start.push_attribute(("sheetId", s.as_str()));
11643            }
11644        }
11645        {
11646            let val = &self.old_name;
11647            start.push_attribute(("oldName", val.as_str()));
11648        }
11649        {
11650            let val = &self.new_name;
11651            start.push_attribute(("newName", val.as_str()));
11652        }
11653        #[cfg(feature = "extra-attrs")]
11654        for (key, value) in &self.extra_attrs {
11655            start.push_attribute((key.as_str(), value.as_str()));
11656        }
11657        start
11658    }
11659
11660    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
11661        #[cfg(feature = "extra-children")]
11662        let mut extra_iter = self.extra_children.iter().peekable();
11663        #[cfg(feature = "extra-children")]
11664        let mut emit_idx: usize = 0;
11665        #[cfg(feature = "extra-children")]
11666        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11667            extra_iter
11668                .next()
11669                .unwrap()
11670                .node
11671                .write_to(writer)
11672                .map_err(SerializeError::from)?;
11673        }
11674        if let Some(ref val) = self.extension_list {
11675            val.write_element("extLst", writer)?;
11676        }
11677        #[cfg(feature = "extra-children")]
11678        {
11679            emit_idx += 1;
11680        }
11681        #[cfg(feature = "extra-children")]
11682        for extra in extra_iter {
11683            extra.node.write_to(writer).map_err(SerializeError::from)?;
11684        }
11685        Ok(())
11686    }
11687
11688    fn is_empty_element(&self) -> bool {
11689        if self.extension_list.is_some() {
11690            return false;
11691        }
11692        #[cfg(feature = "extra-children")]
11693        if !self.extra_children.is_empty() {
11694            return false;
11695        }
11696        true
11697    }
11698}
11699
11700impl ToXml for RevisionInsertSheet {
11701    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11702        #[allow(unused_mut)]
11703        let mut start = start;
11704        {
11705            let val = &self.r_id;
11706            {
11707                let s = val.to_string();
11708                start.push_attribute(("rId", s.as_str()));
11709            }
11710        }
11711        if let Some(ref val) = self.ua {
11712            start.push_attribute(("ua", if *val { "1" } else { "0" }));
11713        }
11714        if let Some(ref val) = self.ra {
11715            start.push_attribute(("ra", if *val { "1" } else { "0" }));
11716        }
11717        {
11718            let val = &self.sheet_id;
11719            {
11720                let s = val.to_string();
11721                start.push_attribute(("sheetId", s.as_str()));
11722            }
11723        }
11724        {
11725            let val = &self.name;
11726            start.push_attribute(("name", val.as_str()));
11727        }
11728        {
11729            let val = &self.sheet_position;
11730            {
11731                let s = val.to_string();
11732                start.push_attribute(("sheetPosition", s.as_str()));
11733            }
11734        }
11735        #[cfg(feature = "extra-attrs")]
11736        for (key, value) in &self.extra_attrs {
11737            start.push_attribute((key.as_str(), value.as_str()));
11738        }
11739        start
11740    }
11741
11742    fn is_empty_element(&self) -> bool {
11743        true
11744    }
11745}
11746
11747impl ToXml for RevisionCellChange {
11748    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11749        #[allow(unused_mut)]
11750        let mut start = start;
11751        {
11752            let val = &self.r_id;
11753            {
11754                let s = val.to_string();
11755                start.push_attribute(("rId", s.as_str()));
11756            }
11757        }
11758        if let Some(ref val) = self.ua {
11759            start.push_attribute(("ua", if *val { "1" } else { "0" }));
11760        }
11761        if let Some(ref val) = self.ra {
11762            start.push_attribute(("ra", if *val { "1" } else { "0" }));
11763        }
11764        {
11765            let val = &self.s_id;
11766            {
11767                let s = val.to_string();
11768                start.push_attribute(("sId", s.as_str()));
11769            }
11770        }
11771        if let Some(ref val) = self.odxf {
11772            start.push_attribute(("odxf", if *val { "1" } else { "0" }));
11773        }
11774        if let Some(ref val) = self.xf_dxf {
11775            start.push_attribute(("xfDxf", if *val { "1" } else { "0" }));
11776        }
11777        if let Some(ref val) = self.style_index {
11778            start.push_attribute(("s", if *val { "1" } else { "0" }));
11779        }
11780        if let Some(ref val) = self.dxf {
11781            start.push_attribute(("dxf", if *val { "1" } else { "0" }));
11782        }
11783        if let Some(ref val) = self.number_format_id {
11784            {
11785                let s = val.to_string();
11786                start.push_attribute(("numFmtId", s.as_str()));
11787            }
11788        }
11789        if let Some(ref val) = self.quote_prefix {
11790            start.push_attribute(("quotePrefix", if *val { "1" } else { "0" }));
11791        }
11792        if let Some(ref val) = self.old_quote_prefix {
11793            start.push_attribute(("oldQuotePrefix", if *val { "1" } else { "0" }));
11794        }
11795        if let Some(ref val) = self.placeholder {
11796            start.push_attribute(("ph", if *val { "1" } else { "0" }));
11797        }
11798        if let Some(ref val) = self.old_ph {
11799            start.push_attribute(("oldPh", if *val { "1" } else { "0" }));
11800        }
11801        if let Some(ref val) = self.end_of_list_formula_update {
11802            start.push_attribute(("endOfListFormulaUpdate", if *val { "1" } else { "0" }));
11803        }
11804        #[cfg(feature = "extra-attrs")]
11805        for (key, value) in &self.extra_attrs {
11806            start.push_attribute((key.as_str(), value.as_str()));
11807        }
11808        start
11809    }
11810
11811    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
11812        #[cfg(feature = "extra-children")]
11813        let mut extra_iter = self.extra_children.iter().peekable();
11814        #[cfg(feature = "extra-children")]
11815        let mut emit_idx: usize = 0;
11816        #[cfg(feature = "extra-children")]
11817        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11818            extra_iter
11819                .next()
11820                .unwrap()
11821                .node
11822                .write_to(writer)
11823                .map_err(SerializeError::from)?;
11824        }
11825        if let Some(ref val) = self.oc {
11826            val.write_element("oc", writer)?;
11827        }
11828        #[cfg(feature = "extra-children")]
11829        {
11830            emit_idx += 1;
11831        }
11832        #[cfg(feature = "extra-children")]
11833        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11834            extra_iter
11835                .next()
11836                .unwrap()
11837                .node
11838                .write_to(writer)
11839                .map_err(SerializeError::from)?;
11840        }
11841        {
11842            let val = &self.nc;
11843            val.write_element("nc", writer)?;
11844        }
11845        #[cfg(feature = "extra-children")]
11846        {
11847            emit_idx += 1;
11848        }
11849        #[cfg(feature = "extra-children")]
11850        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11851            extra_iter
11852                .next()
11853                .unwrap()
11854                .node
11855                .write_to(writer)
11856                .map_err(SerializeError::from)?;
11857        }
11858        if let Some(ref val) = self.ndxf {
11859            val.write_element("ndxf", writer)?;
11860        }
11861        #[cfg(feature = "extra-children")]
11862        {
11863            emit_idx += 1;
11864        }
11865        #[cfg(feature = "extra-children")]
11866        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11867            extra_iter
11868                .next()
11869                .unwrap()
11870                .node
11871                .write_to(writer)
11872                .map_err(SerializeError::from)?;
11873        }
11874        if let Some(ref val) = self.extension_list {
11875            val.write_element("extLst", writer)?;
11876        }
11877        #[cfg(feature = "extra-children")]
11878        {
11879            emit_idx += 1;
11880        }
11881        #[cfg(feature = "extra-children")]
11882        for extra in extra_iter {
11883            extra.node.write_to(writer).map_err(SerializeError::from)?;
11884        }
11885        Ok(())
11886    }
11887
11888    fn is_empty_element(&self) -> bool {
11889        if self.oc.is_some() {
11890            return false;
11891        }
11892        false
11893    }
11894}
11895
11896impl ToXml for RevisionFormatting {
11897    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11898        #[allow(unused_mut)]
11899        let mut start = start;
11900        {
11901            let val = &self.sheet_id;
11902            {
11903                let s = val.to_string();
11904                start.push_attribute(("sheetId", s.as_str()));
11905            }
11906        }
11907        if let Some(ref val) = self.xf_dxf {
11908            start.push_attribute(("xfDxf", if *val { "1" } else { "0" }));
11909        }
11910        if let Some(ref val) = self.style_index {
11911            start.push_attribute(("s", if *val { "1" } else { "0" }));
11912        }
11913        {
11914            let val = &self.square_reference;
11915            start.push_attribute(("sqref", val.as_str()));
11916        }
11917        if let Some(ref val) = self.start {
11918            {
11919                let s = val.to_string();
11920                start.push_attribute(("start", s.as_str()));
11921            }
11922        }
11923        if let Some(ref val) = self.length {
11924            {
11925                let s = val.to_string();
11926                start.push_attribute(("length", s.as_str()));
11927            }
11928        }
11929        #[cfg(feature = "extra-attrs")]
11930        for (key, value) in &self.extra_attrs {
11931            start.push_attribute((key.as_str(), value.as_str()));
11932        }
11933        start
11934    }
11935
11936    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
11937        #[cfg(feature = "extra-children")]
11938        let mut extra_iter = self.extra_children.iter().peekable();
11939        #[cfg(feature = "extra-children")]
11940        let mut emit_idx: usize = 0;
11941        #[cfg(feature = "extra-children")]
11942        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11943            extra_iter
11944                .next()
11945                .unwrap()
11946                .node
11947                .write_to(writer)
11948                .map_err(SerializeError::from)?;
11949        }
11950        if let Some(ref val) = self.dxf {
11951            val.write_element("dxf", writer)?;
11952        }
11953        #[cfg(feature = "extra-children")]
11954        {
11955            emit_idx += 1;
11956        }
11957        #[cfg(feature = "extra-children")]
11958        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
11959            extra_iter
11960                .next()
11961                .unwrap()
11962                .node
11963                .write_to(writer)
11964                .map_err(SerializeError::from)?;
11965        }
11966        if let Some(ref val) = self.extension_list {
11967            val.write_element("extLst", writer)?;
11968        }
11969        #[cfg(feature = "extra-children")]
11970        {
11971            emit_idx += 1;
11972        }
11973        #[cfg(feature = "extra-children")]
11974        for extra in extra_iter {
11975            extra.node.write_to(writer).map_err(SerializeError::from)?;
11976        }
11977        Ok(())
11978    }
11979
11980    fn is_empty_element(&self) -> bool {
11981        if self.dxf.is_some() {
11982            return false;
11983        }
11984        if self.extension_list.is_some() {
11985            return false;
11986        }
11987        #[cfg(feature = "extra-children")]
11988        if !self.extra_children.is_empty() {
11989            return false;
11990        }
11991        true
11992    }
11993}
11994
11995impl ToXml for RevisionAutoFormatting {
11996    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
11997        #[allow(unused_mut)]
11998        let mut start = start;
11999        {
12000            let val = &self.sheet_id;
12001            {
12002                let s = val.to_string();
12003                start.push_attribute(("sheetId", s.as_str()));
12004            }
12005        }
12006        if let Some(ref val) = self.auto_format_id {
12007            {
12008                let s = val.to_string();
12009                start.push_attribute(("autoFormatId", s.as_str()));
12010            }
12011        }
12012        if let Some(ref val) = self.apply_number_formats {
12013            start.push_attribute(("applyNumberFormats", if *val { "1" } else { "0" }));
12014        }
12015        if let Some(ref val) = self.apply_border_formats {
12016            start.push_attribute(("applyBorderFormats", if *val { "1" } else { "0" }));
12017        }
12018        if let Some(ref val) = self.apply_font_formats {
12019            start.push_attribute(("applyFontFormats", if *val { "1" } else { "0" }));
12020        }
12021        if let Some(ref val) = self.apply_pattern_formats {
12022            start.push_attribute(("applyPatternFormats", if *val { "1" } else { "0" }));
12023        }
12024        if let Some(ref val) = self.apply_alignment_formats {
12025            start.push_attribute(("applyAlignmentFormats", if *val { "1" } else { "0" }));
12026        }
12027        if let Some(ref val) = self.apply_width_height_formats {
12028            start.push_attribute(("applyWidthHeightFormats", if *val { "1" } else { "0" }));
12029        }
12030        {
12031            let val = &self.reference;
12032            start.push_attribute(("ref", val.as_str()));
12033        }
12034        #[cfg(feature = "extra-attrs")]
12035        for (key, value) in &self.extra_attrs {
12036            start.push_attribute((key.as_str(), value.as_str()));
12037        }
12038        start
12039    }
12040
12041    fn is_empty_element(&self) -> bool {
12042        true
12043    }
12044}
12045
12046impl ToXml for RevisionComment {
12047    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
12048        #[allow(unused_mut)]
12049        let mut start = start;
12050        {
12051            let val = &self.sheet_id;
12052            {
12053                let s = val.to_string();
12054                start.push_attribute(("sheetId", s.as_str()));
12055            }
12056        }
12057        {
12058            let val = &self.cell;
12059            start.push_attribute(("cell", val.as_str()));
12060        }
12061        {
12062            let val = &self.guid;
12063            start.push_attribute(("guid", val.as_str()));
12064        }
12065        if let Some(ref val) = self.action {
12066            {
12067                let s = val.to_string();
12068                start.push_attribute(("action", s.as_str()));
12069            }
12070        }
12071        if let Some(ref val) = self.always_show {
12072            start.push_attribute(("alwaysShow", if *val { "1" } else { "0" }));
12073        }
12074        if let Some(ref val) = self.old {
12075            start.push_attribute(("old", if *val { "1" } else { "0" }));
12076        }
12077        if let Some(ref val) = self.hidden_row {
12078            start.push_attribute(("hiddenRow", if *val { "1" } else { "0" }));
12079        }
12080        if let Some(ref val) = self.hidden_column {
12081            start.push_attribute(("hiddenColumn", if *val { "1" } else { "0" }));
12082        }
12083        {
12084            let val = &self.author;
12085            start.push_attribute(("author", val.as_str()));
12086        }
12087        if let Some(ref val) = self.old_length {
12088            {
12089                let s = val.to_string();
12090                start.push_attribute(("oldLength", s.as_str()));
12091            }
12092        }
12093        if let Some(ref val) = self.new_length {
12094            {
12095                let s = val.to_string();
12096                start.push_attribute(("newLength", s.as_str()));
12097            }
12098        }
12099        #[cfg(feature = "extra-attrs")]
12100        for (key, value) in &self.extra_attrs {
12101            start.push_attribute((key.as_str(), value.as_str()));
12102        }
12103        start
12104    }
12105
12106    fn is_empty_element(&self) -> bool {
12107        true
12108    }
12109}
12110
12111impl ToXml for RevisionDefinedName {
12112    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
12113        #[allow(unused_mut)]
12114        let mut start = start;
12115        {
12116            let val = &self.r_id;
12117            {
12118                let s = val.to_string();
12119                start.push_attribute(("rId", s.as_str()));
12120            }
12121        }
12122        if let Some(ref val) = self.ua {
12123            start.push_attribute(("ua", if *val { "1" } else { "0" }));
12124        }
12125        if let Some(ref val) = self.ra {
12126            start.push_attribute(("ra", if *val { "1" } else { "0" }));
12127        }
12128        if let Some(ref val) = self.local_sheet_id {
12129            {
12130                let s = val.to_string();
12131                start.push_attribute(("localSheetId", s.as_str()));
12132            }
12133        }
12134        if let Some(ref val) = self.custom_view {
12135            start.push_attribute(("customView", if *val { "1" } else { "0" }));
12136        }
12137        {
12138            let val = &self.name;
12139            start.push_attribute(("name", val.as_str()));
12140        }
12141        if let Some(ref val) = self.function {
12142            start.push_attribute(("function", if *val { "1" } else { "0" }));
12143        }
12144        if let Some(ref val) = self.old_function {
12145            start.push_attribute(("oldFunction", if *val { "1" } else { "0" }));
12146        }
12147        if let Some(ref val) = self.function_group_id {
12148            {
12149                let s = val.to_string();
12150                start.push_attribute(("functionGroupId", s.as_str()));
12151            }
12152        }
12153        if let Some(ref val) = self.old_function_group_id {
12154            {
12155                let s = val.to_string();
12156                start.push_attribute(("oldFunctionGroupId", s.as_str()));
12157            }
12158        }
12159        if let Some(ref val) = self.shortcut_key {
12160            {
12161                let s = val.to_string();
12162                start.push_attribute(("shortcutKey", s.as_str()));
12163            }
12164        }
12165        if let Some(ref val) = self.old_shortcut_key {
12166            {
12167                let s = val.to_string();
12168                start.push_attribute(("oldShortcutKey", s.as_str()));
12169            }
12170        }
12171        if let Some(ref val) = self.hidden {
12172            start.push_attribute(("hidden", if *val { "1" } else { "0" }));
12173        }
12174        if let Some(ref val) = self.old_hidden {
12175            start.push_attribute(("oldHidden", if *val { "1" } else { "0" }));
12176        }
12177        if let Some(ref val) = self.custom_menu {
12178            start.push_attribute(("customMenu", val.as_str()));
12179        }
12180        if let Some(ref val) = self.old_custom_menu {
12181            start.push_attribute(("oldCustomMenu", val.as_str()));
12182        }
12183        if let Some(ref val) = self.description {
12184            start.push_attribute(("description", val.as_str()));
12185        }
12186        if let Some(ref val) = self.old_description {
12187            start.push_attribute(("oldDescription", val.as_str()));
12188        }
12189        if let Some(ref val) = self.help {
12190            start.push_attribute(("help", val.as_str()));
12191        }
12192        if let Some(ref val) = self.old_help {
12193            start.push_attribute(("oldHelp", val.as_str()));
12194        }
12195        if let Some(ref val) = self.status_bar {
12196            start.push_attribute(("statusBar", val.as_str()));
12197        }
12198        if let Some(ref val) = self.old_status_bar {
12199            start.push_attribute(("oldStatusBar", val.as_str()));
12200        }
12201        if let Some(ref val) = self.comment {
12202            start.push_attribute(("comment", val.as_str()));
12203        }
12204        if let Some(ref val) = self.old_comment {
12205            start.push_attribute(("oldComment", val.as_str()));
12206        }
12207        #[cfg(feature = "extra-attrs")]
12208        for (key, value) in &self.extra_attrs {
12209            start.push_attribute((key.as_str(), value.as_str()));
12210        }
12211        start
12212    }
12213
12214    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
12215        #[cfg(feature = "extra-children")]
12216        let mut extra_iter = self.extra_children.iter().peekable();
12217        #[cfg(feature = "extra-children")]
12218        let mut emit_idx: usize = 0;
12219        #[cfg(feature = "extra-children")]
12220        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12221            extra_iter
12222                .next()
12223                .unwrap()
12224                .node
12225                .write_to(writer)
12226                .map_err(SerializeError::from)?;
12227        }
12228        if let Some(ref val) = self.formula {
12229            {
12230                let start = BytesStart::new("formula");
12231                writer.write_event(Event::Start(start))?;
12232                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
12233                writer.write_event(Event::End(BytesEnd::new("formula")))?;
12234            }
12235        }
12236        #[cfg(feature = "extra-children")]
12237        {
12238            emit_idx += 1;
12239        }
12240        #[cfg(feature = "extra-children")]
12241        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12242            extra_iter
12243                .next()
12244                .unwrap()
12245                .node
12246                .write_to(writer)
12247                .map_err(SerializeError::from)?;
12248        }
12249        if let Some(ref val) = self.old_formula {
12250            {
12251                let start = BytesStart::new("oldFormula");
12252                writer.write_event(Event::Start(start))?;
12253                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
12254                writer.write_event(Event::End(BytesEnd::new("oldFormula")))?;
12255            }
12256        }
12257        #[cfg(feature = "extra-children")]
12258        {
12259            emit_idx += 1;
12260        }
12261        #[cfg(feature = "extra-children")]
12262        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12263            extra_iter
12264                .next()
12265                .unwrap()
12266                .node
12267                .write_to(writer)
12268                .map_err(SerializeError::from)?;
12269        }
12270        if let Some(ref val) = self.extension_list {
12271            val.write_element("extLst", writer)?;
12272        }
12273        #[cfg(feature = "extra-children")]
12274        {
12275            emit_idx += 1;
12276        }
12277        #[cfg(feature = "extra-children")]
12278        for extra in extra_iter {
12279            extra.node.write_to(writer).map_err(SerializeError::from)?;
12280        }
12281        Ok(())
12282    }
12283
12284    fn is_empty_element(&self) -> bool {
12285        if self.formula.is_some() {
12286            return false;
12287        }
12288        if self.old_formula.is_some() {
12289            return false;
12290        }
12291        if self.extension_list.is_some() {
12292            return false;
12293        }
12294        #[cfg(feature = "extra-children")]
12295        if !self.extra_children.is_empty() {
12296            return false;
12297        }
12298        true
12299    }
12300}
12301
12302impl ToXml for RevisionConflict {
12303    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
12304        #[allow(unused_mut)]
12305        let mut start = start;
12306        {
12307            let val = &self.r_id;
12308            {
12309                let s = val.to_string();
12310                start.push_attribute(("rId", s.as_str()));
12311            }
12312        }
12313        if let Some(ref val) = self.ua {
12314            start.push_attribute(("ua", if *val { "1" } else { "0" }));
12315        }
12316        if let Some(ref val) = self.ra {
12317            start.push_attribute(("ra", if *val { "1" } else { "0" }));
12318        }
12319        if let Some(ref val) = self.sheet_id {
12320            {
12321                let s = val.to_string();
12322                start.push_attribute(("sheetId", s.as_str()));
12323            }
12324        }
12325        #[cfg(feature = "extra-attrs")]
12326        for (key, value) in &self.extra_attrs {
12327            start.push_attribute((key.as_str(), value.as_str()));
12328        }
12329        start
12330    }
12331
12332    fn is_empty_element(&self) -> bool {
12333        true
12334    }
12335}
12336
12337impl ToXml for RevisionQueryTableField {
12338    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
12339        #[allow(unused_mut)]
12340        let mut start = start;
12341        {
12342            let val = &self.sheet_id;
12343            {
12344                let s = val.to_string();
12345                start.push_attribute(("sheetId", s.as_str()));
12346            }
12347        }
12348        {
12349            let val = &self.reference;
12350            start.push_attribute(("ref", val.as_str()));
12351        }
12352        {
12353            let val = &self.field_id;
12354            {
12355                let s = val.to_string();
12356                start.push_attribute(("fieldId", s.as_str()));
12357            }
12358        }
12359        #[cfg(feature = "extra-attrs")]
12360        for (key, value) in &self.extra_attrs {
12361            start.push_attribute((key.as_str(), value.as_str()));
12362        }
12363        start
12364    }
12365
12366    fn is_empty_element(&self) -> bool {
12367        true
12368    }
12369}
12370
12371impl ToXml for Users {
12372    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
12373        #[allow(unused_mut)]
12374        let mut start = start;
12375        if let Some(ref val) = self.count {
12376            {
12377                let s = val.to_string();
12378                start.push_attribute(("count", s.as_str()));
12379            }
12380        }
12381        #[cfg(feature = "extra-attrs")]
12382        for (key, value) in &self.extra_attrs {
12383            start.push_attribute((key.as_str(), value.as_str()));
12384        }
12385        start
12386    }
12387
12388    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
12389        #[cfg(feature = "extra-children")]
12390        let mut extra_iter = self.extra_children.iter().peekable();
12391        #[cfg(feature = "extra-children")]
12392        let mut emit_idx: usize = 0;
12393        for item in &self.user_info {
12394            #[cfg(feature = "extra-children")]
12395            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12396                extra_iter
12397                    .next()
12398                    .unwrap()
12399                    .node
12400                    .write_to(writer)
12401                    .map_err(SerializeError::from)?;
12402            }
12403            item.write_element("userInfo", writer)?;
12404            #[cfg(feature = "extra-children")]
12405            {
12406                emit_idx += 1;
12407            }
12408        }
12409        #[cfg(feature = "extra-children")]
12410        for extra in extra_iter {
12411            extra.node.write_to(writer).map_err(SerializeError::from)?;
12412        }
12413        Ok(())
12414    }
12415
12416    fn is_empty_element(&self) -> bool {
12417        if !self.user_info.is_empty() {
12418            return false;
12419        }
12420        #[cfg(feature = "extra-children")]
12421        if !self.extra_children.is_empty() {
12422            return false;
12423        }
12424        true
12425    }
12426}
12427
12428impl ToXml for SharedUser {
12429    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
12430        #[allow(unused_mut)]
12431        let mut start = start;
12432        {
12433            let val = &self.guid;
12434            start.push_attribute(("guid", val.as_str()));
12435        }
12436        {
12437            let val = &self.name;
12438            start.push_attribute(("name", val.as_str()));
12439        }
12440        {
12441            let val = &self.id;
12442            {
12443                let s = val.to_string();
12444                start.push_attribute(("id", s.as_str()));
12445            }
12446        }
12447        {
12448            let val = &self.date_time;
12449            start.push_attribute(("dateTime", val.as_str()));
12450        }
12451        #[cfg(feature = "extra-attrs")]
12452        for (key, value) in &self.extra_attrs {
12453            start.push_attribute((key.as_str(), value.as_str()));
12454        }
12455        start
12456    }
12457
12458    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
12459        #[cfg(feature = "extra-children")]
12460        let mut extra_iter = self.extra_children.iter().peekable();
12461        #[cfg(feature = "extra-children")]
12462        let mut emit_idx: usize = 0;
12463        #[cfg(feature = "extra-children")]
12464        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12465            extra_iter
12466                .next()
12467                .unwrap()
12468                .node
12469                .write_to(writer)
12470                .map_err(SerializeError::from)?;
12471        }
12472        if let Some(ref val) = self.extension_list {
12473            val.write_element("extLst", writer)?;
12474        }
12475        #[cfg(feature = "extra-children")]
12476        {
12477            emit_idx += 1;
12478        }
12479        #[cfg(feature = "extra-children")]
12480        for extra in extra_iter {
12481            extra.node.write_to(writer).map_err(SerializeError::from)?;
12482        }
12483        Ok(())
12484    }
12485
12486    fn is_empty_element(&self) -> bool {
12487        if self.extension_list.is_some() {
12488            return false;
12489        }
12490        #[cfg(feature = "extra-children")]
12491        if !self.extra_children.is_empty() {
12492            return false;
12493        }
12494        true
12495    }
12496}
12497
12498impl ToXml for CTMacrosheet {
12499    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
12500        #[cfg(feature = "extra-children")]
12501        let mut extra_iter = self.extra_children.iter().peekable();
12502        #[cfg(feature = "extra-children")]
12503        let mut emit_idx: usize = 0;
12504        #[cfg(feature = "extra-children")]
12505        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12506            extra_iter
12507                .next()
12508                .unwrap()
12509                .node
12510                .write_to(writer)
12511                .map_err(SerializeError::from)?;
12512        }
12513        if let Some(ref val) = self.sheet_properties {
12514            val.write_element("sheetPr", writer)?;
12515        }
12516        #[cfg(feature = "extra-children")]
12517        {
12518            emit_idx += 1;
12519        }
12520        #[cfg(feature = "extra-children")]
12521        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12522            extra_iter
12523                .next()
12524                .unwrap()
12525                .node
12526                .write_to(writer)
12527                .map_err(SerializeError::from)?;
12528        }
12529        if let Some(ref val) = self.dimension {
12530            val.write_element("dimension", writer)?;
12531        }
12532        #[cfg(feature = "extra-children")]
12533        {
12534            emit_idx += 1;
12535        }
12536        #[cfg(feature = "extra-children")]
12537        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12538            extra_iter
12539                .next()
12540                .unwrap()
12541                .node
12542                .write_to(writer)
12543                .map_err(SerializeError::from)?;
12544        }
12545        if let Some(ref val) = self.sheet_views {
12546            val.write_element("sheetViews", writer)?;
12547        }
12548        #[cfg(feature = "extra-children")]
12549        {
12550            emit_idx += 1;
12551        }
12552        #[cfg(feature = "extra-children")]
12553        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12554            extra_iter
12555                .next()
12556                .unwrap()
12557                .node
12558                .write_to(writer)
12559                .map_err(SerializeError::from)?;
12560        }
12561        if let Some(ref val) = self.sheet_format {
12562            val.write_element("sheetFormatPr", writer)?;
12563        }
12564        #[cfg(feature = "extra-children")]
12565        {
12566            emit_idx += 1;
12567        }
12568        for item in &self.cols {
12569            #[cfg(feature = "extra-children")]
12570            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12571                extra_iter
12572                    .next()
12573                    .unwrap()
12574                    .node
12575                    .write_to(writer)
12576                    .map_err(SerializeError::from)?;
12577            }
12578            item.write_element("cols", writer)?;
12579            #[cfg(feature = "extra-children")]
12580            {
12581                emit_idx += 1;
12582            }
12583        }
12584        #[cfg(feature = "extra-children")]
12585        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12586            extra_iter
12587                .next()
12588                .unwrap()
12589                .node
12590                .write_to(writer)
12591                .map_err(SerializeError::from)?;
12592        }
12593        {
12594            let val = &self.sheet_data;
12595            val.write_element("sheetData", writer)?;
12596        }
12597        #[cfg(feature = "extra-children")]
12598        {
12599            emit_idx += 1;
12600        }
12601        #[cfg(feature = "extra-children")]
12602        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12603            extra_iter
12604                .next()
12605                .unwrap()
12606                .node
12607                .write_to(writer)
12608                .map_err(SerializeError::from)?;
12609        }
12610        if let Some(ref val) = self.sheet_protection {
12611            val.write_element("sheetProtection", writer)?;
12612        }
12613        #[cfg(feature = "extra-children")]
12614        {
12615            emit_idx += 1;
12616        }
12617        #[cfg(feature = "extra-children")]
12618        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12619            extra_iter
12620                .next()
12621                .unwrap()
12622                .node
12623                .write_to(writer)
12624                .map_err(SerializeError::from)?;
12625        }
12626        if let Some(ref val) = self.auto_filter {
12627            val.write_element("autoFilter", writer)?;
12628        }
12629        #[cfg(feature = "extra-children")]
12630        {
12631            emit_idx += 1;
12632        }
12633        #[cfg(feature = "extra-children")]
12634        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12635            extra_iter
12636                .next()
12637                .unwrap()
12638                .node
12639                .write_to(writer)
12640                .map_err(SerializeError::from)?;
12641        }
12642        if let Some(ref val) = self.sort_state {
12643            val.write_element("sortState", writer)?;
12644        }
12645        #[cfg(feature = "extra-children")]
12646        {
12647            emit_idx += 1;
12648        }
12649        #[cfg(feature = "extra-children")]
12650        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12651            extra_iter
12652                .next()
12653                .unwrap()
12654                .node
12655                .write_to(writer)
12656                .map_err(SerializeError::from)?;
12657        }
12658        if let Some(ref val) = self.data_consolidate {
12659            val.write_element("dataConsolidate", writer)?;
12660        }
12661        #[cfg(feature = "extra-children")]
12662        {
12663            emit_idx += 1;
12664        }
12665        #[cfg(feature = "extra-children")]
12666        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12667            extra_iter
12668                .next()
12669                .unwrap()
12670                .node
12671                .write_to(writer)
12672                .map_err(SerializeError::from)?;
12673        }
12674        if let Some(ref val) = self.custom_sheet_views {
12675            val.write_element("customSheetViews", writer)?;
12676        }
12677        #[cfg(feature = "extra-children")]
12678        {
12679            emit_idx += 1;
12680        }
12681        #[cfg(feature = "extra-children")]
12682        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12683            extra_iter
12684                .next()
12685                .unwrap()
12686                .node
12687                .write_to(writer)
12688                .map_err(SerializeError::from)?;
12689        }
12690        if let Some(ref val) = self.phonetic_pr {
12691            val.write_element("phoneticPr", writer)?;
12692        }
12693        #[cfg(feature = "extra-children")]
12694        {
12695            emit_idx += 1;
12696        }
12697        for item in &self.conditional_formatting {
12698            #[cfg(feature = "extra-children")]
12699            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12700                extra_iter
12701                    .next()
12702                    .unwrap()
12703                    .node
12704                    .write_to(writer)
12705                    .map_err(SerializeError::from)?;
12706            }
12707            item.write_element("conditionalFormatting", writer)?;
12708            #[cfg(feature = "extra-children")]
12709            {
12710                emit_idx += 1;
12711            }
12712        }
12713        #[cfg(feature = "extra-children")]
12714        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12715            extra_iter
12716                .next()
12717                .unwrap()
12718                .node
12719                .write_to(writer)
12720                .map_err(SerializeError::from)?;
12721        }
12722        if let Some(ref val) = self.print_options {
12723            val.write_element("printOptions", writer)?;
12724        }
12725        #[cfg(feature = "extra-children")]
12726        {
12727            emit_idx += 1;
12728        }
12729        #[cfg(feature = "extra-children")]
12730        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12731            extra_iter
12732                .next()
12733                .unwrap()
12734                .node
12735                .write_to(writer)
12736                .map_err(SerializeError::from)?;
12737        }
12738        if let Some(ref val) = self.page_margins {
12739            val.write_element("pageMargins", writer)?;
12740        }
12741        #[cfg(feature = "extra-children")]
12742        {
12743            emit_idx += 1;
12744        }
12745        #[cfg(feature = "extra-children")]
12746        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12747            extra_iter
12748                .next()
12749                .unwrap()
12750                .node
12751                .write_to(writer)
12752                .map_err(SerializeError::from)?;
12753        }
12754        if let Some(ref val) = self.page_setup {
12755            val.write_element("pageSetup", writer)?;
12756        }
12757        #[cfg(feature = "extra-children")]
12758        {
12759            emit_idx += 1;
12760        }
12761        #[cfg(feature = "extra-children")]
12762        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12763            extra_iter
12764                .next()
12765                .unwrap()
12766                .node
12767                .write_to(writer)
12768                .map_err(SerializeError::from)?;
12769        }
12770        if let Some(ref val) = self.header_footer {
12771            val.write_element("headerFooter", writer)?;
12772        }
12773        #[cfg(feature = "extra-children")]
12774        {
12775            emit_idx += 1;
12776        }
12777        #[cfg(feature = "extra-children")]
12778        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12779            extra_iter
12780                .next()
12781                .unwrap()
12782                .node
12783                .write_to(writer)
12784                .map_err(SerializeError::from)?;
12785        }
12786        if let Some(ref val) = self.row_breaks {
12787            val.write_element("rowBreaks", writer)?;
12788        }
12789        #[cfg(feature = "extra-children")]
12790        {
12791            emit_idx += 1;
12792        }
12793        #[cfg(feature = "extra-children")]
12794        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12795            extra_iter
12796                .next()
12797                .unwrap()
12798                .node
12799                .write_to(writer)
12800                .map_err(SerializeError::from)?;
12801        }
12802        if let Some(ref val) = self.col_breaks {
12803            val.write_element("colBreaks", writer)?;
12804        }
12805        #[cfg(feature = "extra-children")]
12806        {
12807            emit_idx += 1;
12808        }
12809        #[cfg(feature = "extra-children")]
12810        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12811            extra_iter
12812                .next()
12813                .unwrap()
12814                .node
12815                .write_to(writer)
12816                .map_err(SerializeError::from)?;
12817        }
12818        if let Some(ref val) = self.custom_properties {
12819            val.write_element("customProperties", writer)?;
12820        }
12821        #[cfg(feature = "extra-children")]
12822        {
12823            emit_idx += 1;
12824        }
12825        #[cfg(feature = "extra-children")]
12826        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12827            extra_iter
12828                .next()
12829                .unwrap()
12830                .node
12831                .write_to(writer)
12832                .map_err(SerializeError::from)?;
12833        }
12834        if let Some(ref val) = self.drawing {
12835            val.write_element("drawing", writer)?;
12836        }
12837        #[cfg(feature = "extra-children")]
12838        {
12839            emit_idx += 1;
12840        }
12841        #[cfg(feature = "extra-children")]
12842        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12843            extra_iter
12844                .next()
12845                .unwrap()
12846                .node
12847                .write_to(writer)
12848                .map_err(SerializeError::from)?;
12849        }
12850        if let Some(ref val) = self.legacy_drawing {
12851            val.write_element("legacyDrawing", writer)?;
12852        }
12853        #[cfg(feature = "extra-children")]
12854        {
12855            emit_idx += 1;
12856        }
12857        #[cfg(feature = "extra-children")]
12858        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12859            extra_iter
12860                .next()
12861                .unwrap()
12862                .node
12863                .write_to(writer)
12864                .map_err(SerializeError::from)?;
12865        }
12866        if let Some(ref val) = self.legacy_drawing_h_f {
12867            val.write_element("legacyDrawingHF", writer)?;
12868        }
12869        #[cfg(feature = "extra-children")]
12870        {
12871            emit_idx += 1;
12872        }
12873        #[cfg(feature = "extra-children")]
12874        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12875            extra_iter
12876                .next()
12877                .unwrap()
12878                .node
12879                .write_to(writer)
12880                .map_err(SerializeError::from)?;
12881        }
12882        if let Some(ref val) = self.drawing_h_f {
12883            val.write_element("drawingHF", writer)?;
12884        }
12885        #[cfg(feature = "extra-children")]
12886        {
12887            emit_idx += 1;
12888        }
12889        #[cfg(feature = "extra-children")]
12890        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12891            extra_iter
12892                .next()
12893                .unwrap()
12894                .node
12895                .write_to(writer)
12896                .map_err(SerializeError::from)?;
12897        }
12898        if let Some(ref val) = self.picture {
12899            val.write_element("picture", writer)?;
12900        }
12901        #[cfg(feature = "extra-children")]
12902        {
12903            emit_idx += 1;
12904        }
12905        #[cfg(feature = "extra-children")]
12906        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12907            extra_iter
12908                .next()
12909                .unwrap()
12910                .node
12911                .write_to(writer)
12912                .map_err(SerializeError::from)?;
12913        }
12914        if let Some(ref val) = self.ole_objects {
12915            val.write_element("oleObjects", writer)?;
12916        }
12917        #[cfg(feature = "extra-children")]
12918        {
12919            emit_idx += 1;
12920        }
12921        #[cfg(feature = "extra-children")]
12922        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12923            extra_iter
12924                .next()
12925                .unwrap()
12926                .node
12927                .write_to(writer)
12928                .map_err(SerializeError::from)?;
12929        }
12930        if let Some(ref val) = self.extension_list {
12931            val.write_element("extLst", writer)?;
12932        }
12933        #[cfg(feature = "extra-children")]
12934        {
12935            emit_idx += 1;
12936        }
12937        #[cfg(feature = "extra-children")]
12938        for extra in extra_iter {
12939            extra.node.write_to(writer).map_err(SerializeError::from)?;
12940        }
12941        Ok(())
12942    }
12943
12944    fn is_empty_element(&self) -> bool {
12945        if self.sheet_properties.is_some() {
12946            return false;
12947        }
12948        if self.dimension.is_some() {
12949            return false;
12950        }
12951        if self.sheet_views.is_some() {
12952            return false;
12953        }
12954        if self.sheet_format.is_some() {
12955            return false;
12956        }
12957        if !self.cols.is_empty() {
12958            return false;
12959        }
12960        false
12961    }
12962}
12963
12964impl ToXml for CTDialogsheet {
12965    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
12966        #[cfg(feature = "extra-children")]
12967        let mut extra_iter = self.extra_children.iter().peekable();
12968        #[cfg(feature = "extra-children")]
12969        let mut emit_idx: usize = 0;
12970        #[cfg(feature = "extra-children")]
12971        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12972            extra_iter
12973                .next()
12974                .unwrap()
12975                .node
12976                .write_to(writer)
12977                .map_err(SerializeError::from)?;
12978        }
12979        if let Some(ref val) = self.sheet_properties {
12980            val.write_element("sheetPr", writer)?;
12981        }
12982        #[cfg(feature = "extra-children")]
12983        {
12984            emit_idx += 1;
12985        }
12986        #[cfg(feature = "extra-children")]
12987        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
12988            extra_iter
12989                .next()
12990                .unwrap()
12991                .node
12992                .write_to(writer)
12993                .map_err(SerializeError::from)?;
12994        }
12995        if let Some(ref val) = self.sheet_views {
12996            val.write_element("sheetViews", writer)?;
12997        }
12998        #[cfg(feature = "extra-children")]
12999        {
13000            emit_idx += 1;
13001        }
13002        #[cfg(feature = "extra-children")]
13003        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13004            extra_iter
13005                .next()
13006                .unwrap()
13007                .node
13008                .write_to(writer)
13009                .map_err(SerializeError::from)?;
13010        }
13011        if let Some(ref val) = self.sheet_format {
13012            val.write_element("sheetFormatPr", writer)?;
13013        }
13014        #[cfg(feature = "extra-children")]
13015        {
13016            emit_idx += 1;
13017        }
13018        #[cfg(feature = "extra-children")]
13019        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13020            extra_iter
13021                .next()
13022                .unwrap()
13023                .node
13024                .write_to(writer)
13025                .map_err(SerializeError::from)?;
13026        }
13027        if let Some(ref val) = self.sheet_protection {
13028            val.write_element("sheetProtection", writer)?;
13029        }
13030        #[cfg(feature = "extra-children")]
13031        {
13032            emit_idx += 1;
13033        }
13034        #[cfg(feature = "extra-children")]
13035        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13036            extra_iter
13037                .next()
13038                .unwrap()
13039                .node
13040                .write_to(writer)
13041                .map_err(SerializeError::from)?;
13042        }
13043        if let Some(ref val) = self.custom_sheet_views {
13044            val.write_element("customSheetViews", writer)?;
13045        }
13046        #[cfg(feature = "extra-children")]
13047        {
13048            emit_idx += 1;
13049        }
13050        #[cfg(feature = "extra-children")]
13051        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13052            extra_iter
13053                .next()
13054                .unwrap()
13055                .node
13056                .write_to(writer)
13057                .map_err(SerializeError::from)?;
13058        }
13059        if let Some(ref val) = self.print_options {
13060            val.write_element("printOptions", writer)?;
13061        }
13062        #[cfg(feature = "extra-children")]
13063        {
13064            emit_idx += 1;
13065        }
13066        #[cfg(feature = "extra-children")]
13067        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13068            extra_iter
13069                .next()
13070                .unwrap()
13071                .node
13072                .write_to(writer)
13073                .map_err(SerializeError::from)?;
13074        }
13075        if let Some(ref val) = self.page_margins {
13076            val.write_element("pageMargins", writer)?;
13077        }
13078        #[cfg(feature = "extra-children")]
13079        {
13080            emit_idx += 1;
13081        }
13082        #[cfg(feature = "extra-children")]
13083        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13084            extra_iter
13085                .next()
13086                .unwrap()
13087                .node
13088                .write_to(writer)
13089                .map_err(SerializeError::from)?;
13090        }
13091        if let Some(ref val) = self.page_setup {
13092            val.write_element("pageSetup", writer)?;
13093        }
13094        #[cfg(feature = "extra-children")]
13095        {
13096            emit_idx += 1;
13097        }
13098        #[cfg(feature = "extra-children")]
13099        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13100            extra_iter
13101                .next()
13102                .unwrap()
13103                .node
13104                .write_to(writer)
13105                .map_err(SerializeError::from)?;
13106        }
13107        if let Some(ref val) = self.header_footer {
13108            val.write_element("headerFooter", writer)?;
13109        }
13110        #[cfg(feature = "extra-children")]
13111        {
13112            emit_idx += 1;
13113        }
13114        #[cfg(feature = "extra-children")]
13115        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13116            extra_iter
13117                .next()
13118                .unwrap()
13119                .node
13120                .write_to(writer)
13121                .map_err(SerializeError::from)?;
13122        }
13123        if let Some(ref val) = self.drawing {
13124            val.write_element("drawing", writer)?;
13125        }
13126        #[cfg(feature = "extra-children")]
13127        {
13128            emit_idx += 1;
13129        }
13130        #[cfg(feature = "extra-children")]
13131        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13132            extra_iter
13133                .next()
13134                .unwrap()
13135                .node
13136                .write_to(writer)
13137                .map_err(SerializeError::from)?;
13138        }
13139        if let Some(ref val) = self.legacy_drawing {
13140            val.write_element("legacyDrawing", writer)?;
13141        }
13142        #[cfg(feature = "extra-children")]
13143        {
13144            emit_idx += 1;
13145        }
13146        #[cfg(feature = "extra-children")]
13147        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13148            extra_iter
13149                .next()
13150                .unwrap()
13151                .node
13152                .write_to(writer)
13153                .map_err(SerializeError::from)?;
13154        }
13155        if let Some(ref val) = self.legacy_drawing_h_f {
13156            val.write_element("legacyDrawingHF", writer)?;
13157        }
13158        #[cfg(feature = "extra-children")]
13159        {
13160            emit_idx += 1;
13161        }
13162        #[cfg(feature = "extra-children")]
13163        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13164            extra_iter
13165                .next()
13166                .unwrap()
13167                .node
13168                .write_to(writer)
13169                .map_err(SerializeError::from)?;
13170        }
13171        if let Some(ref val) = self.drawing_h_f {
13172            val.write_element("drawingHF", writer)?;
13173        }
13174        #[cfg(feature = "extra-children")]
13175        {
13176            emit_idx += 1;
13177        }
13178        #[cfg(feature = "extra-children")]
13179        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13180            extra_iter
13181                .next()
13182                .unwrap()
13183                .node
13184                .write_to(writer)
13185                .map_err(SerializeError::from)?;
13186        }
13187        if let Some(ref val) = self.ole_objects {
13188            val.write_element("oleObjects", writer)?;
13189        }
13190        #[cfg(feature = "extra-children")]
13191        {
13192            emit_idx += 1;
13193        }
13194        #[cfg(feature = "extra-children")]
13195        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13196            extra_iter
13197                .next()
13198                .unwrap()
13199                .node
13200                .write_to(writer)
13201                .map_err(SerializeError::from)?;
13202        }
13203        if let Some(ref val) = self.controls {
13204            val.write_element("controls", writer)?;
13205        }
13206        #[cfg(feature = "extra-children")]
13207        {
13208            emit_idx += 1;
13209        }
13210        #[cfg(feature = "extra-children")]
13211        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13212            extra_iter
13213                .next()
13214                .unwrap()
13215                .node
13216                .write_to(writer)
13217                .map_err(SerializeError::from)?;
13218        }
13219        if let Some(ref val) = self.extension_list {
13220            val.write_element("extLst", writer)?;
13221        }
13222        #[cfg(feature = "extra-children")]
13223        {
13224            emit_idx += 1;
13225        }
13226        #[cfg(feature = "extra-children")]
13227        for extra in extra_iter {
13228            extra.node.write_to(writer).map_err(SerializeError::from)?;
13229        }
13230        Ok(())
13231    }
13232
13233    fn is_empty_element(&self) -> bool {
13234        if self.sheet_properties.is_some() {
13235            return false;
13236        }
13237        if self.sheet_views.is_some() {
13238            return false;
13239        }
13240        if self.sheet_format.is_some() {
13241            return false;
13242        }
13243        if self.sheet_protection.is_some() {
13244            return false;
13245        }
13246        if self.custom_sheet_views.is_some() {
13247            return false;
13248        }
13249        if self.print_options.is_some() {
13250            return false;
13251        }
13252        if self.page_margins.is_some() {
13253            return false;
13254        }
13255        if self.page_setup.is_some() {
13256            return false;
13257        }
13258        if self.header_footer.is_some() {
13259            return false;
13260        }
13261        if self.drawing.is_some() {
13262            return false;
13263        }
13264        if self.legacy_drawing.is_some() {
13265            return false;
13266        }
13267        if self.legacy_drawing_h_f.is_some() {
13268            return false;
13269        }
13270        if self.drawing_h_f.is_some() {
13271            return false;
13272        }
13273        if self.ole_objects.is_some() {
13274            return false;
13275        }
13276        if self.controls.is_some() {
13277            return false;
13278        }
13279        if self.extension_list.is_some() {
13280            return false;
13281        }
13282        #[cfg(feature = "extra-children")]
13283        if !self.extra_children.is_empty() {
13284            return false;
13285        }
13286        true
13287    }
13288}
13289
13290impl ToXml for Worksheet {
13291    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
13292        #[cfg(feature = "extra-children")]
13293        let mut extra_iter = self.extra_children.iter().peekable();
13294        #[cfg(feature = "extra-children")]
13295        let mut emit_idx: usize = 0;
13296        #[cfg(feature = "extra-children")]
13297        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13298            extra_iter
13299                .next()
13300                .unwrap()
13301                .node
13302                .write_to(writer)
13303                .map_err(SerializeError::from)?;
13304        }
13305        #[cfg(feature = "sml-styling")]
13306        if let Some(ref val) = self.sheet_properties {
13307            val.write_element("sheetPr", writer)?;
13308        }
13309        #[cfg(feature = "extra-children")]
13310        {
13311            emit_idx += 1;
13312        }
13313        #[cfg(feature = "extra-children")]
13314        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13315            extra_iter
13316                .next()
13317                .unwrap()
13318                .node
13319                .write_to(writer)
13320                .map_err(SerializeError::from)?;
13321        }
13322        if let Some(ref val) = self.dimension {
13323            val.write_element("dimension", writer)?;
13324        }
13325        #[cfg(feature = "extra-children")]
13326        {
13327            emit_idx += 1;
13328        }
13329        #[cfg(feature = "extra-children")]
13330        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13331            extra_iter
13332                .next()
13333                .unwrap()
13334                .node
13335                .write_to(writer)
13336                .map_err(SerializeError::from)?;
13337        }
13338        if let Some(ref val) = self.sheet_views {
13339            val.write_element("sheetViews", writer)?;
13340        }
13341        #[cfg(feature = "extra-children")]
13342        {
13343            emit_idx += 1;
13344        }
13345        #[cfg(feature = "extra-children")]
13346        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13347            extra_iter
13348                .next()
13349                .unwrap()
13350                .node
13351                .write_to(writer)
13352                .map_err(SerializeError::from)?;
13353        }
13354        #[cfg(feature = "sml-styling")]
13355        if let Some(ref val) = self.sheet_format {
13356            val.write_element("sheetFormatPr", writer)?;
13357        }
13358        #[cfg(feature = "extra-children")]
13359        {
13360            emit_idx += 1;
13361        }
13362        #[cfg(feature = "sml-styling")]
13363        for item in &self.cols {
13364            #[cfg(feature = "extra-children")]
13365            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13366                extra_iter
13367                    .next()
13368                    .unwrap()
13369                    .node
13370                    .write_to(writer)
13371                    .map_err(SerializeError::from)?;
13372            }
13373            item.write_element("cols", writer)?;
13374            #[cfg(feature = "extra-children")]
13375            {
13376                emit_idx += 1;
13377            }
13378        }
13379        #[cfg(feature = "extra-children")]
13380        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13381            extra_iter
13382                .next()
13383                .unwrap()
13384                .node
13385                .write_to(writer)
13386                .map_err(SerializeError::from)?;
13387        }
13388        {
13389            let val = &self.sheet_data;
13390            val.write_element("sheetData", writer)?;
13391        }
13392        #[cfg(feature = "extra-children")]
13393        {
13394            emit_idx += 1;
13395        }
13396        #[cfg(feature = "extra-children")]
13397        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13398            extra_iter
13399                .next()
13400                .unwrap()
13401                .node
13402                .write_to(writer)
13403                .map_err(SerializeError::from)?;
13404        }
13405        #[cfg(feature = "sml-formulas")]
13406        if let Some(ref val) = self.sheet_calc_pr {
13407            val.write_element("sheetCalcPr", writer)?;
13408        }
13409        #[cfg(feature = "extra-children")]
13410        {
13411            emit_idx += 1;
13412        }
13413        #[cfg(feature = "extra-children")]
13414        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13415            extra_iter
13416                .next()
13417                .unwrap()
13418                .node
13419                .write_to(writer)
13420                .map_err(SerializeError::from)?;
13421        }
13422        #[cfg(feature = "sml-protection")]
13423        if let Some(ref val) = self.sheet_protection {
13424            val.write_element("sheetProtection", writer)?;
13425        }
13426        #[cfg(feature = "extra-children")]
13427        {
13428            emit_idx += 1;
13429        }
13430        #[cfg(feature = "extra-children")]
13431        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13432            extra_iter
13433                .next()
13434                .unwrap()
13435                .node
13436                .write_to(writer)
13437                .map_err(SerializeError::from)?;
13438        }
13439        #[cfg(feature = "sml-protection")]
13440        if let Some(ref val) = self.protected_ranges {
13441            val.write_element("protectedRanges", writer)?;
13442        }
13443        #[cfg(feature = "extra-children")]
13444        {
13445            emit_idx += 1;
13446        }
13447        #[cfg(feature = "extra-children")]
13448        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13449            extra_iter
13450                .next()
13451                .unwrap()
13452                .node
13453                .write_to(writer)
13454                .map_err(SerializeError::from)?;
13455        }
13456        #[cfg(feature = "sml-formulas-advanced")]
13457        if let Some(ref val) = self.scenarios {
13458            val.write_element("scenarios", writer)?;
13459        }
13460        #[cfg(feature = "extra-children")]
13461        {
13462            emit_idx += 1;
13463        }
13464        #[cfg(feature = "extra-children")]
13465        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13466            extra_iter
13467                .next()
13468                .unwrap()
13469                .node
13470                .write_to(writer)
13471                .map_err(SerializeError::from)?;
13472        }
13473        #[cfg(feature = "sml-filtering")]
13474        if let Some(ref val) = self.auto_filter {
13475            val.write_element("autoFilter", writer)?;
13476        }
13477        #[cfg(feature = "extra-children")]
13478        {
13479            emit_idx += 1;
13480        }
13481        #[cfg(feature = "extra-children")]
13482        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13483            extra_iter
13484                .next()
13485                .unwrap()
13486                .node
13487                .write_to(writer)
13488                .map_err(SerializeError::from)?;
13489        }
13490        #[cfg(feature = "sml-filtering")]
13491        if let Some(ref val) = self.sort_state {
13492            val.write_element("sortState", writer)?;
13493        }
13494        #[cfg(feature = "extra-children")]
13495        {
13496            emit_idx += 1;
13497        }
13498        #[cfg(feature = "extra-children")]
13499        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13500            extra_iter
13501                .next()
13502                .unwrap()
13503                .node
13504                .write_to(writer)
13505                .map_err(SerializeError::from)?;
13506        }
13507        #[cfg(feature = "sml-formulas-advanced")]
13508        if let Some(ref val) = self.data_consolidate {
13509            val.write_element("dataConsolidate", writer)?;
13510        }
13511        #[cfg(feature = "extra-children")]
13512        {
13513            emit_idx += 1;
13514        }
13515        #[cfg(feature = "extra-children")]
13516        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13517            extra_iter
13518                .next()
13519                .unwrap()
13520                .node
13521                .write_to(writer)
13522                .map_err(SerializeError::from)?;
13523        }
13524        #[cfg(feature = "sml-structure")]
13525        if let Some(ref val) = self.custom_sheet_views {
13526            val.write_element("customSheetViews", writer)?;
13527        }
13528        #[cfg(feature = "extra-children")]
13529        {
13530            emit_idx += 1;
13531        }
13532        #[cfg(feature = "extra-children")]
13533        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13534            extra_iter
13535                .next()
13536                .unwrap()
13537                .node
13538                .write_to(writer)
13539                .map_err(SerializeError::from)?;
13540        }
13541        if let Some(ref val) = self.merged_cells {
13542            val.write_element("mergeCells", writer)?;
13543        }
13544        #[cfg(feature = "extra-children")]
13545        {
13546            emit_idx += 1;
13547        }
13548        #[cfg(feature = "extra-children")]
13549        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13550            extra_iter
13551                .next()
13552                .unwrap()
13553                .node
13554                .write_to(writer)
13555                .map_err(SerializeError::from)?;
13556        }
13557        #[cfg(feature = "sml-i18n")]
13558        if let Some(ref val) = self.phonetic_pr {
13559            val.write_element("phoneticPr", writer)?;
13560        }
13561        #[cfg(feature = "extra-children")]
13562        {
13563            emit_idx += 1;
13564        }
13565        #[cfg(feature = "sml-styling")]
13566        for item in &self.conditional_formatting {
13567            #[cfg(feature = "extra-children")]
13568            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13569                extra_iter
13570                    .next()
13571                    .unwrap()
13572                    .node
13573                    .write_to(writer)
13574                    .map_err(SerializeError::from)?;
13575            }
13576            item.write_element("conditionalFormatting", writer)?;
13577            #[cfg(feature = "extra-children")]
13578            {
13579                emit_idx += 1;
13580            }
13581        }
13582        #[cfg(feature = "extra-children")]
13583        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13584            extra_iter
13585                .next()
13586                .unwrap()
13587                .node
13588                .write_to(writer)
13589                .map_err(SerializeError::from)?;
13590        }
13591        #[cfg(feature = "sml-validation")]
13592        if let Some(ref val) = self.data_validations {
13593            val.write_element("dataValidations", writer)?;
13594        }
13595        #[cfg(feature = "extra-children")]
13596        {
13597            emit_idx += 1;
13598        }
13599        #[cfg(feature = "extra-children")]
13600        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13601            extra_iter
13602                .next()
13603                .unwrap()
13604                .node
13605                .write_to(writer)
13606                .map_err(SerializeError::from)?;
13607        }
13608        #[cfg(feature = "sml-hyperlinks")]
13609        if let Some(ref val) = self.hyperlinks {
13610            val.write_element("hyperlinks", writer)?;
13611        }
13612        #[cfg(feature = "extra-children")]
13613        {
13614            emit_idx += 1;
13615        }
13616        #[cfg(feature = "extra-children")]
13617        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13618            extra_iter
13619                .next()
13620                .unwrap()
13621                .node
13622                .write_to(writer)
13623                .map_err(SerializeError::from)?;
13624        }
13625        #[cfg(feature = "sml-layout")]
13626        if let Some(ref val) = self.print_options {
13627            val.write_element("printOptions", writer)?;
13628        }
13629        #[cfg(feature = "extra-children")]
13630        {
13631            emit_idx += 1;
13632        }
13633        #[cfg(feature = "extra-children")]
13634        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13635            extra_iter
13636                .next()
13637                .unwrap()
13638                .node
13639                .write_to(writer)
13640                .map_err(SerializeError::from)?;
13641        }
13642        #[cfg(feature = "sml-layout")]
13643        if let Some(ref val) = self.page_margins {
13644            val.write_element("pageMargins", writer)?;
13645        }
13646        #[cfg(feature = "extra-children")]
13647        {
13648            emit_idx += 1;
13649        }
13650        #[cfg(feature = "extra-children")]
13651        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13652            extra_iter
13653                .next()
13654                .unwrap()
13655                .node
13656                .write_to(writer)
13657                .map_err(SerializeError::from)?;
13658        }
13659        #[cfg(feature = "sml-layout")]
13660        if let Some(ref val) = self.page_setup {
13661            val.write_element("pageSetup", writer)?;
13662        }
13663        #[cfg(feature = "extra-children")]
13664        {
13665            emit_idx += 1;
13666        }
13667        #[cfg(feature = "extra-children")]
13668        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13669            extra_iter
13670                .next()
13671                .unwrap()
13672                .node
13673                .write_to(writer)
13674                .map_err(SerializeError::from)?;
13675        }
13676        #[cfg(feature = "sml-layout")]
13677        if let Some(ref val) = self.header_footer {
13678            val.write_element("headerFooter", writer)?;
13679        }
13680        #[cfg(feature = "extra-children")]
13681        {
13682            emit_idx += 1;
13683        }
13684        #[cfg(feature = "extra-children")]
13685        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13686            extra_iter
13687                .next()
13688                .unwrap()
13689                .node
13690                .write_to(writer)
13691                .map_err(SerializeError::from)?;
13692        }
13693        #[cfg(feature = "sml-layout")]
13694        if let Some(ref val) = self.row_breaks {
13695            val.write_element("rowBreaks", writer)?;
13696        }
13697        #[cfg(feature = "extra-children")]
13698        {
13699            emit_idx += 1;
13700        }
13701        #[cfg(feature = "extra-children")]
13702        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13703            extra_iter
13704                .next()
13705                .unwrap()
13706                .node
13707                .write_to(writer)
13708                .map_err(SerializeError::from)?;
13709        }
13710        #[cfg(feature = "sml-layout")]
13711        if let Some(ref val) = self.col_breaks {
13712            val.write_element("colBreaks", writer)?;
13713        }
13714        #[cfg(feature = "extra-children")]
13715        {
13716            emit_idx += 1;
13717        }
13718        #[cfg(feature = "extra-children")]
13719        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13720            extra_iter
13721                .next()
13722                .unwrap()
13723                .node
13724                .write_to(writer)
13725                .map_err(SerializeError::from)?;
13726        }
13727        #[cfg(feature = "sml-metadata")]
13728        if let Some(ref val) = self.custom_properties {
13729            val.write_element("customProperties", writer)?;
13730        }
13731        #[cfg(feature = "extra-children")]
13732        {
13733            emit_idx += 1;
13734        }
13735        #[cfg(feature = "extra-children")]
13736        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13737            extra_iter
13738                .next()
13739                .unwrap()
13740                .node
13741                .write_to(writer)
13742                .map_err(SerializeError::from)?;
13743        }
13744        #[cfg(feature = "sml-formulas-advanced")]
13745        if let Some(ref val) = self.cell_watches {
13746            val.write_element("cellWatches", writer)?;
13747        }
13748        #[cfg(feature = "extra-children")]
13749        {
13750            emit_idx += 1;
13751        }
13752        #[cfg(feature = "extra-children")]
13753        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13754            extra_iter
13755                .next()
13756                .unwrap()
13757                .node
13758                .write_to(writer)
13759                .map_err(SerializeError::from)?;
13760        }
13761        #[cfg(feature = "sml-validation")]
13762        if let Some(ref val) = self.ignored_errors {
13763            val.write_element("ignoredErrors", writer)?;
13764        }
13765        #[cfg(feature = "extra-children")]
13766        {
13767            emit_idx += 1;
13768        }
13769        #[cfg(feature = "extra-children")]
13770        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13771            extra_iter
13772                .next()
13773                .unwrap()
13774                .node
13775                .write_to(writer)
13776                .map_err(SerializeError::from)?;
13777        }
13778        #[cfg(feature = "sml-metadata")]
13779        if let Some(ref val) = self.smart_tags {
13780            val.write_element("smartTags", writer)?;
13781        }
13782        #[cfg(feature = "extra-children")]
13783        {
13784            emit_idx += 1;
13785        }
13786        #[cfg(feature = "extra-children")]
13787        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13788            extra_iter
13789                .next()
13790                .unwrap()
13791                .node
13792                .write_to(writer)
13793                .map_err(SerializeError::from)?;
13794        }
13795        #[cfg(feature = "sml-drawings")]
13796        if let Some(ref val) = self.drawing {
13797            val.write_element("drawing", writer)?;
13798        }
13799        #[cfg(feature = "extra-children")]
13800        {
13801            emit_idx += 1;
13802        }
13803        #[cfg(feature = "extra-children")]
13804        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13805            extra_iter
13806                .next()
13807                .unwrap()
13808                .node
13809                .write_to(writer)
13810                .map_err(SerializeError::from)?;
13811        }
13812        #[cfg(feature = "sml-comments")]
13813        if let Some(ref val) = self.legacy_drawing {
13814            val.write_element("legacyDrawing", writer)?;
13815        }
13816        #[cfg(feature = "extra-children")]
13817        {
13818            emit_idx += 1;
13819        }
13820        #[cfg(feature = "extra-children")]
13821        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13822            extra_iter
13823                .next()
13824                .unwrap()
13825                .node
13826                .write_to(writer)
13827                .map_err(SerializeError::from)?;
13828        }
13829        #[cfg(feature = "sml-layout")]
13830        if let Some(ref val) = self.legacy_drawing_h_f {
13831            val.write_element("legacyDrawingHF", writer)?;
13832        }
13833        #[cfg(feature = "extra-children")]
13834        {
13835            emit_idx += 1;
13836        }
13837        #[cfg(feature = "extra-children")]
13838        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13839            extra_iter
13840                .next()
13841                .unwrap()
13842                .node
13843                .write_to(writer)
13844                .map_err(SerializeError::from)?;
13845        }
13846        #[cfg(feature = "sml-drawings")]
13847        if let Some(ref val) = self.drawing_h_f {
13848            val.write_element("drawingHF", writer)?;
13849        }
13850        #[cfg(feature = "extra-children")]
13851        {
13852            emit_idx += 1;
13853        }
13854        #[cfg(feature = "extra-children")]
13855        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13856            extra_iter
13857                .next()
13858                .unwrap()
13859                .node
13860                .write_to(writer)
13861                .map_err(SerializeError::from)?;
13862        }
13863        #[cfg(feature = "sml-drawings")]
13864        if let Some(ref val) = self.picture {
13865            val.write_element("picture", writer)?;
13866        }
13867        #[cfg(feature = "extra-children")]
13868        {
13869            emit_idx += 1;
13870        }
13871        #[cfg(feature = "extra-children")]
13872        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13873            extra_iter
13874                .next()
13875                .unwrap()
13876                .node
13877                .write_to(writer)
13878                .map_err(SerializeError::from)?;
13879        }
13880        #[cfg(feature = "sml-external")]
13881        if let Some(ref val) = self.ole_objects {
13882            val.write_element("oleObjects", writer)?;
13883        }
13884        #[cfg(feature = "extra-children")]
13885        {
13886            emit_idx += 1;
13887        }
13888        #[cfg(feature = "extra-children")]
13889        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13890            extra_iter
13891                .next()
13892                .unwrap()
13893                .node
13894                .write_to(writer)
13895                .map_err(SerializeError::from)?;
13896        }
13897        #[cfg(feature = "sml-external")]
13898        if let Some(ref val) = self.controls {
13899            val.write_element("controls", writer)?;
13900        }
13901        #[cfg(feature = "extra-children")]
13902        {
13903            emit_idx += 1;
13904        }
13905        #[cfg(feature = "extra-children")]
13906        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13907            extra_iter
13908                .next()
13909                .unwrap()
13910                .node
13911                .write_to(writer)
13912                .map_err(SerializeError::from)?;
13913        }
13914        #[cfg(feature = "sml-external")]
13915        if let Some(ref val) = self.web_publish_items {
13916            val.write_element("webPublishItems", writer)?;
13917        }
13918        #[cfg(feature = "extra-children")]
13919        {
13920            emit_idx += 1;
13921        }
13922        #[cfg(feature = "extra-children")]
13923        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13924            extra_iter
13925                .next()
13926                .unwrap()
13927                .node
13928                .write_to(writer)
13929                .map_err(SerializeError::from)?;
13930        }
13931        #[cfg(feature = "sml-tables")]
13932        if let Some(ref val) = self.table_parts {
13933            val.write_element("tableParts", writer)?;
13934        }
13935        #[cfg(feature = "extra-children")]
13936        {
13937            emit_idx += 1;
13938        }
13939        #[cfg(feature = "extra-children")]
13940        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13941            extra_iter
13942                .next()
13943                .unwrap()
13944                .node
13945                .write_to(writer)
13946                .map_err(SerializeError::from)?;
13947        }
13948        #[cfg(feature = "sml-extensions")]
13949        if let Some(ref val) = self.extension_list {
13950            val.write_element("extLst", writer)?;
13951        }
13952        #[cfg(feature = "extra-children")]
13953        {
13954            emit_idx += 1;
13955        }
13956        #[cfg(feature = "extra-children")]
13957        for extra in extra_iter {
13958            extra.node.write_to(writer).map_err(SerializeError::from)?;
13959        }
13960        Ok(())
13961    }
13962
13963    fn is_empty_element(&self) -> bool {
13964        #[cfg(feature = "sml-styling")]
13965        if self.sheet_properties.is_some() {
13966            return false;
13967        }
13968        if self.dimension.is_some() {
13969            return false;
13970        }
13971        if self.sheet_views.is_some() {
13972            return false;
13973        }
13974        #[cfg(feature = "sml-styling")]
13975        if self.sheet_format.is_some() {
13976            return false;
13977        }
13978        #[cfg(feature = "sml-styling")]
13979        if !self.cols.is_empty() {
13980            return false;
13981        }
13982        false
13983    }
13984}
13985
13986impl ToXml for SheetData {
13987    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
13988        #[cfg(feature = "extra-children")]
13989        let mut extra_iter = self.extra_children.iter().peekable();
13990        #[cfg(feature = "extra-children")]
13991        let mut emit_idx: usize = 0;
13992        for item in &self.row {
13993            #[cfg(feature = "extra-children")]
13994            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
13995                extra_iter
13996                    .next()
13997                    .unwrap()
13998                    .node
13999                    .write_to(writer)
14000                    .map_err(SerializeError::from)?;
14001            }
14002            item.write_element("row", writer)?;
14003            #[cfg(feature = "extra-children")]
14004            {
14005                emit_idx += 1;
14006            }
14007        }
14008        #[cfg(feature = "extra-children")]
14009        for extra in extra_iter {
14010            extra.node.write_to(writer).map_err(SerializeError::from)?;
14011        }
14012        Ok(())
14013    }
14014
14015    fn is_empty_element(&self) -> bool {
14016        if !self.row.is_empty() {
14017            return false;
14018        }
14019        #[cfg(feature = "extra-children")]
14020        if !self.extra_children.is_empty() {
14021            return false;
14022        }
14023        true
14024    }
14025}
14026
14027impl ToXml for SheetCalcProperties {
14028    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14029        #[allow(unused_mut)]
14030        let mut start = start;
14031        if let Some(ref val) = self.full_calc_on_load {
14032            start.push_attribute(("fullCalcOnLoad", if *val { "1" } else { "0" }));
14033        }
14034        #[cfg(feature = "extra-attrs")]
14035        for (key, value) in &self.extra_attrs {
14036            start.push_attribute((key.as_str(), value.as_str()));
14037        }
14038        start
14039    }
14040
14041    fn is_empty_element(&self) -> bool {
14042        true
14043    }
14044}
14045
14046impl ToXml for SheetFormat {
14047    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14048        #[allow(unused_mut)]
14049        let mut start = start;
14050        if let Some(ref val) = self.base_col_width {
14051            {
14052                let s = val.to_string();
14053                start.push_attribute(("baseColWidth", s.as_str()));
14054            }
14055        }
14056        if let Some(ref val) = self.default_col_width {
14057            {
14058                let s = val.to_string();
14059                start.push_attribute(("defaultColWidth", s.as_str()));
14060            }
14061        }
14062        {
14063            let val = &self.default_row_height;
14064            {
14065                let s = val.to_string();
14066                start.push_attribute(("defaultRowHeight", s.as_str()));
14067            }
14068        }
14069        if let Some(ref val) = self.custom_height {
14070            start.push_attribute(("customHeight", if *val { "1" } else { "0" }));
14071        }
14072        if let Some(ref val) = self.zero_height {
14073            start.push_attribute(("zeroHeight", if *val { "1" } else { "0" }));
14074        }
14075        if let Some(ref val) = self.thick_top {
14076            start.push_attribute(("thickTop", if *val { "1" } else { "0" }));
14077        }
14078        if let Some(ref val) = self.thick_bottom {
14079            start.push_attribute(("thickBottom", if *val { "1" } else { "0" }));
14080        }
14081        if let Some(ref val) = self.outline_level_row {
14082            {
14083                let s = val.to_string();
14084                start.push_attribute(("outlineLevelRow", s.as_str()));
14085            }
14086        }
14087        if let Some(ref val) = self.outline_level_col {
14088            {
14089                let s = val.to_string();
14090                start.push_attribute(("outlineLevelCol", s.as_str()));
14091            }
14092        }
14093        #[cfg(feature = "extra-attrs")]
14094        for (key, value) in &self.extra_attrs {
14095            start.push_attribute((key.as_str(), value.as_str()));
14096        }
14097        start
14098    }
14099
14100    fn is_empty_element(&self) -> bool {
14101        true
14102    }
14103}
14104
14105impl ToXml for Columns {
14106    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
14107        #[cfg(feature = "extra-children")]
14108        let mut extra_iter = self.extra_children.iter().peekable();
14109        #[cfg(feature = "extra-children")]
14110        let mut emit_idx: usize = 0;
14111        for item in &self.col {
14112            #[cfg(feature = "extra-children")]
14113            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14114                extra_iter
14115                    .next()
14116                    .unwrap()
14117                    .node
14118                    .write_to(writer)
14119                    .map_err(SerializeError::from)?;
14120            }
14121            item.write_element("col", writer)?;
14122            #[cfg(feature = "extra-children")]
14123            {
14124                emit_idx += 1;
14125            }
14126        }
14127        #[cfg(feature = "extra-children")]
14128        for extra in extra_iter {
14129            extra.node.write_to(writer).map_err(SerializeError::from)?;
14130        }
14131        Ok(())
14132    }
14133
14134    fn is_empty_element(&self) -> bool {
14135        if !self.col.is_empty() {
14136            return false;
14137        }
14138        #[cfg(feature = "extra-children")]
14139        if !self.extra_children.is_empty() {
14140            return false;
14141        }
14142        true
14143    }
14144}
14145
14146impl ToXml for Column {
14147    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14148        #[allow(unused_mut)]
14149        let mut start = start;
14150        #[cfg(feature = "sml-styling")]
14151        {
14152            let val = &self.start_column;
14153            {
14154                let s = val.to_string();
14155                start.push_attribute(("min", s.as_str()));
14156            }
14157        }
14158        #[cfg(feature = "sml-styling")]
14159        {
14160            let val = &self.end_column;
14161            {
14162                let s = val.to_string();
14163                start.push_attribute(("max", s.as_str()));
14164            }
14165        }
14166        #[cfg(feature = "sml-styling")]
14167        if let Some(ref val) = self.width {
14168            {
14169                let s = val.to_string();
14170                start.push_attribute(("width", s.as_str()));
14171            }
14172        }
14173        #[cfg(feature = "sml-styling")]
14174        if let Some(ref val) = self.style {
14175            {
14176                let s = val.to_string();
14177                start.push_attribute(("style", s.as_str()));
14178            }
14179        }
14180        #[cfg(feature = "sml-structure")]
14181        if let Some(ref val) = self.hidden {
14182            start.push_attribute(("hidden", if *val { "1" } else { "0" }));
14183        }
14184        #[cfg(feature = "sml-styling")]
14185        if let Some(ref val) = self.best_fit {
14186            start.push_attribute(("bestFit", if *val { "1" } else { "0" }));
14187        }
14188        #[cfg(feature = "sml-styling")]
14189        if let Some(ref val) = self.custom_width {
14190            start.push_attribute(("customWidth", if *val { "1" } else { "0" }));
14191        }
14192        #[cfg(feature = "sml-i18n")]
14193        if let Some(ref val) = self.phonetic {
14194            start.push_attribute(("phonetic", if *val { "1" } else { "0" }));
14195        }
14196        #[cfg(feature = "sml-structure")]
14197        if let Some(ref val) = self.outline_level {
14198            {
14199                let s = val.to_string();
14200                start.push_attribute(("outlineLevel", s.as_str()));
14201            }
14202        }
14203        #[cfg(feature = "sml-structure")]
14204        if let Some(ref val) = self.collapsed {
14205            start.push_attribute(("collapsed", if *val { "1" } else { "0" }));
14206        }
14207        #[cfg(feature = "extra-attrs")]
14208        for (key, value) in &self.extra_attrs {
14209            start.push_attribute((key.as_str(), value.as_str()));
14210        }
14211        start
14212    }
14213
14214    fn is_empty_element(&self) -> bool {
14215        true
14216    }
14217}
14218
14219impl ToXml for Row {
14220    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14221        #[allow(unused_mut)]
14222        let mut start = start;
14223        if let Some(ref val) = self.reference {
14224            {
14225                let s = val.to_string();
14226                start.push_attribute(("r", s.as_str()));
14227            }
14228        }
14229        if let Some(ref val) = self.cell_spans {
14230            start.push_attribute(("spans", val.as_str()));
14231        }
14232        if let Some(ref val) = self.style_index {
14233            {
14234                let s = val.to_string();
14235                start.push_attribute(("s", s.as_str()));
14236            }
14237        }
14238        #[cfg(feature = "sml-styling")]
14239        if let Some(ref val) = self.custom_format {
14240            start.push_attribute(("customFormat", if *val { "1" } else { "0" }));
14241        }
14242        #[cfg(feature = "sml-styling")]
14243        if let Some(ref val) = self.height {
14244            {
14245                let s = val.to_string();
14246                start.push_attribute(("ht", s.as_str()));
14247            }
14248        }
14249        #[cfg(feature = "sml-structure")]
14250        if let Some(ref val) = self.hidden {
14251            start.push_attribute(("hidden", if *val { "1" } else { "0" }));
14252        }
14253        #[cfg(feature = "sml-styling")]
14254        if let Some(ref val) = self.custom_height {
14255            start.push_attribute(("customHeight", if *val { "1" } else { "0" }));
14256        }
14257        #[cfg(feature = "sml-structure")]
14258        if let Some(ref val) = self.outline_level {
14259            {
14260                let s = val.to_string();
14261                start.push_attribute(("outlineLevel", s.as_str()));
14262            }
14263        }
14264        #[cfg(feature = "sml-structure")]
14265        if let Some(ref val) = self.collapsed {
14266            start.push_attribute(("collapsed", if *val { "1" } else { "0" }));
14267        }
14268        #[cfg(feature = "sml-styling")]
14269        if let Some(ref val) = self.thick_top {
14270            start.push_attribute(("thickTop", if *val { "1" } else { "0" }));
14271        }
14272        #[cfg(feature = "sml-styling")]
14273        if let Some(ref val) = self.thick_bot {
14274            start.push_attribute(("thickBot", if *val { "1" } else { "0" }));
14275        }
14276        #[cfg(feature = "sml-i18n")]
14277        if let Some(ref val) = self.placeholder {
14278            start.push_attribute(("ph", if *val { "1" } else { "0" }));
14279        }
14280        #[cfg(feature = "extra-attrs")]
14281        for (key, value) in &self.extra_attrs {
14282            start.push_attribute((key.as_str(), value.as_str()));
14283        }
14284        start
14285    }
14286
14287    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
14288        #[cfg(feature = "extra-children")]
14289        let mut extra_iter = self.extra_children.iter().peekable();
14290        #[cfg(feature = "extra-children")]
14291        let mut emit_idx: usize = 0;
14292        for item in &self.cells {
14293            #[cfg(feature = "extra-children")]
14294            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14295                extra_iter
14296                    .next()
14297                    .unwrap()
14298                    .node
14299                    .write_to(writer)
14300                    .map_err(SerializeError::from)?;
14301            }
14302            item.write_element("c", writer)?;
14303            #[cfg(feature = "extra-children")]
14304            {
14305                emit_idx += 1;
14306            }
14307        }
14308        #[cfg(feature = "extra-children")]
14309        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14310            extra_iter
14311                .next()
14312                .unwrap()
14313                .node
14314                .write_to(writer)
14315                .map_err(SerializeError::from)?;
14316        }
14317        #[cfg(feature = "sml-extensions")]
14318        if let Some(ref val) = self.extension_list {
14319            val.write_element("extLst", writer)?;
14320        }
14321        #[cfg(feature = "extra-children")]
14322        {
14323            emit_idx += 1;
14324        }
14325        #[cfg(feature = "extra-children")]
14326        for extra in extra_iter {
14327            extra.node.write_to(writer).map_err(SerializeError::from)?;
14328        }
14329        Ok(())
14330    }
14331
14332    fn is_empty_element(&self) -> bool {
14333        if !self.cells.is_empty() {
14334            return false;
14335        }
14336        #[cfg(feature = "sml-extensions")]
14337        if self.extension_list.is_some() {
14338            return false;
14339        }
14340        #[cfg(feature = "extra-children")]
14341        if !self.extra_children.is_empty() {
14342            return false;
14343        }
14344        true
14345    }
14346}
14347
14348impl ToXml for Cell {
14349    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14350        #[allow(unused_mut)]
14351        let mut start = start;
14352        if let Some(ref val) = self.reference {
14353            start.push_attribute(("r", val.as_str()));
14354        }
14355        if let Some(ref val) = self.style_index {
14356            {
14357                let s = val.to_string();
14358                start.push_attribute(("s", s.as_str()));
14359            }
14360        }
14361        if let Some(ref val) = self.cell_type {
14362            {
14363                let s = val.to_string();
14364                start.push_attribute(("t", s.as_str()));
14365            }
14366        }
14367        #[cfg(feature = "sml-metadata")]
14368        if let Some(ref val) = self.cm {
14369            {
14370                let s = val.to_string();
14371                start.push_attribute(("cm", s.as_str()));
14372            }
14373        }
14374        #[cfg(feature = "sml-metadata")]
14375        if let Some(ref val) = self.vm {
14376            {
14377                let s = val.to_string();
14378                start.push_attribute(("vm", s.as_str()));
14379            }
14380        }
14381        #[cfg(feature = "sml-i18n")]
14382        if let Some(ref val) = self.placeholder {
14383            start.push_attribute(("ph", if *val { "1" } else { "0" }));
14384        }
14385        #[cfg(feature = "extra-attrs")]
14386        for (key, value) in &self.extra_attrs {
14387            start.push_attribute((key.as_str(), value.as_str()));
14388        }
14389        start
14390    }
14391
14392    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
14393        #[cfg(feature = "extra-children")]
14394        let mut extra_iter = self.extra_children.iter().peekable();
14395        #[cfg(feature = "extra-children")]
14396        let mut emit_idx: usize = 0;
14397        #[cfg(feature = "extra-children")]
14398        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14399            extra_iter
14400                .next()
14401                .unwrap()
14402                .node
14403                .write_to(writer)
14404                .map_err(SerializeError::from)?;
14405        }
14406        if let Some(ref val) = self.formula {
14407            val.write_element("f", writer)?;
14408        }
14409        #[cfg(feature = "extra-children")]
14410        {
14411            emit_idx += 1;
14412        }
14413        #[cfg(feature = "extra-children")]
14414        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14415            extra_iter
14416                .next()
14417                .unwrap()
14418                .node
14419                .write_to(writer)
14420                .map_err(SerializeError::from)?;
14421        }
14422        if let Some(ref val) = self.value {
14423            {
14424                let start = BytesStart::new("v");
14425                writer.write_event(Event::Start(start))?;
14426                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
14427                writer.write_event(Event::End(BytesEnd::new("v")))?;
14428            }
14429        }
14430        #[cfg(feature = "extra-children")]
14431        {
14432            emit_idx += 1;
14433        }
14434        #[cfg(feature = "extra-children")]
14435        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14436            extra_iter
14437                .next()
14438                .unwrap()
14439                .node
14440                .write_to(writer)
14441                .map_err(SerializeError::from)?;
14442        }
14443        if let Some(ref val) = self.is {
14444            val.write_element("is", writer)?;
14445        }
14446        #[cfg(feature = "extra-children")]
14447        {
14448            emit_idx += 1;
14449        }
14450        #[cfg(feature = "extra-children")]
14451        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14452            extra_iter
14453                .next()
14454                .unwrap()
14455                .node
14456                .write_to(writer)
14457                .map_err(SerializeError::from)?;
14458        }
14459        #[cfg(feature = "sml-extensions")]
14460        if let Some(ref val) = self.extension_list {
14461            val.write_element("extLst", writer)?;
14462        }
14463        #[cfg(feature = "extra-children")]
14464        {
14465            emit_idx += 1;
14466        }
14467        #[cfg(feature = "extra-children")]
14468        for extra in extra_iter {
14469            extra.node.write_to(writer).map_err(SerializeError::from)?;
14470        }
14471        Ok(())
14472    }
14473
14474    fn is_empty_element(&self) -> bool {
14475        if self.formula.is_some() {
14476            return false;
14477        }
14478        if self.value.is_some() {
14479            return false;
14480        }
14481        if self.is.is_some() {
14482            return false;
14483        }
14484        #[cfg(feature = "sml-extensions")]
14485        if self.extension_list.is_some() {
14486            return false;
14487        }
14488        #[cfg(feature = "extra-children")]
14489        if !self.extra_children.is_empty() {
14490            return false;
14491        }
14492        true
14493    }
14494}
14495
14496impl ToXml for SheetProperties {
14497    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14498        #[allow(unused_mut)]
14499        let mut start = start;
14500        #[cfg(feature = "sml-structure")]
14501        if let Some(ref val) = self.sync_horizontal {
14502            start.push_attribute(("syncHorizontal", if *val { "1" } else { "0" }));
14503        }
14504        #[cfg(feature = "sml-structure")]
14505        if let Some(ref val) = self.sync_vertical {
14506            start.push_attribute(("syncVertical", if *val { "1" } else { "0" }));
14507        }
14508        #[cfg(feature = "sml-structure")]
14509        if let Some(ref val) = self.sync_ref {
14510            start.push_attribute(("syncRef", val.as_str()));
14511        }
14512        #[cfg(feature = "sml-formulas")]
14513        if let Some(ref val) = self.transition_evaluation {
14514            start.push_attribute(("transitionEvaluation", if *val { "1" } else { "0" }));
14515        }
14516        #[cfg(feature = "sml-formulas")]
14517        if let Some(ref val) = self.transition_entry {
14518            start.push_attribute(("transitionEntry", if *val { "1" } else { "0" }));
14519        }
14520        #[cfg(feature = "sml-external")]
14521        if let Some(ref val) = self.published {
14522            start.push_attribute(("published", if *val { "1" } else { "0" }));
14523        }
14524        #[cfg(feature = "sml-structure")]
14525        if let Some(ref val) = self.code_name {
14526            start.push_attribute(("codeName", val.as_str()));
14527        }
14528        #[cfg(feature = "sml-filtering")]
14529        if let Some(ref val) = self.filter_mode {
14530            start.push_attribute(("filterMode", if *val { "1" } else { "0" }));
14531        }
14532        #[cfg(feature = "sml-styling")]
14533        if let Some(ref val) = self.enable_format_conditions_calculation {
14534            start.push_attribute((
14535                "enableFormatConditionsCalculation",
14536                if *val { "1" } else { "0" },
14537            ));
14538        }
14539        #[cfg(feature = "extra-attrs")]
14540        for (key, value) in &self.extra_attrs {
14541            start.push_attribute((key.as_str(), value.as_str()));
14542        }
14543        start
14544    }
14545
14546    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
14547        #[cfg(feature = "extra-children")]
14548        let mut extra_iter = self.extra_children.iter().peekable();
14549        #[cfg(feature = "extra-children")]
14550        let mut emit_idx: usize = 0;
14551        #[cfg(feature = "extra-children")]
14552        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14553            extra_iter
14554                .next()
14555                .unwrap()
14556                .node
14557                .write_to(writer)
14558                .map_err(SerializeError::from)?;
14559        }
14560        #[cfg(feature = "sml-styling")]
14561        if let Some(ref val) = self.tab_color {
14562            val.write_element("tabColor", writer)?;
14563        }
14564        #[cfg(feature = "extra-children")]
14565        {
14566            emit_idx += 1;
14567        }
14568        #[cfg(feature = "extra-children")]
14569        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14570            extra_iter
14571                .next()
14572                .unwrap()
14573                .node
14574                .write_to(writer)
14575                .map_err(SerializeError::from)?;
14576        }
14577        #[cfg(feature = "sml-structure")]
14578        if let Some(ref val) = self.outline_pr {
14579            val.write_element("outlinePr", writer)?;
14580        }
14581        #[cfg(feature = "extra-children")]
14582        {
14583            emit_idx += 1;
14584        }
14585        #[cfg(feature = "extra-children")]
14586        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14587            extra_iter
14588                .next()
14589                .unwrap()
14590                .node
14591                .write_to(writer)
14592                .map_err(SerializeError::from)?;
14593        }
14594        #[cfg(feature = "sml-layout")]
14595        if let Some(ref val) = self.page_set_up_pr {
14596            val.write_element("pageSetUpPr", writer)?;
14597        }
14598        #[cfg(feature = "extra-children")]
14599        {
14600            emit_idx += 1;
14601        }
14602        #[cfg(feature = "extra-children")]
14603        for extra in extra_iter {
14604            extra.node.write_to(writer).map_err(SerializeError::from)?;
14605        }
14606        Ok(())
14607    }
14608
14609    fn is_empty_element(&self) -> bool {
14610        #[cfg(feature = "sml-styling")]
14611        if self.tab_color.is_some() {
14612            return false;
14613        }
14614        #[cfg(feature = "sml-structure")]
14615        if self.outline_pr.is_some() {
14616            return false;
14617        }
14618        #[cfg(feature = "sml-layout")]
14619        if self.page_set_up_pr.is_some() {
14620            return false;
14621        }
14622        #[cfg(feature = "extra-children")]
14623        if !self.extra_children.is_empty() {
14624            return false;
14625        }
14626        true
14627    }
14628}
14629
14630impl ToXml for SheetDimension {
14631    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14632        #[allow(unused_mut)]
14633        let mut start = start;
14634        {
14635            let val = &self.reference;
14636            start.push_attribute(("ref", val.as_str()));
14637        }
14638        #[cfg(feature = "extra-attrs")]
14639        for (key, value) in &self.extra_attrs {
14640            start.push_attribute((key.as_str(), value.as_str()));
14641        }
14642        start
14643    }
14644
14645    fn is_empty_element(&self) -> bool {
14646        true
14647    }
14648}
14649
14650impl ToXml for SheetViews {
14651    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
14652        #[cfg(feature = "extra-children")]
14653        let mut extra_iter = self.extra_children.iter().peekable();
14654        #[cfg(feature = "extra-children")]
14655        let mut emit_idx: usize = 0;
14656        for item in &self.sheet_view {
14657            #[cfg(feature = "extra-children")]
14658            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14659                extra_iter
14660                    .next()
14661                    .unwrap()
14662                    .node
14663                    .write_to(writer)
14664                    .map_err(SerializeError::from)?;
14665            }
14666            item.write_element("sheetView", writer)?;
14667            #[cfg(feature = "extra-children")]
14668            {
14669                emit_idx += 1;
14670            }
14671        }
14672        #[cfg(feature = "extra-children")]
14673        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14674            extra_iter
14675                .next()
14676                .unwrap()
14677                .node
14678                .write_to(writer)
14679                .map_err(SerializeError::from)?;
14680        }
14681        if let Some(ref val) = self.extension_list {
14682            val.write_element("extLst", writer)?;
14683        }
14684        #[cfg(feature = "extra-children")]
14685        {
14686            emit_idx += 1;
14687        }
14688        #[cfg(feature = "extra-children")]
14689        for extra in extra_iter {
14690            extra.node.write_to(writer).map_err(SerializeError::from)?;
14691        }
14692        Ok(())
14693    }
14694
14695    fn is_empty_element(&self) -> bool {
14696        if !self.sheet_view.is_empty() {
14697            return false;
14698        }
14699        if self.extension_list.is_some() {
14700            return false;
14701        }
14702        #[cfg(feature = "extra-children")]
14703        if !self.extra_children.is_empty() {
14704            return false;
14705        }
14706        true
14707    }
14708}
14709
14710impl ToXml for SheetView {
14711    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14712        #[allow(unused_mut)]
14713        let mut start = start;
14714        #[cfg(feature = "sml-protection")]
14715        if let Some(ref val) = self.window_protection {
14716            start.push_attribute(("windowProtection", if *val { "1" } else { "0" }));
14717        }
14718        #[cfg(feature = "sml-formulas")]
14719        if let Some(ref val) = self.show_formulas {
14720            start.push_attribute(("showFormulas", if *val { "1" } else { "0" }));
14721        }
14722        #[cfg(feature = "sml-styling")]
14723        if let Some(ref val) = self.show_grid_lines {
14724            start.push_attribute(("showGridLines", if *val { "1" } else { "0" }));
14725        }
14726        #[cfg(feature = "sml-styling")]
14727        if let Some(ref val) = self.show_row_col_headers {
14728            start.push_attribute(("showRowColHeaders", if *val { "1" } else { "0" }));
14729        }
14730        #[cfg(feature = "sml-styling")]
14731        if let Some(ref val) = self.show_zeros {
14732            start.push_attribute(("showZeros", if *val { "1" } else { "0" }));
14733        }
14734        #[cfg(feature = "sml-i18n")]
14735        if let Some(ref val) = self.right_to_left {
14736            start.push_attribute(("rightToLeft", if *val { "1" } else { "0" }));
14737        }
14738        if let Some(ref val) = self.tab_selected {
14739            start.push_attribute(("tabSelected", if *val { "1" } else { "0" }));
14740        }
14741        #[cfg(feature = "sml-layout")]
14742        if let Some(ref val) = self.show_ruler {
14743            start.push_attribute(("showRuler", if *val { "1" } else { "0" }));
14744        }
14745        #[cfg(feature = "sml-structure")]
14746        if let Some(ref val) = self.show_outline_symbols {
14747            start.push_attribute(("showOutlineSymbols", if *val { "1" } else { "0" }));
14748        }
14749        #[cfg(feature = "sml-styling")]
14750        if let Some(ref val) = self.default_grid_color {
14751            start.push_attribute(("defaultGridColor", if *val { "1" } else { "0" }));
14752        }
14753        #[cfg(feature = "sml-layout")]
14754        if let Some(ref val) = self.show_white_space {
14755            start.push_attribute(("showWhiteSpace", if *val { "1" } else { "0" }));
14756        }
14757        if let Some(ref val) = self.view {
14758            {
14759                let s = val.to_string();
14760                start.push_attribute(("view", s.as_str()));
14761            }
14762        }
14763        if let Some(ref val) = self.top_left_cell {
14764            start.push_attribute(("topLeftCell", val.as_str()));
14765        }
14766        #[cfg(feature = "sml-styling")]
14767        if let Some(ref val) = self.color_id {
14768            {
14769                let s = val.to_string();
14770                start.push_attribute(("colorId", s.as_str()));
14771            }
14772        }
14773        if let Some(ref val) = self.zoom_scale {
14774            {
14775                let s = val.to_string();
14776                start.push_attribute(("zoomScale", s.as_str()));
14777            }
14778        }
14779        if let Some(ref val) = self.zoom_scale_normal {
14780            {
14781                let s = val.to_string();
14782                start.push_attribute(("zoomScaleNormal", s.as_str()));
14783            }
14784        }
14785        #[cfg(feature = "sml-layout")]
14786        if let Some(ref val) = self.zoom_scale_sheet_layout_view {
14787            {
14788                let s = val.to_string();
14789                start.push_attribute(("zoomScaleSheetLayoutView", s.as_str()));
14790            }
14791        }
14792        #[cfg(feature = "sml-layout")]
14793        if let Some(ref val) = self.zoom_scale_page_layout_view {
14794            {
14795                let s = val.to_string();
14796                start.push_attribute(("zoomScalePageLayoutView", s.as_str()));
14797            }
14798        }
14799        {
14800            let val = &self.workbook_view_id;
14801            {
14802                let s = val.to_string();
14803                start.push_attribute(("workbookViewId", s.as_str()));
14804            }
14805        }
14806        #[cfg(feature = "extra-attrs")]
14807        for (key, value) in &self.extra_attrs {
14808            start.push_attribute((key.as_str(), value.as_str()));
14809        }
14810        start
14811    }
14812
14813    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
14814        #[cfg(feature = "extra-children")]
14815        let mut extra_iter = self.extra_children.iter().peekable();
14816        #[cfg(feature = "extra-children")]
14817        let mut emit_idx: usize = 0;
14818        #[cfg(feature = "extra-children")]
14819        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14820            extra_iter
14821                .next()
14822                .unwrap()
14823                .node
14824                .write_to(writer)
14825                .map_err(SerializeError::from)?;
14826        }
14827        #[cfg(feature = "sml-structure")]
14828        if let Some(ref val) = self.pane {
14829            val.write_element("pane", writer)?;
14830        }
14831        #[cfg(feature = "extra-children")]
14832        {
14833            emit_idx += 1;
14834        }
14835        for item in &self.selection {
14836            #[cfg(feature = "extra-children")]
14837            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14838                extra_iter
14839                    .next()
14840                    .unwrap()
14841                    .node
14842                    .write_to(writer)
14843                    .map_err(SerializeError::from)?;
14844            }
14845            item.write_element("selection", writer)?;
14846            #[cfg(feature = "extra-children")]
14847            {
14848                emit_idx += 1;
14849            }
14850        }
14851        #[cfg(feature = "sml-pivot")]
14852        for item in &self.pivot_selection {
14853            #[cfg(feature = "extra-children")]
14854            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14855                extra_iter
14856                    .next()
14857                    .unwrap()
14858                    .node
14859                    .write_to(writer)
14860                    .map_err(SerializeError::from)?;
14861            }
14862            item.write_element("pivotSelection", writer)?;
14863            #[cfg(feature = "extra-children")]
14864            {
14865                emit_idx += 1;
14866            }
14867        }
14868        #[cfg(feature = "extra-children")]
14869        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
14870            extra_iter
14871                .next()
14872                .unwrap()
14873                .node
14874                .write_to(writer)
14875                .map_err(SerializeError::from)?;
14876        }
14877        #[cfg(feature = "sml-extensions")]
14878        if let Some(ref val) = self.extension_list {
14879            val.write_element("extLst", writer)?;
14880        }
14881        #[cfg(feature = "extra-children")]
14882        {
14883            emit_idx += 1;
14884        }
14885        #[cfg(feature = "extra-children")]
14886        for extra in extra_iter {
14887            extra.node.write_to(writer).map_err(SerializeError::from)?;
14888        }
14889        Ok(())
14890    }
14891
14892    fn is_empty_element(&self) -> bool {
14893        #[cfg(feature = "sml-structure")]
14894        if self.pane.is_some() {
14895            return false;
14896        }
14897        if !self.selection.is_empty() {
14898            return false;
14899        }
14900        #[cfg(feature = "sml-pivot")]
14901        if !self.pivot_selection.is_empty() {
14902            return false;
14903        }
14904        #[cfg(feature = "sml-extensions")]
14905        if self.extension_list.is_some() {
14906            return false;
14907        }
14908        #[cfg(feature = "extra-children")]
14909        if !self.extra_children.is_empty() {
14910            return false;
14911        }
14912        true
14913    }
14914}
14915
14916impl ToXml for Pane {
14917    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14918        #[allow(unused_mut)]
14919        let mut start = start;
14920        #[cfg(feature = "sml-structure")]
14921        if let Some(ref val) = self.x_split {
14922            {
14923                let s = val.to_string();
14924                start.push_attribute(("xSplit", s.as_str()));
14925            }
14926        }
14927        #[cfg(feature = "sml-structure")]
14928        if let Some(ref val) = self.y_split {
14929            {
14930                let s = val.to_string();
14931                start.push_attribute(("ySplit", s.as_str()));
14932            }
14933        }
14934        #[cfg(feature = "sml-structure")]
14935        if let Some(ref val) = self.top_left_cell {
14936            start.push_attribute(("topLeftCell", val.as_str()));
14937        }
14938        #[cfg(feature = "sml-structure")]
14939        if let Some(ref val) = self.active_pane {
14940            {
14941                let s = val.to_string();
14942                start.push_attribute(("activePane", s.as_str()));
14943            }
14944        }
14945        #[cfg(feature = "sml-structure")]
14946        if let Some(ref val) = self.state {
14947            {
14948                let s = val.to_string();
14949                start.push_attribute(("state", s.as_str()));
14950            }
14951        }
14952        #[cfg(feature = "extra-attrs")]
14953        for (key, value) in &self.extra_attrs {
14954            start.push_attribute((key.as_str(), value.as_str()));
14955        }
14956        start
14957    }
14958
14959    fn is_empty_element(&self) -> bool {
14960        true
14961    }
14962}
14963
14964impl ToXml for CTPivotSelection {
14965    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
14966        #[allow(unused_mut)]
14967        let mut start = start;
14968        if let Some(ref val) = self.pane {
14969            {
14970                let s = val.to_string();
14971                start.push_attribute(("pane", s.as_str()));
14972            }
14973        }
14974        if let Some(ref val) = self.show_header {
14975            start.push_attribute(("showHeader", if *val { "1" } else { "0" }));
14976        }
14977        if let Some(ref val) = self.label {
14978            start.push_attribute(("label", if *val { "1" } else { "0" }));
14979        }
14980        if let Some(ref val) = self.data {
14981            start.push_attribute(("data", if *val { "1" } else { "0" }));
14982        }
14983        if let Some(ref val) = self.extendable {
14984            start.push_attribute(("extendable", if *val { "1" } else { "0" }));
14985        }
14986        if let Some(ref val) = self.count {
14987            {
14988                let s = val.to_string();
14989                start.push_attribute(("count", s.as_str()));
14990            }
14991        }
14992        if let Some(ref val) = self.axis {
14993            {
14994                let s = val.to_string();
14995                start.push_attribute(("axis", s.as_str()));
14996            }
14997        }
14998        if let Some(ref val) = self.dimension {
14999            {
15000                let s = val.to_string();
15001                start.push_attribute(("dimension", s.as_str()));
15002            }
15003        }
15004        if let Some(ref val) = self.start {
15005            {
15006                let s = val.to_string();
15007                start.push_attribute(("start", s.as_str()));
15008            }
15009        }
15010        if let Some(ref val) = self.start_column {
15011            {
15012                let s = val.to_string();
15013                start.push_attribute(("min", s.as_str()));
15014            }
15015        }
15016        if let Some(ref val) = self.end_column {
15017            {
15018                let s = val.to_string();
15019                start.push_attribute(("max", s.as_str()));
15020            }
15021        }
15022        if let Some(ref val) = self.active_row {
15023            {
15024                let s = val.to_string();
15025                start.push_attribute(("activeRow", s.as_str()));
15026            }
15027        }
15028        if let Some(ref val) = self.active_col {
15029            {
15030                let s = val.to_string();
15031                start.push_attribute(("activeCol", s.as_str()));
15032            }
15033        }
15034        if let Some(ref val) = self.previous_row {
15035            {
15036                let s = val.to_string();
15037                start.push_attribute(("previousRow", s.as_str()));
15038            }
15039        }
15040        if let Some(ref val) = self.previous_col {
15041            {
15042                let s = val.to_string();
15043                start.push_attribute(("previousCol", s.as_str()));
15044            }
15045        }
15046        if let Some(ref val) = self.click {
15047            {
15048                let s = val.to_string();
15049                start.push_attribute(("click", s.as_str()));
15050            }
15051        }
15052        if let Some(ref val) = self.id {
15053            start.push_attribute(("r:id", val.as_str()));
15054        }
15055        #[cfg(feature = "extra-attrs")]
15056        for (key, value) in &self.extra_attrs {
15057            start.push_attribute((key.as_str(), value.as_str()));
15058        }
15059        start
15060    }
15061
15062    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15063        #[cfg(feature = "extra-children")]
15064        let mut extra_iter = self.extra_children.iter().peekable();
15065        #[cfg(feature = "extra-children")]
15066        let mut emit_idx: usize = 0;
15067        #[cfg(feature = "extra-children")]
15068        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
15069            extra_iter
15070                .next()
15071                .unwrap()
15072                .node
15073                .write_to(writer)
15074                .map_err(SerializeError::from)?;
15075        }
15076        {
15077            let val = &self.pivot_area;
15078            val.write_element("pivotArea", writer)?;
15079        }
15080        #[cfg(feature = "extra-children")]
15081        {
15082            emit_idx += 1;
15083        }
15084        #[cfg(feature = "extra-children")]
15085        for extra in extra_iter {
15086            extra.node.write_to(writer).map_err(SerializeError::from)?;
15087        }
15088        Ok(())
15089    }
15090
15091    fn is_empty_element(&self) -> bool {
15092        false
15093    }
15094}
15095
15096impl ToXml for Selection {
15097    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15098        #[allow(unused_mut)]
15099        let mut start = start;
15100        if let Some(ref val) = self.pane {
15101            {
15102                let s = val.to_string();
15103                start.push_attribute(("pane", s.as_str()));
15104            }
15105        }
15106        if let Some(ref val) = self.active_cell {
15107            start.push_attribute(("activeCell", val.as_str()));
15108        }
15109        if let Some(ref val) = self.active_cell_id {
15110            {
15111                let s = val.to_string();
15112                start.push_attribute(("activeCellId", s.as_str()));
15113            }
15114        }
15115        if let Some(ref val) = self.square_reference {
15116            start.push_attribute(("sqref", val.as_str()));
15117        }
15118        #[cfg(feature = "extra-attrs")]
15119        for (key, value) in &self.extra_attrs {
15120            start.push_attribute((key.as_str(), value.as_str()));
15121        }
15122        start
15123    }
15124
15125    fn is_empty_element(&self) -> bool {
15126        true
15127    }
15128}
15129
15130impl ToXml for PageBreaks {
15131    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15132        #[allow(unused_mut)]
15133        let mut start = start;
15134        #[cfg(feature = "sml-layout")]
15135        if let Some(ref val) = self.count {
15136            {
15137                let s = val.to_string();
15138                start.push_attribute(("count", s.as_str()));
15139            }
15140        }
15141        #[cfg(feature = "sml-layout")]
15142        if let Some(ref val) = self.manual_break_count {
15143            {
15144                let s = val.to_string();
15145                start.push_attribute(("manualBreakCount", s.as_str()));
15146            }
15147        }
15148        #[cfg(feature = "extra-attrs")]
15149        for (key, value) in &self.extra_attrs {
15150            start.push_attribute((key.as_str(), value.as_str()));
15151        }
15152        start
15153    }
15154
15155    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15156        #[cfg(feature = "extra-children")]
15157        let mut extra_iter = self.extra_children.iter().peekable();
15158        #[cfg(feature = "extra-children")]
15159        let mut emit_idx: usize = 0;
15160        #[cfg(feature = "sml-layout")]
15161        for item in &self.brk {
15162            #[cfg(feature = "extra-children")]
15163            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
15164                extra_iter
15165                    .next()
15166                    .unwrap()
15167                    .node
15168                    .write_to(writer)
15169                    .map_err(SerializeError::from)?;
15170            }
15171            item.write_element("brk", writer)?;
15172            #[cfg(feature = "extra-children")]
15173            {
15174                emit_idx += 1;
15175            }
15176        }
15177        #[cfg(feature = "extra-children")]
15178        for extra in extra_iter {
15179            extra.node.write_to(writer).map_err(SerializeError::from)?;
15180        }
15181        Ok(())
15182    }
15183
15184    fn is_empty_element(&self) -> bool {
15185        #[cfg(feature = "sml-layout")]
15186        if !self.brk.is_empty() {
15187            return false;
15188        }
15189        #[cfg(feature = "extra-children")]
15190        if !self.extra_children.is_empty() {
15191            return false;
15192        }
15193        true
15194    }
15195}
15196
15197impl ToXml for PageBreak {
15198    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15199        #[allow(unused_mut)]
15200        let mut start = start;
15201        if let Some(ref val) = self.id {
15202            {
15203                let s = val.to_string();
15204                start.push_attribute(("id", s.as_str()));
15205            }
15206        }
15207        if let Some(ref val) = self.start_column {
15208            {
15209                let s = val.to_string();
15210                start.push_attribute(("min", s.as_str()));
15211            }
15212        }
15213        if let Some(ref val) = self.end_column {
15214            {
15215                let s = val.to_string();
15216                start.push_attribute(("max", s.as_str()));
15217            }
15218        }
15219        if let Some(ref val) = self.man {
15220            start.push_attribute(("man", if *val { "1" } else { "0" }));
15221        }
15222        if let Some(ref val) = self.pt {
15223            start.push_attribute(("pt", if *val { "1" } else { "0" }));
15224        }
15225        #[cfg(feature = "extra-attrs")]
15226        for (key, value) in &self.extra_attrs {
15227            start.push_attribute((key.as_str(), value.as_str()));
15228        }
15229        start
15230    }
15231
15232    fn is_empty_element(&self) -> bool {
15233        true
15234    }
15235}
15236
15237impl ToXml for OutlineProperties {
15238    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15239        #[allow(unused_mut)]
15240        let mut start = start;
15241        if let Some(ref val) = self.apply_styles {
15242            start.push_attribute(("applyStyles", if *val { "1" } else { "0" }));
15243        }
15244        if let Some(ref val) = self.summary_below {
15245            start.push_attribute(("summaryBelow", if *val { "1" } else { "0" }));
15246        }
15247        if let Some(ref val) = self.summary_right {
15248            start.push_attribute(("summaryRight", if *val { "1" } else { "0" }));
15249        }
15250        if let Some(ref val) = self.show_outline_symbols {
15251            start.push_attribute(("showOutlineSymbols", if *val { "1" } else { "0" }));
15252        }
15253        #[cfg(feature = "extra-attrs")]
15254        for (key, value) in &self.extra_attrs {
15255            start.push_attribute((key.as_str(), value.as_str()));
15256        }
15257        start
15258    }
15259
15260    fn is_empty_element(&self) -> bool {
15261        true
15262    }
15263}
15264
15265impl ToXml for PageSetupProperties {
15266    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15267        #[allow(unused_mut)]
15268        let mut start = start;
15269        if let Some(ref val) = self.auto_page_breaks {
15270            start.push_attribute(("autoPageBreaks", if *val { "1" } else { "0" }));
15271        }
15272        if let Some(ref val) = self.fit_to_page {
15273            start.push_attribute(("fitToPage", if *val { "1" } else { "0" }));
15274        }
15275        #[cfg(feature = "extra-attrs")]
15276        for (key, value) in &self.extra_attrs {
15277            start.push_attribute((key.as_str(), value.as_str()));
15278        }
15279        start
15280    }
15281
15282    fn is_empty_element(&self) -> bool {
15283        true
15284    }
15285}
15286
15287impl ToXml for CTDataConsolidate {
15288    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15289        #[allow(unused_mut)]
15290        let mut start = start;
15291        if let Some(ref val) = self.function {
15292            {
15293                let s = val.to_string();
15294                start.push_attribute(("function", s.as_str()));
15295            }
15296        }
15297        if let Some(ref val) = self.start_labels {
15298            start.push_attribute(("startLabels", if *val { "1" } else { "0" }));
15299        }
15300        if let Some(ref val) = self.left_labels {
15301            start.push_attribute(("leftLabels", if *val { "1" } else { "0" }));
15302        }
15303        if let Some(ref val) = self.top_labels {
15304            start.push_attribute(("topLabels", if *val { "1" } else { "0" }));
15305        }
15306        if let Some(ref val) = self.link {
15307            start.push_attribute(("link", if *val { "1" } else { "0" }));
15308        }
15309        #[cfg(feature = "extra-attrs")]
15310        for (key, value) in &self.extra_attrs {
15311            start.push_attribute((key.as_str(), value.as_str()));
15312        }
15313        start
15314    }
15315
15316    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15317        #[cfg(feature = "extra-children")]
15318        let mut extra_iter = self.extra_children.iter().peekable();
15319        #[cfg(feature = "extra-children")]
15320        let mut emit_idx: usize = 0;
15321        #[cfg(feature = "extra-children")]
15322        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
15323            extra_iter
15324                .next()
15325                .unwrap()
15326                .node
15327                .write_to(writer)
15328                .map_err(SerializeError::from)?;
15329        }
15330        if let Some(ref val) = self.data_refs {
15331            val.write_element("dataRefs", writer)?;
15332        }
15333        #[cfg(feature = "extra-children")]
15334        {
15335            emit_idx += 1;
15336        }
15337        #[cfg(feature = "extra-children")]
15338        for extra in extra_iter {
15339            extra.node.write_to(writer).map_err(SerializeError::from)?;
15340        }
15341        Ok(())
15342    }
15343
15344    fn is_empty_element(&self) -> bool {
15345        if self.data_refs.is_some() {
15346            return false;
15347        }
15348        #[cfg(feature = "extra-children")]
15349        if !self.extra_children.is_empty() {
15350            return false;
15351        }
15352        true
15353    }
15354}
15355
15356impl ToXml for CTDataRefs {
15357    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15358        #[allow(unused_mut)]
15359        let mut start = start;
15360        if let Some(ref val) = self.count {
15361            {
15362                let s = val.to_string();
15363                start.push_attribute(("count", s.as_str()));
15364            }
15365        }
15366        #[cfg(feature = "extra-attrs")]
15367        for (key, value) in &self.extra_attrs {
15368            start.push_attribute((key.as_str(), value.as_str()));
15369        }
15370        start
15371    }
15372
15373    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15374        #[cfg(feature = "extra-children")]
15375        let mut extra_iter = self.extra_children.iter().peekable();
15376        #[cfg(feature = "extra-children")]
15377        let mut emit_idx: usize = 0;
15378        for item in &self.data_ref {
15379            #[cfg(feature = "extra-children")]
15380            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
15381                extra_iter
15382                    .next()
15383                    .unwrap()
15384                    .node
15385                    .write_to(writer)
15386                    .map_err(SerializeError::from)?;
15387            }
15388            item.write_element("dataRef", writer)?;
15389            #[cfg(feature = "extra-children")]
15390            {
15391                emit_idx += 1;
15392            }
15393        }
15394        #[cfg(feature = "extra-children")]
15395        for extra in extra_iter {
15396            extra.node.write_to(writer).map_err(SerializeError::from)?;
15397        }
15398        Ok(())
15399    }
15400
15401    fn is_empty_element(&self) -> bool {
15402        if !self.data_ref.is_empty() {
15403            return false;
15404        }
15405        #[cfg(feature = "extra-children")]
15406        if !self.extra_children.is_empty() {
15407            return false;
15408        }
15409        true
15410    }
15411}
15412
15413impl ToXml for CTDataRef {
15414    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15415        #[allow(unused_mut)]
15416        let mut start = start;
15417        if let Some(ref val) = self.reference {
15418            start.push_attribute(("ref", val.as_str()));
15419        }
15420        if let Some(ref val) = self.name {
15421            start.push_attribute(("name", val.as_str()));
15422        }
15423        if let Some(ref val) = self.sheet {
15424            start.push_attribute(("sheet", val.as_str()));
15425        }
15426        if let Some(ref val) = self.id {
15427            start.push_attribute(("r:id", val.as_str()));
15428        }
15429        #[cfg(feature = "extra-attrs")]
15430        for (key, value) in &self.extra_attrs {
15431            start.push_attribute((key.as_str(), value.as_str()));
15432        }
15433        start
15434    }
15435
15436    fn is_empty_element(&self) -> bool {
15437        true
15438    }
15439}
15440
15441impl ToXml for MergedCells {
15442    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15443        #[allow(unused_mut)]
15444        let mut start = start;
15445        if let Some(ref val) = self.count {
15446            {
15447                let s = val.to_string();
15448                start.push_attribute(("count", s.as_str()));
15449            }
15450        }
15451        #[cfg(feature = "extra-attrs")]
15452        for (key, value) in &self.extra_attrs {
15453            start.push_attribute((key.as_str(), value.as_str()));
15454        }
15455        start
15456    }
15457
15458    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15459        #[cfg(feature = "extra-children")]
15460        let mut extra_iter = self.extra_children.iter().peekable();
15461        #[cfg(feature = "extra-children")]
15462        let mut emit_idx: usize = 0;
15463        for item in &self.merge_cell {
15464            #[cfg(feature = "extra-children")]
15465            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
15466                extra_iter
15467                    .next()
15468                    .unwrap()
15469                    .node
15470                    .write_to(writer)
15471                    .map_err(SerializeError::from)?;
15472            }
15473            item.write_element("mergeCell", writer)?;
15474            #[cfg(feature = "extra-children")]
15475            {
15476                emit_idx += 1;
15477            }
15478        }
15479        #[cfg(feature = "extra-children")]
15480        for extra in extra_iter {
15481            extra.node.write_to(writer).map_err(SerializeError::from)?;
15482        }
15483        Ok(())
15484    }
15485
15486    fn is_empty_element(&self) -> bool {
15487        if !self.merge_cell.is_empty() {
15488            return false;
15489        }
15490        #[cfg(feature = "extra-children")]
15491        if !self.extra_children.is_empty() {
15492            return false;
15493        }
15494        true
15495    }
15496}
15497
15498impl ToXml for MergedCell {
15499    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15500        #[allow(unused_mut)]
15501        let mut start = start;
15502        {
15503            let val = &self.reference;
15504            start.push_attribute(("ref", val.as_str()));
15505        }
15506        #[cfg(feature = "extra-attrs")]
15507        for (key, value) in &self.extra_attrs {
15508            start.push_attribute((key.as_str(), value.as_str()));
15509        }
15510        start
15511    }
15512
15513    fn is_empty_element(&self) -> bool {
15514        true
15515    }
15516}
15517
15518impl ToXml for SmartTags {
15519    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15520        #[cfg(feature = "extra-children")]
15521        let mut extra_iter = self.extra_children.iter().peekable();
15522        #[cfg(feature = "extra-children")]
15523        let mut emit_idx: usize = 0;
15524        for item in &self.cell_smart_tags {
15525            #[cfg(feature = "extra-children")]
15526            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
15527                extra_iter
15528                    .next()
15529                    .unwrap()
15530                    .node
15531                    .write_to(writer)
15532                    .map_err(SerializeError::from)?;
15533            }
15534            item.write_element("cellSmartTags", writer)?;
15535            #[cfg(feature = "extra-children")]
15536            {
15537                emit_idx += 1;
15538            }
15539        }
15540        #[cfg(feature = "extra-children")]
15541        for extra in extra_iter {
15542            extra.node.write_to(writer).map_err(SerializeError::from)?;
15543        }
15544        Ok(())
15545    }
15546
15547    fn is_empty_element(&self) -> bool {
15548        if !self.cell_smart_tags.is_empty() {
15549            return false;
15550        }
15551        #[cfg(feature = "extra-children")]
15552        if !self.extra_children.is_empty() {
15553            return false;
15554        }
15555        true
15556    }
15557}
15558
15559impl ToXml for CellSmartTags {
15560    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15561        #[allow(unused_mut)]
15562        let mut start = start;
15563        {
15564            let val = &self.reference;
15565            start.push_attribute(("r", val.as_str()));
15566        }
15567        #[cfg(feature = "extra-attrs")]
15568        for (key, value) in &self.extra_attrs {
15569            start.push_attribute((key.as_str(), value.as_str()));
15570        }
15571        start
15572    }
15573
15574    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15575        #[cfg(feature = "extra-children")]
15576        let mut extra_iter = self.extra_children.iter().peekable();
15577        #[cfg(feature = "extra-children")]
15578        let mut emit_idx: usize = 0;
15579        for item in &self.cell_smart_tag {
15580            #[cfg(feature = "extra-children")]
15581            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
15582                extra_iter
15583                    .next()
15584                    .unwrap()
15585                    .node
15586                    .write_to(writer)
15587                    .map_err(SerializeError::from)?;
15588            }
15589            item.write_element("cellSmartTag", writer)?;
15590            #[cfg(feature = "extra-children")]
15591            {
15592                emit_idx += 1;
15593            }
15594        }
15595        #[cfg(feature = "extra-children")]
15596        for extra in extra_iter {
15597            extra.node.write_to(writer).map_err(SerializeError::from)?;
15598        }
15599        Ok(())
15600    }
15601
15602    fn is_empty_element(&self) -> bool {
15603        if !self.cell_smart_tag.is_empty() {
15604            return false;
15605        }
15606        #[cfg(feature = "extra-children")]
15607        if !self.extra_children.is_empty() {
15608            return false;
15609        }
15610        true
15611    }
15612}
15613
15614impl ToXml for CellSmartTag {
15615    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15616        #[allow(unused_mut)]
15617        let mut start = start;
15618        {
15619            let val = &self.r#type;
15620            {
15621                let s = val.to_string();
15622                start.push_attribute(("type", s.as_str()));
15623            }
15624        }
15625        if let Some(ref val) = self.deleted {
15626            start.push_attribute(("deleted", if *val { "1" } else { "0" }));
15627        }
15628        if let Some(ref val) = self.xml_based {
15629            start.push_attribute(("xmlBased", if *val { "1" } else { "0" }));
15630        }
15631        #[cfg(feature = "extra-attrs")]
15632        for (key, value) in &self.extra_attrs {
15633            start.push_attribute((key.as_str(), value.as_str()));
15634        }
15635        start
15636    }
15637
15638    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15639        #[cfg(feature = "extra-children")]
15640        let mut extra_iter = self.extra_children.iter().peekable();
15641        #[cfg(feature = "extra-children")]
15642        let mut emit_idx: usize = 0;
15643        for item in &self.cell_smart_tag_pr {
15644            #[cfg(feature = "extra-children")]
15645            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
15646                extra_iter
15647                    .next()
15648                    .unwrap()
15649                    .node
15650                    .write_to(writer)
15651                    .map_err(SerializeError::from)?;
15652            }
15653            item.write_element("cellSmartTagPr", writer)?;
15654            #[cfg(feature = "extra-children")]
15655            {
15656                emit_idx += 1;
15657            }
15658        }
15659        #[cfg(feature = "extra-children")]
15660        for extra in extra_iter {
15661            extra.node.write_to(writer).map_err(SerializeError::from)?;
15662        }
15663        Ok(())
15664    }
15665
15666    fn is_empty_element(&self) -> bool {
15667        if !self.cell_smart_tag_pr.is_empty() {
15668            return false;
15669        }
15670        #[cfg(feature = "extra-children")]
15671        if !self.extra_children.is_empty() {
15672            return false;
15673        }
15674        true
15675    }
15676}
15677
15678impl ToXml for CTCellSmartTagPr {
15679    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15680        #[allow(unused_mut)]
15681        let mut start = start;
15682        {
15683            let val = &self.key;
15684            start.push_attribute(("key", val.as_str()));
15685        }
15686        {
15687            let val = &self.value;
15688            start.push_attribute(("val", val.as_str()));
15689        }
15690        #[cfg(feature = "extra-attrs")]
15691        for (key, value) in &self.extra_attrs {
15692            start.push_attribute((key.as_str(), value.as_str()));
15693        }
15694        start
15695    }
15696
15697    fn is_empty_element(&self) -> bool {
15698        true
15699    }
15700}
15701
15702impl ToXml for Drawing {
15703    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15704        #[allow(unused_mut)]
15705        let mut start = start;
15706        {
15707            let val = &self.id;
15708            start.push_attribute(("r:id", val.as_str()));
15709        }
15710        #[cfg(feature = "extra-attrs")]
15711        for (key, value) in &self.extra_attrs {
15712            start.push_attribute((key.as_str(), value.as_str()));
15713        }
15714        start
15715    }
15716
15717    fn is_empty_element(&self) -> bool {
15718        true
15719    }
15720}
15721
15722impl ToXml for LegacyDrawing {
15723    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15724        #[allow(unused_mut)]
15725        let mut start = start;
15726        {
15727            let val = &self.id;
15728            start.push_attribute(("r:id", val.as_str()));
15729        }
15730        #[cfg(feature = "extra-attrs")]
15731        for (key, value) in &self.extra_attrs {
15732            start.push_attribute((key.as_str(), value.as_str()));
15733        }
15734        start
15735    }
15736
15737    fn is_empty_element(&self) -> bool {
15738        true
15739    }
15740}
15741
15742impl ToXml for DrawingHeaderFooter {
15743    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15744        #[allow(unused_mut)]
15745        let mut start = start;
15746        {
15747            let val = &self.id;
15748            start.push_attribute(("r:id", val.as_str()));
15749        }
15750        if let Some(ref val) = self.lho {
15751            {
15752                let s = val.to_string();
15753                start.push_attribute(("lho", s.as_str()));
15754            }
15755        }
15756        if let Some(ref val) = self.lhe {
15757            {
15758                let s = val.to_string();
15759                start.push_attribute(("lhe", s.as_str()));
15760            }
15761        }
15762        if let Some(ref val) = self.lhf {
15763            {
15764                let s = val.to_string();
15765                start.push_attribute(("lhf", s.as_str()));
15766            }
15767        }
15768        if let Some(ref val) = self.cho {
15769            {
15770                let s = val.to_string();
15771                start.push_attribute(("cho", s.as_str()));
15772            }
15773        }
15774        if let Some(ref val) = self.che {
15775            {
15776                let s = val.to_string();
15777                start.push_attribute(("che", s.as_str()));
15778            }
15779        }
15780        if let Some(ref val) = self.chf {
15781            {
15782                let s = val.to_string();
15783                start.push_attribute(("chf", s.as_str()));
15784            }
15785        }
15786        if let Some(ref val) = self.rho {
15787            {
15788                let s = val.to_string();
15789                start.push_attribute(("rho", s.as_str()));
15790            }
15791        }
15792        if let Some(ref val) = self.rhe {
15793            {
15794                let s = val.to_string();
15795                start.push_attribute(("rhe", s.as_str()));
15796            }
15797        }
15798        if let Some(ref val) = self.rhf {
15799            {
15800                let s = val.to_string();
15801                start.push_attribute(("rhf", s.as_str()));
15802            }
15803        }
15804        if let Some(ref val) = self.lfo {
15805            {
15806                let s = val.to_string();
15807                start.push_attribute(("lfo", s.as_str()));
15808            }
15809        }
15810        if let Some(ref val) = self.lfe {
15811            {
15812                let s = val.to_string();
15813                start.push_attribute(("lfe", s.as_str()));
15814            }
15815        }
15816        if let Some(ref val) = self.lff {
15817            {
15818                let s = val.to_string();
15819                start.push_attribute(("lff", s.as_str()));
15820            }
15821        }
15822        if let Some(ref val) = self.cfo {
15823            {
15824                let s = val.to_string();
15825                start.push_attribute(("cfo", s.as_str()));
15826            }
15827        }
15828        if let Some(ref val) = self.cfe {
15829            {
15830                let s = val.to_string();
15831                start.push_attribute(("cfe", s.as_str()));
15832            }
15833        }
15834        if let Some(ref val) = self.cff {
15835            {
15836                let s = val.to_string();
15837                start.push_attribute(("cff", s.as_str()));
15838            }
15839        }
15840        if let Some(ref val) = self.rfo {
15841            {
15842                let s = val.to_string();
15843                start.push_attribute(("rfo", s.as_str()));
15844            }
15845        }
15846        if let Some(ref val) = self.rfe {
15847            {
15848                let s = val.to_string();
15849                start.push_attribute(("rfe", s.as_str()));
15850            }
15851        }
15852        if let Some(ref val) = self.rff {
15853            {
15854                let s = val.to_string();
15855                start.push_attribute(("rff", s.as_str()));
15856            }
15857        }
15858        #[cfg(feature = "extra-attrs")]
15859        for (key, value) in &self.extra_attrs {
15860            start.push_attribute((key.as_str(), value.as_str()));
15861        }
15862        start
15863    }
15864
15865    fn is_empty_element(&self) -> bool {
15866        true
15867    }
15868}
15869
15870impl ToXml for CustomSheetViews {
15871    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15872        #[cfg(feature = "extra-children")]
15873        let mut extra_iter = self.extra_children.iter().peekable();
15874        #[cfg(feature = "extra-children")]
15875        let mut emit_idx: usize = 0;
15876        for item in &self.custom_sheet_view {
15877            #[cfg(feature = "extra-children")]
15878            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
15879                extra_iter
15880                    .next()
15881                    .unwrap()
15882                    .node
15883                    .write_to(writer)
15884                    .map_err(SerializeError::from)?;
15885            }
15886            item.write_element("customSheetView", writer)?;
15887            #[cfg(feature = "extra-children")]
15888            {
15889                emit_idx += 1;
15890            }
15891        }
15892        #[cfg(feature = "extra-children")]
15893        for extra in extra_iter {
15894            extra.node.write_to(writer).map_err(SerializeError::from)?;
15895        }
15896        Ok(())
15897    }
15898
15899    fn is_empty_element(&self) -> bool {
15900        if !self.custom_sheet_view.is_empty() {
15901            return false;
15902        }
15903        #[cfg(feature = "extra-children")]
15904        if !self.extra_children.is_empty() {
15905            return false;
15906        }
15907        true
15908    }
15909}
15910
15911impl ToXml for CustomSheetView {
15912    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
15913        #[allow(unused_mut)]
15914        let mut start = start;
15915        {
15916            let val = &self.guid;
15917            start.push_attribute(("guid", val.as_str()));
15918        }
15919        if let Some(ref val) = self.scale {
15920            {
15921                let s = val.to_string();
15922                start.push_attribute(("scale", s.as_str()));
15923            }
15924        }
15925        if let Some(ref val) = self.color_id {
15926            {
15927                let s = val.to_string();
15928                start.push_attribute(("colorId", s.as_str()));
15929            }
15930        }
15931        if let Some(ref val) = self.show_page_breaks {
15932            start.push_attribute(("showPageBreaks", if *val { "1" } else { "0" }));
15933        }
15934        if let Some(ref val) = self.show_formulas {
15935            start.push_attribute(("showFormulas", if *val { "1" } else { "0" }));
15936        }
15937        if let Some(ref val) = self.show_grid_lines {
15938            start.push_attribute(("showGridLines", if *val { "1" } else { "0" }));
15939        }
15940        if let Some(ref val) = self.show_row_col {
15941            start.push_attribute(("showRowCol", if *val { "1" } else { "0" }));
15942        }
15943        if let Some(ref val) = self.outline_symbols {
15944            start.push_attribute(("outlineSymbols", if *val { "1" } else { "0" }));
15945        }
15946        if let Some(ref val) = self.zero_values {
15947            start.push_attribute(("zeroValues", if *val { "1" } else { "0" }));
15948        }
15949        if let Some(ref val) = self.fit_to_page {
15950            start.push_attribute(("fitToPage", if *val { "1" } else { "0" }));
15951        }
15952        if let Some(ref val) = self.print_area {
15953            start.push_attribute(("printArea", if *val { "1" } else { "0" }));
15954        }
15955        if let Some(ref val) = self.filter {
15956            start.push_attribute(("filter", if *val { "1" } else { "0" }));
15957        }
15958        if let Some(ref val) = self.show_auto_filter {
15959            start.push_attribute(("showAutoFilter", if *val { "1" } else { "0" }));
15960        }
15961        if let Some(ref val) = self.hidden_rows {
15962            start.push_attribute(("hiddenRows", if *val { "1" } else { "0" }));
15963        }
15964        if let Some(ref val) = self.hidden_columns {
15965            start.push_attribute(("hiddenColumns", if *val { "1" } else { "0" }));
15966        }
15967        if let Some(ref val) = self.state {
15968            {
15969                let s = val.to_string();
15970                start.push_attribute(("state", s.as_str()));
15971            }
15972        }
15973        if let Some(ref val) = self.filter_unique {
15974            start.push_attribute(("filterUnique", if *val { "1" } else { "0" }));
15975        }
15976        if let Some(ref val) = self.view {
15977            {
15978                let s = val.to_string();
15979                start.push_attribute(("view", s.as_str()));
15980            }
15981        }
15982        if let Some(ref val) = self.show_ruler {
15983            start.push_attribute(("showRuler", if *val { "1" } else { "0" }));
15984        }
15985        if let Some(ref val) = self.top_left_cell {
15986            start.push_attribute(("topLeftCell", val.as_str()));
15987        }
15988        #[cfg(feature = "extra-attrs")]
15989        for (key, value) in &self.extra_attrs {
15990            start.push_attribute((key.as_str(), value.as_str()));
15991        }
15992        start
15993    }
15994
15995    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
15996        #[cfg(feature = "extra-children")]
15997        let mut extra_iter = self.extra_children.iter().peekable();
15998        #[cfg(feature = "extra-children")]
15999        let mut emit_idx: usize = 0;
16000        #[cfg(feature = "extra-children")]
16001        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16002            extra_iter
16003                .next()
16004                .unwrap()
16005                .node
16006                .write_to(writer)
16007                .map_err(SerializeError::from)?;
16008        }
16009        if let Some(ref val) = self.pane {
16010            val.write_element("pane", writer)?;
16011        }
16012        #[cfg(feature = "extra-children")]
16013        {
16014            emit_idx += 1;
16015        }
16016        #[cfg(feature = "extra-children")]
16017        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16018            extra_iter
16019                .next()
16020                .unwrap()
16021                .node
16022                .write_to(writer)
16023                .map_err(SerializeError::from)?;
16024        }
16025        if let Some(ref val) = self.selection {
16026            val.write_element("selection", writer)?;
16027        }
16028        #[cfg(feature = "extra-children")]
16029        {
16030            emit_idx += 1;
16031        }
16032        #[cfg(feature = "extra-children")]
16033        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16034            extra_iter
16035                .next()
16036                .unwrap()
16037                .node
16038                .write_to(writer)
16039                .map_err(SerializeError::from)?;
16040        }
16041        if let Some(ref val) = self.row_breaks {
16042            val.write_element("rowBreaks", writer)?;
16043        }
16044        #[cfg(feature = "extra-children")]
16045        {
16046            emit_idx += 1;
16047        }
16048        #[cfg(feature = "extra-children")]
16049        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16050            extra_iter
16051                .next()
16052                .unwrap()
16053                .node
16054                .write_to(writer)
16055                .map_err(SerializeError::from)?;
16056        }
16057        if let Some(ref val) = self.col_breaks {
16058            val.write_element("colBreaks", writer)?;
16059        }
16060        #[cfg(feature = "extra-children")]
16061        {
16062            emit_idx += 1;
16063        }
16064        #[cfg(feature = "extra-children")]
16065        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16066            extra_iter
16067                .next()
16068                .unwrap()
16069                .node
16070                .write_to(writer)
16071                .map_err(SerializeError::from)?;
16072        }
16073        if let Some(ref val) = self.page_margins {
16074            val.write_element("pageMargins", writer)?;
16075        }
16076        #[cfg(feature = "extra-children")]
16077        {
16078            emit_idx += 1;
16079        }
16080        #[cfg(feature = "extra-children")]
16081        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16082            extra_iter
16083                .next()
16084                .unwrap()
16085                .node
16086                .write_to(writer)
16087                .map_err(SerializeError::from)?;
16088        }
16089        if let Some(ref val) = self.print_options {
16090            val.write_element("printOptions", writer)?;
16091        }
16092        #[cfg(feature = "extra-children")]
16093        {
16094            emit_idx += 1;
16095        }
16096        #[cfg(feature = "extra-children")]
16097        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16098            extra_iter
16099                .next()
16100                .unwrap()
16101                .node
16102                .write_to(writer)
16103                .map_err(SerializeError::from)?;
16104        }
16105        if let Some(ref val) = self.page_setup {
16106            val.write_element("pageSetup", writer)?;
16107        }
16108        #[cfg(feature = "extra-children")]
16109        {
16110            emit_idx += 1;
16111        }
16112        #[cfg(feature = "extra-children")]
16113        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16114            extra_iter
16115                .next()
16116                .unwrap()
16117                .node
16118                .write_to(writer)
16119                .map_err(SerializeError::from)?;
16120        }
16121        if let Some(ref val) = self.header_footer {
16122            val.write_element("headerFooter", writer)?;
16123        }
16124        #[cfg(feature = "extra-children")]
16125        {
16126            emit_idx += 1;
16127        }
16128        #[cfg(feature = "extra-children")]
16129        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16130            extra_iter
16131                .next()
16132                .unwrap()
16133                .node
16134                .write_to(writer)
16135                .map_err(SerializeError::from)?;
16136        }
16137        if let Some(ref val) = self.auto_filter {
16138            val.write_element("autoFilter", writer)?;
16139        }
16140        #[cfg(feature = "extra-children")]
16141        {
16142            emit_idx += 1;
16143        }
16144        #[cfg(feature = "extra-children")]
16145        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16146            extra_iter
16147                .next()
16148                .unwrap()
16149                .node
16150                .write_to(writer)
16151                .map_err(SerializeError::from)?;
16152        }
16153        if let Some(ref val) = self.extension_list {
16154            val.write_element("extLst", writer)?;
16155        }
16156        #[cfg(feature = "extra-children")]
16157        {
16158            emit_idx += 1;
16159        }
16160        #[cfg(feature = "extra-children")]
16161        for extra in extra_iter {
16162            extra.node.write_to(writer).map_err(SerializeError::from)?;
16163        }
16164        Ok(())
16165    }
16166
16167    fn is_empty_element(&self) -> bool {
16168        if self.pane.is_some() {
16169            return false;
16170        }
16171        if self.selection.is_some() {
16172            return false;
16173        }
16174        if self.row_breaks.is_some() {
16175            return false;
16176        }
16177        if self.col_breaks.is_some() {
16178            return false;
16179        }
16180        if self.page_margins.is_some() {
16181            return false;
16182        }
16183        if self.print_options.is_some() {
16184            return false;
16185        }
16186        if self.page_setup.is_some() {
16187            return false;
16188        }
16189        if self.header_footer.is_some() {
16190            return false;
16191        }
16192        if self.auto_filter.is_some() {
16193            return false;
16194        }
16195        if self.extension_list.is_some() {
16196            return false;
16197        }
16198        #[cfg(feature = "extra-children")]
16199        if !self.extra_children.is_empty() {
16200            return false;
16201        }
16202        true
16203    }
16204}
16205
16206impl ToXml for DataValidations {
16207    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
16208        #[allow(unused_mut)]
16209        let mut start = start;
16210        if let Some(ref val) = self.disable_prompts {
16211            start.push_attribute(("disablePrompts", if *val { "1" } else { "0" }));
16212        }
16213        if let Some(ref val) = self.x_window {
16214            {
16215                let s = val.to_string();
16216                start.push_attribute(("xWindow", s.as_str()));
16217            }
16218        }
16219        if let Some(ref val) = self.y_window {
16220            {
16221                let s = val.to_string();
16222                start.push_attribute(("yWindow", s.as_str()));
16223            }
16224        }
16225        if let Some(ref val) = self.count {
16226            {
16227                let s = val.to_string();
16228                start.push_attribute(("count", s.as_str()));
16229            }
16230        }
16231        #[cfg(feature = "extra-attrs")]
16232        for (key, value) in &self.extra_attrs {
16233            start.push_attribute((key.as_str(), value.as_str()));
16234        }
16235        start
16236    }
16237
16238    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
16239        #[cfg(feature = "extra-children")]
16240        let mut extra_iter = self.extra_children.iter().peekable();
16241        #[cfg(feature = "extra-children")]
16242        let mut emit_idx: usize = 0;
16243        for item in &self.data_validation {
16244            #[cfg(feature = "extra-children")]
16245            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16246                extra_iter
16247                    .next()
16248                    .unwrap()
16249                    .node
16250                    .write_to(writer)
16251                    .map_err(SerializeError::from)?;
16252            }
16253            item.write_element("dataValidation", writer)?;
16254            #[cfg(feature = "extra-children")]
16255            {
16256                emit_idx += 1;
16257            }
16258        }
16259        #[cfg(feature = "extra-children")]
16260        for extra in extra_iter {
16261            extra.node.write_to(writer).map_err(SerializeError::from)?;
16262        }
16263        Ok(())
16264    }
16265
16266    fn is_empty_element(&self) -> bool {
16267        if !self.data_validation.is_empty() {
16268            return false;
16269        }
16270        #[cfg(feature = "extra-children")]
16271        if !self.extra_children.is_empty() {
16272            return false;
16273        }
16274        true
16275    }
16276}
16277
16278impl ToXml for DataValidation {
16279    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
16280        #[allow(unused_mut)]
16281        let mut start = start;
16282        #[cfg(feature = "sml-validation")]
16283        if let Some(ref val) = self.r#type {
16284            {
16285                let s = val.to_string();
16286                start.push_attribute(("type", s.as_str()));
16287            }
16288        }
16289        #[cfg(feature = "sml-validation")]
16290        if let Some(ref val) = self.error_style {
16291            {
16292                let s = val.to_string();
16293                start.push_attribute(("errorStyle", s.as_str()));
16294            }
16295        }
16296        #[cfg(feature = "sml-validation")]
16297        if let Some(ref val) = self.ime_mode {
16298            {
16299                let s = val.to_string();
16300                start.push_attribute(("imeMode", s.as_str()));
16301            }
16302        }
16303        #[cfg(feature = "sml-validation")]
16304        if let Some(ref val) = self.operator {
16305            {
16306                let s = val.to_string();
16307                start.push_attribute(("operator", s.as_str()));
16308            }
16309        }
16310        #[cfg(feature = "sml-validation")]
16311        if let Some(ref val) = self.allow_blank {
16312            start.push_attribute(("allowBlank", if *val { "1" } else { "0" }));
16313        }
16314        #[cfg(feature = "sml-validation")]
16315        if let Some(ref val) = self.show_drop_down {
16316            start.push_attribute(("showDropDown", if *val { "1" } else { "0" }));
16317        }
16318        #[cfg(feature = "sml-validation")]
16319        if let Some(ref val) = self.show_input_message {
16320            start.push_attribute(("showInputMessage", if *val { "1" } else { "0" }));
16321        }
16322        #[cfg(feature = "sml-validation")]
16323        if let Some(ref val) = self.show_error_message {
16324            start.push_attribute(("showErrorMessage", if *val { "1" } else { "0" }));
16325        }
16326        #[cfg(feature = "sml-validation")]
16327        if let Some(ref val) = self.error_title {
16328            start.push_attribute(("errorTitle", val.as_str()));
16329        }
16330        #[cfg(feature = "sml-validation")]
16331        if let Some(ref val) = self.error {
16332            start.push_attribute(("error", val.as_str()));
16333        }
16334        #[cfg(feature = "sml-validation")]
16335        if let Some(ref val) = self.prompt_title {
16336            start.push_attribute(("promptTitle", val.as_str()));
16337        }
16338        #[cfg(feature = "sml-validation")]
16339        if let Some(ref val) = self.prompt {
16340            start.push_attribute(("prompt", val.as_str()));
16341        }
16342        #[cfg(feature = "sml-validation")]
16343        {
16344            let val = &self.square_reference;
16345            start.push_attribute(("sqref", val.as_str()));
16346        }
16347        #[cfg(feature = "extra-attrs")]
16348        for (key, value) in &self.extra_attrs {
16349            start.push_attribute((key.as_str(), value.as_str()));
16350        }
16351        start
16352    }
16353
16354    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
16355        #[cfg(feature = "extra-children")]
16356        let mut extra_iter = self.extra_children.iter().peekable();
16357        #[cfg(feature = "extra-children")]
16358        let mut emit_idx: usize = 0;
16359        #[cfg(feature = "extra-children")]
16360        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16361            extra_iter
16362                .next()
16363                .unwrap()
16364                .node
16365                .write_to(writer)
16366                .map_err(SerializeError::from)?;
16367        }
16368        #[cfg(feature = "sml-validation")]
16369        if let Some(ref val) = self.formula1 {
16370            {
16371                let start = BytesStart::new("formula1");
16372                writer.write_event(Event::Start(start))?;
16373                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
16374                writer.write_event(Event::End(BytesEnd::new("formula1")))?;
16375            }
16376        }
16377        #[cfg(feature = "extra-children")]
16378        {
16379            emit_idx += 1;
16380        }
16381        #[cfg(feature = "extra-children")]
16382        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16383            extra_iter
16384                .next()
16385                .unwrap()
16386                .node
16387                .write_to(writer)
16388                .map_err(SerializeError::from)?;
16389        }
16390        #[cfg(feature = "sml-validation")]
16391        if let Some(ref val) = self.formula2 {
16392            {
16393                let start = BytesStart::new("formula2");
16394                writer.write_event(Event::Start(start))?;
16395                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
16396                writer.write_event(Event::End(BytesEnd::new("formula2")))?;
16397            }
16398        }
16399        #[cfg(feature = "extra-children")]
16400        {
16401            emit_idx += 1;
16402        }
16403        #[cfg(feature = "extra-children")]
16404        for extra in extra_iter {
16405            extra.node.write_to(writer).map_err(SerializeError::from)?;
16406        }
16407        Ok(())
16408    }
16409
16410    fn is_empty_element(&self) -> bool {
16411        #[cfg(feature = "sml-validation")]
16412        if self.formula1.is_some() {
16413            return false;
16414        }
16415        #[cfg(feature = "sml-validation")]
16416        if self.formula2.is_some() {
16417            return false;
16418        }
16419        #[cfg(feature = "extra-children")]
16420        if !self.extra_children.is_empty() {
16421            return false;
16422        }
16423        true
16424    }
16425}
16426
16427impl ToXml for ConditionalFormatting {
16428    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
16429        #[allow(unused_mut)]
16430        let mut start = start;
16431        #[cfg(feature = "sml-pivot")]
16432        if let Some(ref val) = self.pivot {
16433            start.push_attribute(("pivot", if *val { "1" } else { "0" }));
16434        }
16435        #[cfg(feature = "sml-styling")]
16436        if let Some(ref val) = self.square_reference {
16437            start.push_attribute(("sqref", val.as_str()));
16438        }
16439        #[cfg(feature = "extra-attrs")]
16440        for (key, value) in &self.extra_attrs {
16441            start.push_attribute((key.as_str(), value.as_str()));
16442        }
16443        start
16444    }
16445
16446    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
16447        #[cfg(feature = "extra-children")]
16448        let mut extra_iter = self.extra_children.iter().peekable();
16449        #[cfg(feature = "extra-children")]
16450        let mut emit_idx: usize = 0;
16451        #[cfg(feature = "sml-styling")]
16452        for item in &self.cf_rule {
16453            #[cfg(feature = "extra-children")]
16454            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16455                extra_iter
16456                    .next()
16457                    .unwrap()
16458                    .node
16459                    .write_to(writer)
16460                    .map_err(SerializeError::from)?;
16461            }
16462            item.write_element("cfRule", writer)?;
16463            #[cfg(feature = "extra-children")]
16464            {
16465                emit_idx += 1;
16466            }
16467        }
16468        #[cfg(feature = "extra-children")]
16469        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16470            extra_iter
16471                .next()
16472                .unwrap()
16473                .node
16474                .write_to(writer)
16475                .map_err(SerializeError::from)?;
16476        }
16477        #[cfg(feature = "sml-extensions")]
16478        if let Some(ref val) = self.extension_list {
16479            val.write_element("extLst", writer)?;
16480        }
16481        #[cfg(feature = "extra-children")]
16482        {
16483            emit_idx += 1;
16484        }
16485        #[cfg(feature = "extra-children")]
16486        for extra in extra_iter {
16487            extra.node.write_to(writer).map_err(SerializeError::from)?;
16488        }
16489        Ok(())
16490    }
16491
16492    fn is_empty_element(&self) -> bool {
16493        #[cfg(feature = "sml-styling")]
16494        if !self.cf_rule.is_empty() {
16495            return false;
16496        }
16497        #[cfg(feature = "sml-extensions")]
16498        if self.extension_list.is_some() {
16499            return false;
16500        }
16501        #[cfg(feature = "extra-children")]
16502        if !self.extra_children.is_empty() {
16503            return false;
16504        }
16505        true
16506    }
16507}
16508
16509impl ToXml for ConditionalRule {
16510    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
16511        #[allow(unused_mut)]
16512        let mut start = start;
16513        #[cfg(feature = "sml-styling")]
16514        if let Some(ref val) = self.r#type {
16515            {
16516                let s = val.to_string();
16517                start.push_attribute(("type", s.as_str()));
16518            }
16519        }
16520        #[cfg(feature = "sml-styling")]
16521        if let Some(ref val) = self.dxf_id {
16522            {
16523                let s = val.to_string();
16524                start.push_attribute(("dxfId", s.as_str()));
16525            }
16526        }
16527        #[cfg(feature = "sml-styling")]
16528        {
16529            let val = &self.priority;
16530            {
16531                let s = val.to_string();
16532                start.push_attribute(("priority", s.as_str()));
16533            }
16534        }
16535        #[cfg(feature = "sml-styling")]
16536        if let Some(ref val) = self.stop_if_true {
16537            start.push_attribute(("stopIfTrue", if *val { "1" } else { "0" }));
16538        }
16539        #[cfg(feature = "sml-styling")]
16540        if let Some(ref val) = self.above_average {
16541            start.push_attribute(("aboveAverage", if *val { "1" } else { "0" }));
16542        }
16543        #[cfg(feature = "sml-styling")]
16544        if let Some(ref val) = self.percent {
16545            start.push_attribute(("percent", if *val { "1" } else { "0" }));
16546        }
16547        #[cfg(feature = "sml-styling")]
16548        if let Some(ref val) = self.bottom {
16549            start.push_attribute(("bottom", if *val { "1" } else { "0" }));
16550        }
16551        #[cfg(feature = "sml-styling")]
16552        if let Some(ref val) = self.operator {
16553            {
16554                let s = val.to_string();
16555                start.push_attribute(("operator", s.as_str()));
16556            }
16557        }
16558        #[cfg(feature = "sml-styling")]
16559        if let Some(ref val) = self.text {
16560            start.push_attribute(("text", val.as_str()));
16561        }
16562        #[cfg(feature = "sml-styling")]
16563        if let Some(ref val) = self.time_period {
16564            {
16565                let s = val.to_string();
16566                start.push_attribute(("timePeriod", s.as_str()));
16567            }
16568        }
16569        #[cfg(feature = "sml-styling")]
16570        if let Some(ref val) = self.rank {
16571            {
16572                let s = val.to_string();
16573                start.push_attribute(("rank", s.as_str()));
16574            }
16575        }
16576        #[cfg(feature = "sml-styling")]
16577        if let Some(ref val) = self.std_dev {
16578            {
16579                let s = val.to_string();
16580                start.push_attribute(("stdDev", s.as_str()));
16581            }
16582        }
16583        #[cfg(feature = "sml-styling")]
16584        if let Some(ref val) = self.equal_average {
16585            start.push_attribute(("equalAverage", if *val { "1" } else { "0" }));
16586        }
16587        #[cfg(feature = "extra-attrs")]
16588        for (key, value) in &self.extra_attrs {
16589            start.push_attribute((key.as_str(), value.as_str()));
16590        }
16591        start
16592    }
16593
16594    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
16595        #[cfg(feature = "extra-children")]
16596        let mut extra_iter = self.extra_children.iter().peekable();
16597        #[cfg(feature = "extra-children")]
16598        let mut emit_idx: usize = 0;
16599        #[cfg(feature = "sml-styling")]
16600        for item in &self.formula {
16601            #[cfg(feature = "extra-children")]
16602            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16603                extra_iter
16604                    .next()
16605                    .unwrap()
16606                    .node
16607                    .write_to(writer)
16608                    .map_err(SerializeError::from)?;
16609            }
16610            {
16611                let start = BytesStart::new("formula");
16612                writer.write_event(Event::Start(start))?;
16613                writer.write_event(Event::Text(BytesText::new(item.as_str())))?;
16614                writer.write_event(Event::End(BytesEnd::new("formula")))?;
16615            }
16616            #[cfg(feature = "extra-children")]
16617            {
16618                emit_idx += 1;
16619            }
16620        }
16621        #[cfg(feature = "extra-children")]
16622        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16623            extra_iter
16624                .next()
16625                .unwrap()
16626                .node
16627                .write_to(writer)
16628                .map_err(SerializeError::from)?;
16629        }
16630        #[cfg(feature = "sml-styling")]
16631        if let Some(ref val) = self.color_scale {
16632            val.write_element("colorScale", writer)?;
16633        }
16634        #[cfg(feature = "extra-children")]
16635        {
16636            emit_idx += 1;
16637        }
16638        #[cfg(feature = "extra-children")]
16639        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16640            extra_iter
16641                .next()
16642                .unwrap()
16643                .node
16644                .write_to(writer)
16645                .map_err(SerializeError::from)?;
16646        }
16647        #[cfg(feature = "sml-styling")]
16648        if let Some(ref val) = self.data_bar {
16649            val.write_element("dataBar", writer)?;
16650        }
16651        #[cfg(feature = "extra-children")]
16652        {
16653            emit_idx += 1;
16654        }
16655        #[cfg(feature = "extra-children")]
16656        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16657            extra_iter
16658                .next()
16659                .unwrap()
16660                .node
16661                .write_to(writer)
16662                .map_err(SerializeError::from)?;
16663        }
16664        #[cfg(feature = "sml-styling")]
16665        if let Some(ref val) = self.icon_set {
16666            val.write_element("iconSet", writer)?;
16667        }
16668        #[cfg(feature = "extra-children")]
16669        {
16670            emit_idx += 1;
16671        }
16672        #[cfg(feature = "extra-children")]
16673        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16674            extra_iter
16675                .next()
16676                .unwrap()
16677                .node
16678                .write_to(writer)
16679                .map_err(SerializeError::from)?;
16680        }
16681        #[cfg(feature = "sml-extensions")]
16682        if let Some(ref val) = self.extension_list {
16683            val.write_element("extLst", writer)?;
16684        }
16685        #[cfg(feature = "extra-children")]
16686        {
16687            emit_idx += 1;
16688        }
16689        #[cfg(feature = "extra-children")]
16690        for extra in extra_iter {
16691            extra.node.write_to(writer).map_err(SerializeError::from)?;
16692        }
16693        Ok(())
16694    }
16695
16696    fn is_empty_element(&self) -> bool {
16697        #[cfg(feature = "sml-styling")]
16698        if !self.formula.is_empty() {
16699            return false;
16700        }
16701        #[cfg(feature = "sml-styling")]
16702        if self.color_scale.is_some() {
16703            return false;
16704        }
16705        #[cfg(feature = "sml-styling")]
16706        if self.data_bar.is_some() {
16707            return false;
16708        }
16709        #[cfg(feature = "sml-styling")]
16710        if self.icon_set.is_some() {
16711            return false;
16712        }
16713        #[cfg(feature = "sml-extensions")]
16714        if self.extension_list.is_some() {
16715            return false;
16716        }
16717        #[cfg(feature = "extra-children")]
16718        if !self.extra_children.is_empty() {
16719            return false;
16720        }
16721        true
16722    }
16723}
16724
16725impl ToXml for Hyperlinks {
16726    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
16727        #[cfg(feature = "extra-children")]
16728        let mut extra_iter = self.extra_children.iter().peekable();
16729        #[cfg(feature = "extra-children")]
16730        let mut emit_idx: usize = 0;
16731        for item in &self.hyperlink {
16732            #[cfg(feature = "extra-children")]
16733            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16734                extra_iter
16735                    .next()
16736                    .unwrap()
16737                    .node
16738                    .write_to(writer)
16739                    .map_err(SerializeError::from)?;
16740            }
16741            item.write_element("hyperlink", writer)?;
16742            #[cfg(feature = "extra-children")]
16743            {
16744                emit_idx += 1;
16745            }
16746        }
16747        #[cfg(feature = "extra-children")]
16748        for extra in extra_iter {
16749            extra.node.write_to(writer).map_err(SerializeError::from)?;
16750        }
16751        Ok(())
16752    }
16753
16754    fn is_empty_element(&self) -> bool {
16755        if !self.hyperlink.is_empty() {
16756            return false;
16757        }
16758        #[cfg(feature = "extra-children")]
16759        if !self.extra_children.is_empty() {
16760            return false;
16761        }
16762        true
16763    }
16764}
16765
16766impl ToXml for Hyperlink {
16767    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
16768        #[allow(unused_mut)]
16769        let mut start = start;
16770        #[cfg(feature = "sml-hyperlinks")]
16771        {
16772            let val = &self.reference;
16773            start.push_attribute(("ref", val.as_str()));
16774        }
16775        if let Some(ref val) = self.id {
16776            start.push_attribute(("r:id", val.as_str()));
16777        }
16778        #[cfg(feature = "sml-hyperlinks")]
16779        if let Some(ref val) = self.location {
16780            start.push_attribute(("location", val.as_str()));
16781        }
16782        #[cfg(feature = "sml-hyperlinks")]
16783        if let Some(ref val) = self.tooltip {
16784            start.push_attribute(("tooltip", val.as_str()));
16785        }
16786        #[cfg(feature = "sml-hyperlinks")]
16787        if let Some(ref val) = self.display {
16788            start.push_attribute(("display", val.as_str()));
16789        }
16790        #[cfg(feature = "extra-attrs")]
16791        for (key, value) in &self.extra_attrs {
16792            start.push_attribute((key.as_str(), value.as_str()));
16793        }
16794        start
16795    }
16796
16797    fn is_empty_element(&self) -> bool {
16798        true
16799    }
16800}
16801
16802impl ToXml for CellFormula {
16803    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
16804        #[allow(unused_mut)]
16805        let mut start = start;
16806        if let Some(ref val) = self.cell_type {
16807            {
16808                let s = val.to_string();
16809                start.push_attribute(("t", s.as_str()));
16810            }
16811        }
16812        #[cfg(feature = "sml-formulas-advanced")]
16813        if let Some(ref val) = self.aca {
16814            start.push_attribute(("aca", if *val { "1" } else { "0" }));
16815        }
16816        if let Some(ref val) = self.reference {
16817            start.push_attribute(("ref", val.as_str()));
16818        }
16819        #[cfg(feature = "sml-formulas-advanced")]
16820        if let Some(ref val) = self.dt2_d {
16821            start.push_attribute(("dt2D", if *val { "1" } else { "0" }));
16822        }
16823        #[cfg(feature = "sml-formulas-advanced")]
16824        if let Some(ref val) = self.dtr {
16825            start.push_attribute(("dtr", if *val { "1" } else { "0" }));
16826        }
16827        #[cfg(feature = "sml-formulas-advanced")]
16828        if let Some(ref val) = self.del1 {
16829            start.push_attribute(("del1", if *val { "1" } else { "0" }));
16830        }
16831        #[cfg(feature = "sml-formulas-advanced")]
16832        if let Some(ref val) = self.del2 {
16833            start.push_attribute(("del2", if *val { "1" } else { "0" }));
16834        }
16835        #[cfg(feature = "sml-formulas-advanced")]
16836        if let Some(ref val) = self.r1 {
16837            start.push_attribute(("r1", val.as_str()));
16838        }
16839        #[cfg(feature = "sml-formulas-advanced")]
16840        if let Some(ref val) = self.r2 {
16841            start.push_attribute(("r2", val.as_str()));
16842        }
16843        #[cfg(feature = "sml-formulas-advanced")]
16844        if let Some(ref val) = self.ca {
16845            start.push_attribute(("ca", if *val { "1" } else { "0" }));
16846        }
16847        if let Some(ref val) = self.si {
16848            {
16849                let s = val.to_string();
16850                start.push_attribute(("si", s.as_str()));
16851            }
16852        }
16853        #[cfg(feature = "sml-formulas-advanced")]
16854        if let Some(ref val) = self.bx {
16855            start.push_attribute(("bx", if *val { "1" } else { "0" }));
16856        }
16857        #[cfg(feature = "extra-attrs")]
16858        for (key, value) in &self.extra_attrs {
16859            start.push_attribute((key.as_str(), value.as_str()));
16860        }
16861        start
16862    }
16863
16864    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
16865        if let Some(ref text) = self.text {
16866            writer.write_event(Event::Text(BytesText::new(text)))?;
16867        }
16868        #[cfg(feature = "extra-children")]
16869        for extra in &self.extra_children {
16870            extra.node.write_to(writer).map_err(SerializeError::from)?;
16871        }
16872        Ok(())
16873    }
16874
16875    fn is_empty_element(&self) -> bool {
16876        if self.text.is_some() {
16877            return false;
16878        }
16879        #[cfg(feature = "extra-children")]
16880        if !self.extra_children.is_empty() {
16881            return false;
16882        }
16883        true
16884    }
16885}
16886
16887impl ToXml for ColorScale {
16888    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
16889        #[cfg(feature = "extra-children")]
16890        let mut extra_iter = self.extra_children.iter().peekable();
16891        #[cfg(feature = "extra-children")]
16892        let mut emit_idx: usize = 0;
16893        #[cfg(feature = "sml-styling")]
16894        for item in &self.cfvo {
16895            #[cfg(feature = "extra-children")]
16896            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16897                extra_iter
16898                    .next()
16899                    .unwrap()
16900                    .node
16901                    .write_to(writer)
16902                    .map_err(SerializeError::from)?;
16903            }
16904            item.write_element("cfvo", writer)?;
16905            #[cfg(feature = "extra-children")]
16906            {
16907                emit_idx += 1;
16908            }
16909        }
16910        #[cfg(feature = "sml-styling")]
16911        for item in &self.color {
16912            #[cfg(feature = "extra-children")]
16913            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16914                extra_iter
16915                    .next()
16916                    .unwrap()
16917                    .node
16918                    .write_to(writer)
16919                    .map_err(SerializeError::from)?;
16920            }
16921            item.write_element("color", writer)?;
16922            #[cfg(feature = "extra-children")]
16923            {
16924                emit_idx += 1;
16925            }
16926        }
16927        #[cfg(feature = "extra-children")]
16928        for extra in extra_iter {
16929            extra.node.write_to(writer).map_err(SerializeError::from)?;
16930        }
16931        Ok(())
16932    }
16933
16934    fn is_empty_element(&self) -> bool {
16935        #[cfg(feature = "sml-styling")]
16936        if !self.cfvo.is_empty() {
16937            return false;
16938        }
16939        #[cfg(feature = "sml-styling")]
16940        if !self.color.is_empty() {
16941            return false;
16942        }
16943        #[cfg(feature = "extra-children")]
16944        if !self.extra_children.is_empty() {
16945            return false;
16946        }
16947        true
16948    }
16949}
16950
16951impl ToXml for DataBar {
16952    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
16953        #[allow(unused_mut)]
16954        let mut start = start;
16955        #[cfg(feature = "sml-styling")]
16956        if let Some(ref val) = self.min_length {
16957            {
16958                let s = val.to_string();
16959                start.push_attribute(("minLength", s.as_str()));
16960            }
16961        }
16962        #[cfg(feature = "sml-styling")]
16963        if let Some(ref val) = self.max_length {
16964            {
16965                let s = val.to_string();
16966                start.push_attribute(("maxLength", s.as_str()));
16967            }
16968        }
16969        #[cfg(feature = "sml-styling")]
16970        if let Some(ref val) = self.show_value {
16971            start.push_attribute(("showValue", if *val { "1" } else { "0" }));
16972        }
16973        #[cfg(feature = "extra-attrs")]
16974        for (key, value) in &self.extra_attrs {
16975            start.push_attribute((key.as_str(), value.as_str()));
16976        }
16977        start
16978    }
16979
16980    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
16981        #[cfg(feature = "extra-children")]
16982        let mut extra_iter = self.extra_children.iter().peekable();
16983        #[cfg(feature = "extra-children")]
16984        let mut emit_idx: usize = 0;
16985        #[cfg(feature = "sml-styling")]
16986        for item in &self.cfvo {
16987            #[cfg(feature = "extra-children")]
16988            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
16989                extra_iter
16990                    .next()
16991                    .unwrap()
16992                    .node
16993                    .write_to(writer)
16994                    .map_err(SerializeError::from)?;
16995            }
16996            item.write_element("cfvo", writer)?;
16997            #[cfg(feature = "extra-children")]
16998            {
16999                emit_idx += 1;
17000            }
17001        }
17002        #[cfg(feature = "extra-children")]
17003        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17004            extra_iter
17005                .next()
17006                .unwrap()
17007                .node
17008                .write_to(writer)
17009                .map_err(SerializeError::from)?;
17010        }
17011        #[cfg(feature = "sml-styling")]
17012        {
17013            let val = &self.color;
17014            val.write_element("color", writer)?;
17015        }
17016        #[cfg(feature = "extra-children")]
17017        {
17018            emit_idx += 1;
17019        }
17020        #[cfg(feature = "extra-children")]
17021        for extra in extra_iter {
17022            extra.node.write_to(writer).map_err(SerializeError::from)?;
17023        }
17024        Ok(())
17025    }
17026
17027    fn is_empty_element(&self) -> bool {
17028        #[cfg(feature = "sml-styling")]
17029        if !self.cfvo.is_empty() {
17030            return false;
17031        }
17032        #[cfg(feature = "sml-styling")]
17033        return false;
17034        #[cfg(feature = "extra-children")]
17035        if !self.extra_children.is_empty() {
17036            return false;
17037        }
17038        true
17039    }
17040}
17041
17042impl ToXml for IconSet {
17043    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17044        #[allow(unused_mut)]
17045        let mut start = start;
17046        #[cfg(feature = "sml-styling")]
17047        if let Some(ref val) = self.icon_set {
17048            {
17049                let s = val.to_string();
17050                start.push_attribute(("iconSet", s.as_str()));
17051            }
17052        }
17053        #[cfg(feature = "sml-styling")]
17054        if let Some(ref val) = self.show_value {
17055            start.push_attribute(("showValue", if *val { "1" } else { "0" }));
17056        }
17057        #[cfg(feature = "sml-styling")]
17058        if let Some(ref val) = self.percent {
17059            start.push_attribute(("percent", if *val { "1" } else { "0" }));
17060        }
17061        #[cfg(feature = "sml-styling")]
17062        if let Some(ref val) = self.reverse {
17063            start.push_attribute(("reverse", if *val { "1" } else { "0" }));
17064        }
17065        #[cfg(feature = "extra-attrs")]
17066        for (key, value) in &self.extra_attrs {
17067            start.push_attribute((key.as_str(), value.as_str()));
17068        }
17069        start
17070    }
17071
17072    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
17073        #[cfg(feature = "extra-children")]
17074        let mut extra_iter = self.extra_children.iter().peekable();
17075        #[cfg(feature = "extra-children")]
17076        let mut emit_idx: usize = 0;
17077        #[cfg(feature = "sml-styling")]
17078        for item in &self.cfvo {
17079            #[cfg(feature = "extra-children")]
17080            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17081                extra_iter
17082                    .next()
17083                    .unwrap()
17084                    .node
17085                    .write_to(writer)
17086                    .map_err(SerializeError::from)?;
17087            }
17088            item.write_element("cfvo", writer)?;
17089            #[cfg(feature = "extra-children")]
17090            {
17091                emit_idx += 1;
17092            }
17093        }
17094        #[cfg(feature = "extra-children")]
17095        for extra in extra_iter {
17096            extra.node.write_to(writer).map_err(SerializeError::from)?;
17097        }
17098        Ok(())
17099    }
17100
17101    fn is_empty_element(&self) -> bool {
17102        #[cfg(feature = "sml-styling")]
17103        if !self.cfvo.is_empty() {
17104            return false;
17105        }
17106        #[cfg(feature = "extra-children")]
17107        if !self.extra_children.is_empty() {
17108            return false;
17109        }
17110        true
17111    }
17112}
17113
17114impl ToXml for ConditionalFormatValue {
17115    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17116        #[allow(unused_mut)]
17117        let mut start = start;
17118        #[cfg(feature = "sml-styling")]
17119        {
17120            let val = &self.r#type;
17121            {
17122                let s = val.to_string();
17123                start.push_attribute(("type", s.as_str()));
17124            }
17125        }
17126        #[cfg(feature = "sml-styling")]
17127        if let Some(ref val) = self.value {
17128            start.push_attribute(("val", val.as_str()));
17129        }
17130        #[cfg(feature = "sml-styling")]
17131        if let Some(ref val) = self.gte {
17132            start.push_attribute(("gte", if *val { "1" } else { "0" }));
17133        }
17134        #[cfg(feature = "extra-attrs")]
17135        for (key, value) in &self.extra_attrs {
17136            start.push_attribute((key.as_str(), value.as_str()));
17137        }
17138        start
17139    }
17140
17141    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
17142        #[cfg(feature = "extra-children")]
17143        let mut extra_iter = self.extra_children.iter().peekable();
17144        #[cfg(feature = "extra-children")]
17145        let mut emit_idx: usize = 0;
17146        #[cfg(feature = "extra-children")]
17147        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17148            extra_iter
17149                .next()
17150                .unwrap()
17151                .node
17152                .write_to(writer)
17153                .map_err(SerializeError::from)?;
17154        }
17155        if let Some(ref val) = self.extension_list {
17156            val.write_element("extLst", writer)?;
17157        }
17158        #[cfg(feature = "extra-children")]
17159        {
17160            emit_idx += 1;
17161        }
17162        #[cfg(feature = "extra-children")]
17163        for extra in extra_iter {
17164            extra.node.write_to(writer).map_err(SerializeError::from)?;
17165        }
17166        Ok(())
17167    }
17168
17169    fn is_empty_element(&self) -> bool {
17170        if self.extension_list.is_some() {
17171            return false;
17172        }
17173        #[cfg(feature = "extra-children")]
17174        if !self.extra_children.is_empty() {
17175            return false;
17176        }
17177        true
17178    }
17179}
17180
17181impl ToXml for PageMargins {
17182    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17183        #[allow(unused_mut)]
17184        let mut start = start;
17185        #[cfg(feature = "sml-layout")]
17186        {
17187            let val = &self.left;
17188            {
17189                let s = val.to_string();
17190                start.push_attribute(("left", s.as_str()));
17191            }
17192        }
17193        #[cfg(feature = "sml-layout")]
17194        {
17195            let val = &self.right;
17196            {
17197                let s = val.to_string();
17198                start.push_attribute(("right", s.as_str()));
17199            }
17200        }
17201        #[cfg(feature = "sml-layout")]
17202        {
17203            let val = &self.top;
17204            {
17205                let s = val.to_string();
17206                start.push_attribute(("top", s.as_str()));
17207            }
17208        }
17209        #[cfg(feature = "sml-layout")]
17210        {
17211            let val = &self.bottom;
17212            {
17213                let s = val.to_string();
17214                start.push_attribute(("bottom", s.as_str()));
17215            }
17216        }
17217        #[cfg(feature = "sml-layout")]
17218        {
17219            let val = &self.header;
17220            {
17221                let s = val.to_string();
17222                start.push_attribute(("header", s.as_str()));
17223            }
17224        }
17225        #[cfg(feature = "sml-layout")]
17226        {
17227            let val = &self.footer;
17228            {
17229                let s = val.to_string();
17230                start.push_attribute(("footer", s.as_str()));
17231            }
17232        }
17233        #[cfg(feature = "extra-attrs")]
17234        for (key, value) in &self.extra_attrs {
17235            start.push_attribute((key.as_str(), value.as_str()));
17236        }
17237        start
17238    }
17239
17240    fn is_empty_element(&self) -> bool {
17241        true
17242    }
17243}
17244
17245impl ToXml for PrintOptions {
17246    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17247        #[allow(unused_mut)]
17248        let mut start = start;
17249        if let Some(ref val) = self.horizontal_centered {
17250            start.push_attribute(("horizontalCentered", if *val { "1" } else { "0" }));
17251        }
17252        if let Some(ref val) = self.vertical_centered {
17253            start.push_attribute(("verticalCentered", if *val { "1" } else { "0" }));
17254        }
17255        if let Some(ref val) = self.headings {
17256            start.push_attribute(("headings", if *val { "1" } else { "0" }));
17257        }
17258        if let Some(ref val) = self.grid_lines {
17259            start.push_attribute(("gridLines", if *val { "1" } else { "0" }));
17260        }
17261        if let Some(ref val) = self.grid_lines_set {
17262            start.push_attribute(("gridLinesSet", if *val { "1" } else { "0" }));
17263        }
17264        #[cfg(feature = "extra-attrs")]
17265        for (key, value) in &self.extra_attrs {
17266            start.push_attribute((key.as_str(), value.as_str()));
17267        }
17268        start
17269    }
17270
17271    fn is_empty_element(&self) -> bool {
17272        true
17273    }
17274}
17275
17276impl ToXml for PageSetup {
17277    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17278        #[allow(unused_mut)]
17279        let mut start = start;
17280        #[cfg(feature = "sml-layout")]
17281        if let Some(ref val) = self.paper_size {
17282            {
17283                let s = val.to_string();
17284                start.push_attribute(("paperSize", s.as_str()));
17285            }
17286        }
17287        #[cfg(feature = "sml-layout")]
17288        if let Some(ref val) = self.paper_height {
17289            start.push_attribute(("paperHeight", val.as_str()));
17290        }
17291        #[cfg(feature = "sml-layout")]
17292        if let Some(ref val) = self.paper_width {
17293            start.push_attribute(("paperWidth", val.as_str()));
17294        }
17295        #[cfg(feature = "sml-layout")]
17296        if let Some(ref val) = self.scale {
17297            {
17298                let s = val.to_string();
17299                start.push_attribute(("scale", s.as_str()));
17300            }
17301        }
17302        #[cfg(feature = "sml-layout")]
17303        if let Some(ref val) = self.first_page_number {
17304            {
17305                let s = val.to_string();
17306                start.push_attribute(("firstPageNumber", s.as_str()));
17307            }
17308        }
17309        #[cfg(feature = "sml-layout")]
17310        if let Some(ref val) = self.fit_to_width {
17311            {
17312                let s = val.to_string();
17313                start.push_attribute(("fitToWidth", s.as_str()));
17314            }
17315        }
17316        #[cfg(feature = "sml-layout")]
17317        if let Some(ref val) = self.fit_to_height {
17318            {
17319                let s = val.to_string();
17320                start.push_attribute(("fitToHeight", s.as_str()));
17321            }
17322        }
17323        #[cfg(feature = "sml-layout")]
17324        if let Some(ref val) = self.page_order {
17325            {
17326                let s = val.to_string();
17327                start.push_attribute(("pageOrder", s.as_str()));
17328            }
17329        }
17330        #[cfg(feature = "sml-layout")]
17331        if let Some(ref val) = self.orientation {
17332            {
17333                let s = val.to_string();
17334                start.push_attribute(("orientation", s.as_str()));
17335            }
17336        }
17337        #[cfg(feature = "sml-layout")]
17338        if let Some(ref val) = self.use_printer_defaults {
17339            start.push_attribute(("usePrinterDefaults", if *val { "1" } else { "0" }));
17340        }
17341        #[cfg(feature = "sml-layout")]
17342        if let Some(ref val) = self.black_and_white {
17343            start.push_attribute(("blackAndWhite", if *val { "1" } else { "0" }));
17344        }
17345        #[cfg(feature = "sml-layout")]
17346        if let Some(ref val) = self.draft {
17347            start.push_attribute(("draft", if *val { "1" } else { "0" }));
17348        }
17349        #[cfg(feature = "sml-layout")]
17350        if let Some(ref val) = self.cell_comments {
17351            {
17352                let s = val.to_string();
17353                start.push_attribute(("cellComments", s.as_str()));
17354            }
17355        }
17356        #[cfg(feature = "sml-layout")]
17357        if let Some(ref val) = self.use_first_page_number {
17358            start.push_attribute(("useFirstPageNumber", if *val { "1" } else { "0" }));
17359        }
17360        #[cfg(feature = "sml-layout")]
17361        if let Some(ref val) = self.errors {
17362            {
17363                let s = val.to_string();
17364                start.push_attribute(("errors", s.as_str()));
17365            }
17366        }
17367        #[cfg(feature = "sml-layout")]
17368        if let Some(ref val) = self.horizontal_dpi {
17369            {
17370                let s = val.to_string();
17371                start.push_attribute(("horizontalDpi", s.as_str()));
17372            }
17373        }
17374        #[cfg(feature = "sml-layout")]
17375        if let Some(ref val) = self.vertical_dpi {
17376            {
17377                let s = val.to_string();
17378                start.push_attribute(("verticalDpi", s.as_str()));
17379            }
17380        }
17381        #[cfg(feature = "sml-layout")]
17382        if let Some(ref val) = self.copies {
17383            {
17384                let s = val.to_string();
17385                start.push_attribute(("copies", s.as_str()));
17386            }
17387        }
17388        if let Some(ref val) = self.id {
17389            start.push_attribute(("r:id", val.as_str()));
17390        }
17391        #[cfg(feature = "extra-attrs")]
17392        for (key, value) in &self.extra_attrs {
17393            start.push_attribute((key.as_str(), value.as_str()));
17394        }
17395        start
17396    }
17397
17398    fn is_empty_element(&self) -> bool {
17399        true
17400    }
17401}
17402
17403impl ToXml for HeaderFooter {
17404    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17405        #[allow(unused_mut)]
17406        let mut start = start;
17407        #[cfg(feature = "sml-layout")]
17408        if let Some(ref val) = self.different_odd_even {
17409            start.push_attribute(("differentOddEven", if *val { "1" } else { "0" }));
17410        }
17411        #[cfg(feature = "sml-layout")]
17412        if let Some(ref val) = self.different_first {
17413            start.push_attribute(("differentFirst", if *val { "1" } else { "0" }));
17414        }
17415        #[cfg(feature = "sml-layout")]
17416        if let Some(ref val) = self.scale_with_doc {
17417            start.push_attribute(("scaleWithDoc", if *val { "1" } else { "0" }));
17418        }
17419        #[cfg(feature = "sml-layout")]
17420        if let Some(ref val) = self.align_with_margins {
17421            start.push_attribute(("alignWithMargins", if *val { "1" } else { "0" }));
17422        }
17423        #[cfg(feature = "extra-attrs")]
17424        for (key, value) in &self.extra_attrs {
17425            start.push_attribute((key.as_str(), value.as_str()));
17426        }
17427        start
17428    }
17429
17430    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
17431        #[cfg(feature = "extra-children")]
17432        let mut extra_iter = self.extra_children.iter().peekable();
17433        #[cfg(feature = "extra-children")]
17434        let mut emit_idx: usize = 0;
17435        #[cfg(feature = "extra-children")]
17436        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17437            extra_iter
17438                .next()
17439                .unwrap()
17440                .node
17441                .write_to(writer)
17442                .map_err(SerializeError::from)?;
17443        }
17444        #[cfg(feature = "sml-layout")]
17445        if let Some(ref val) = self.odd_header {
17446            {
17447                let start = BytesStart::new("oddHeader");
17448                writer.write_event(Event::Start(start))?;
17449                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
17450                writer.write_event(Event::End(BytesEnd::new("oddHeader")))?;
17451            }
17452        }
17453        #[cfg(feature = "extra-children")]
17454        {
17455            emit_idx += 1;
17456        }
17457        #[cfg(feature = "extra-children")]
17458        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17459            extra_iter
17460                .next()
17461                .unwrap()
17462                .node
17463                .write_to(writer)
17464                .map_err(SerializeError::from)?;
17465        }
17466        #[cfg(feature = "sml-layout")]
17467        if let Some(ref val) = self.odd_footer {
17468            {
17469                let start = BytesStart::new("oddFooter");
17470                writer.write_event(Event::Start(start))?;
17471                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
17472                writer.write_event(Event::End(BytesEnd::new("oddFooter")))?;
17473            }
17474        }
17475        #[cfg(feature = "extra-children")]
17476        {
17477            emit_idx += 1;
17478        }
17479        #[cfg(feature = "extra-children")]
17480        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17481            extra_iter
17482                .next()
17483                .unwrap()
17484                .node
17485                .write_to(writer)
17486                .map_err(SerializeError::from)?;
17487        }
17488        #[cfg(feature = "sml-layout")]
17489        if let Some(ref val) = self.even_header {
17490            {
17491                let start = BytesStart::new("evenHeader");
17492                writer.write_event(Event::Start(start))?;
17493                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
17494                writer.write_event(Event::End(BytesEnd::new("evenHeader")))?;
17495            }
17496        }
17497        #[cfg(feature = "extra-children")]
17498        {
17499            emit_idx += 1;
17500        }
17501        #[cfg(feature = "extra-children")]
17502        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17503            extra_iter
17504                .next()
17505                .unwrap()
17506                .node
17507                .write_to(writer)
17508                .map_err(SerializeError::from)?;
17509        }
17510        #[cfg(feature = "sml-layout")]
17511        if let Some(ref val) = self.even_footer {
17512            {
17513                let start = BytesStart::new("evenFooter");
17514                writer.write_event(Event::Start(start))?;
17515                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
17516                writer.write_event(Event::End(BytesEnd::new("evenFooter")))?;
17517            }
17518        }
17519        #[cfg(feature = "extra-children")]
17520        {
17521            emit_idx += 1;
17522        }
17523        #[cfg(feature = "extra-children")]
17524        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17525            extra_iter
17526                .next()
17527                .unwrap()
17528                .node
17529                .write_to(writer)
17530                .map_err(SerializeError::from)?;
17531        }
17532        #[cfg(feature = "sml-layout")]
17533        if let Some(ref val) = self.first_header {
17534            {
17535                let start = BytesStart::new("firstHeader");
17536                writer.write_event(Event::Start(start))?;
17537                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
17538                writer.write_event(Event::End(BytesEnd::new("firstHeader")))?;
17539            }
17540        }
17541        #[cfg(feature = "extra-children")]
17542        {
17543            emit_idx += 1;
17544        }
17545        #[cfg(feature = "extra-children")]
17546        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17547            extra_iter
17548                .next()
17549                .unwrap()
17550                .node
17551                .write_to(writer)
17552                .map_err(SerializeError::from)?;
17553        }
17554        #[cfg(feature = "sml-layout")]
17555        if let Some(ref val) = self.first_footer {
17556            {
17557                let start = BytesStart::new("firstFooter");
17558                writer.write_event(Event::Start(start))?;
17559                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
17560                writer.write_event(Event::End(BytesEnd::new("firstFooter")))?;
17561            }
17562        }
17563        #[cfg(feature = "extra-children")]
17564        {
17565            emit_idx += 1;
17566        }
17567        #[cfg(feature = "extra-children")]
17568        for extra in extra_iter {
17569            extra.node.write_to(writer).map_err(SerializeError::from)?;
17570        }
17571        Ok(())
17572    }
17573
17574    fn is_empty_element(&self) -> bool {
17575        #[cfg(feature = "sml-layout")]
17576        if self.odd_header.is_some() {
17577            return false;
17578        }
17579        #[cfg(feature = "sml-layout")]
17580        if self.odd_footer.is_some() {
17581            return false;
17582        }
17583        #[cfg(feature = "sml-layout")]
17584        if self.even_header.is_some() {
17585            return false;
17586        }
17587        #[cfg(feature = "sml-layout")]
17588        if self.even_footer.is_some() {
17589            return false;
17590        }
17591        #[cfg(feature = "sml-layout")]
17592        if self.first_header.is_some() {
17593            return false;
17594        }
17595        #[cfg(feature = "sml-layout")]
17596        if self.first_footer.is_some() {
17597            return false;
17598        }
17599        #[cfg(feature = "extra-children")]
17600        if !self.extra_children.is_empty() {
17601            return false;
17602        }
17603        true
17604    }
17605}
17606
17607impl ToXml for Scenarios {
17608    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17609        #[allow(unused_mut)]
17610        let mut start = start;
17611        if let Some(ref val) = self.current {
17612            {
17613                let s = val.to_string();
17614                start.push_attribute(("current", s.as_str()));
17615            }
17616        }
17617        if let Some(ref val) = self.show {
17618            {
17619                let s = val.to_string();
17620                start.push_attribute(("show", s.as_str()));
17621            }
17622        }
17623        if let Some(ref val) = self.square_reference {
17624            start.push_attribute(("sqref", val.as_str()));
17625        }
17626        #[cfg(feature = "extra-attrs")]
17627        for (key, value) in &self.extra_attrs {
17628            start.push_attribute((key.as_str(), value.as_str()));
17629        }
17630        start
17631    }
17632
17633    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
17634        #[cfg(feature = "extra-children")]
17635        let mut extra_iter = self.extra_children.iter().peekable();
17636        #[cfg(feature = "extra-children")]
17637        let mut emit_idx: usize = 0;
17638        for item in &self.scenario {
17639            #[cfg(feature = "extra-children")]
17640            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17641                extra_iter
17642                    .next()
17643                    .unwrap()
17644                    .node
17645                    .write_to(writer)
17646                    .map_err(SerializeError::from)?;
17647            }
17648            item.write_element("scenario", writer)?;
17649            #[cfg(feature = "extra-children")]
17650            {
17651                emit_idx += 1;
17652            }
17653        }
17654        #[cfg(feature = "extra-children")]
17655        for extra in extra_iter {
17656            extra.node.write_to(writer).map_err(SerializeError::from)?;
17657        }
17658        Ok(())
17659    }
17660
17661    fn is_empty_element(&self) -> bool {
17662        if !self.scenario.is_empty() {
17663            return false;
17664        }
17665        #[cfg(feature = "extra-children")]
17666        if !self.extra_children.is_empty() {
17667            return false;
17668        }
17669        true
17670    }
17671}
17672
17673impl ToXml for SheetProtection {
17674    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17675        #[allow(unused_mut)]
17676        let mut start = start;
17677        if let Some(ref val) = self.password {
17678            {
17679                let hex = encode_hex(val);
17680                start.push_attribute(("password", hex.as_str()));
17681            }
17682        }
17683        if let Some(ref val) = self.algorithm_name {
17684            start.push_attribute(("algorithmName", val.as_str()));
17685        }
17686        if let Some(ref val) = self.hash_value {
17687            {
17688                let b64 = encode_base64(val);
17689                start.push_attribute(("hashValue", b64.as_str()));
17690            }
17691        }
17692        if let Some(ref val) = self.salt_value {
17693            {
17694                let b64 = encode_base64(val);
17695                start.push_attribute(("saltValue", b64.as_str()));
17696            }
17697        }
17698        if let Some(ref val) = self.spin_count {
17699            {
17700                let s = val.to_string();
17701                start.push_attribute(("spinCount", s.as_str()));
17702            }
17703        }
17704        if let Some(ref val) = self.sheet {
17705            start.push_attribute(("sheet", if *val { "1" } else { "0" }));
17706        }
17707        if let Some(ref val) = self.objects {
17708            start.push_attribute(("objects", if *val { "1" } else { "0" }));
17709        }
17710        if let Some(ref val) = self.scenarios {
17711            start.push_attribute(("scenarios", if *val { "1" } else { "0" }));
17712        }
17713        if let Some(ref val) = self.format_cells {
17714            start.push_attribute(("formatCells", if *val { "1" } else { "0" }));
17715        }
17716        if let Some(ref val) = self.format_columns {
17717            start.push_attribute(("formatColumns", if *val { "1" } else { "0" }));
17718        }
17719        if let Some(ref val) = self.format_rows {
17720            start.push_attribute(("formatRows", if *val { "1" } else { "0" }));
17721        }
17722        if let Some(ref val) = self.insert_columns {
17723            start.push_attribute(("insertColumns", if *val { "1" } else { "0" }));
17724        }
17725        if let Some(ref val) = self.insert_rows {
17726            start.push_attribute(("insertRows", if *val { "1" } else { "0" }));
17727        }
17728        if let Some(ref val) = self.insert_hyperlinks {
17729            start.push_attribute(("insertHyperlinks", if *val { "1" } else { "0" }));
17730        }
17731        if let Some(ref val) = self.delete_columns {
17732            start.push_attribute(("deleteColumns", if *val { "1" } else { "0" }));
17733        }
17734        if let Some(ref val) = self.delete_rows {
17735            start.push_attribute(("deleteRows", if *val { "1" } else { "0" }));
17736        }
17737        if let Some(ref val) = self.select_locked_cells {
17738            start.push_attribute(("selectLockedCells", if *val { "1" } else { "0" }));
17739        }
17740        if let Some(ref val) = self.sort {
17741            start.push_attribute(("sort", if *val { "1" } else { "0" }));
17742        }
17743        if let Some(ref val) = self.auto_filter {
17744            start.push_attribute(("autoFilter", if *val { "1" } else { "0" }));
17745        }
17746        if let Some(ref val) = self.pivot_tables {
17747            start.push_attribute(("pivotTables", if *val { "1" } else { "0" }));
17748        }
17749        if let Some(ref val) = self.select_unlocked_cells {
17750            start.push_attribute(("selectUnlockedCells", if *val { "1" } else { "0" }));
17751        }
17752        #[cfg(feature = "extra-attrs")]
17753        for (key, value) in &self.extra_attrs {
17754            start.push_attribute((key.as_str(), value.as_str()));
17755        }
17756        start
17757    }
17758
17759    fn is_empty_element(&self) -> bool {
17760        true
17761    }
17762}
17763
17764impl ToXml for ProtectedRanges {
17765    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
17766        #[cfg(feature = "extra-children")]
17767        let mut extra_iter = self.extra_children.iter().peekable();
17768        #[cfg(feature = "extra-children")]
17769        let mut emit_idx: usize = 0;
17770        for item in &self.protected_range {
17771            #[cfg(feature = "extra-children")]
17772            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17773                extra_iter
17774                    .next()
17775                    .unwrap()
17776                    .node
17777                    .write_to(writer)
17778                    .map_err(SerializeError::from)?;
17779            }
17780            item.write_element("protectedRange", writer)?;
17781            #[cfg(feature = "extra-children")]
17782            {
17783                emit_idx += 1;
17784            }
17785        }
17786        #[cfg(feature = "extra-children")]
17787        for extra in extra_iter {
17788            extra.node.write_to(writer).map_err(SerializeError::from)?;
17789        }
17790        Ok(())
17791    }
17792
17793    fn is_empty_element(&self) -> bool {
17794        if !self.protected_range.is_empty() {
17795            return false;
17796        }
17797        #[cfg(feature = "extra-children")]
17798        if !self.extra_children.is_empty() {
17799            return false;
17800        }
17801        true
17802    }
17803}
17804
17805impl ToXml for ProtectedRange {
17806    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17807        #[allow(unused_mut)]
17808        let mut start = start;
17809        if let Some(ref val) = self.password {
17810            {
17811                let hex = encode_hex(val);
17812                start.push_attribute(("password", hex.as_str()));
17813            }
17814        }
17815        {
17816            let val = &self.square_reference;
17817            start.push_attribute(("sqref", val.as_str()));
17818        }
17819        {
17820            let val = &self.name;
17821            start.push_attribute(("name", val.as_str()));
17822        }
17823        if let Some(ref val) = self.security_descriptor {
17824            start.push_attribute(("securityDescriptor", val.as_str()));
17825        }
17826        if let Some(ref val) = self.algorithm_name {
17827            start.push_attribute(("algorithmName", val.as_str()));
17828        }
17829        if let Some(ref val) = self.hash_value {
17830            {
17831                let b64 = encode_base64(val);
17832                start.push_attribute(("hashValue", b64.as_str()));
17833            }
17834        }
17835        if let Some(ref val) = self.salt_value {
17836            {
17837                let b64 = encode_base64(val);
17838                start.push_attribute(("saltValue", b64.as_str()));
17839            }
17840        }
17841        if let Some(ref val) = self.spin_count {
17842            {
17843                let s = val.to_string();
17844                start.push_attribute(("spinCount", s.as_str()));
17845            }
17846        }
17847        #[cfg(feature = "extra-attrs")]
17848        for (key, value) in &self.extra_attrs {
17849            start.push_attribute((key.as_str(), value.as_str()));
17850        }
17851        start
17852    }
17853
17854    fn is_empty_element(&self) -> bool {
17855        true
17856    }
17857}
17858
17859impl ToXml for Scenario {
17860    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17861        #[allow(unused_mut)]
17862        let mut start = start;
17863        {
17864            let val = &self.name;
17865            start.push_attribute(("name", val.as_str()));
17866        }
17867        if let Some(ref val) = self.locked {
17868            start.push_attribute(("locked", if *val { "1" } else { "0" }));
17869        }
17870        if let Some(ref val) = self.hidden {
17871            start.push_attribute(("hidden", if *val { "1" } else { "0" }));
17872        }
17873        if let Some(ref val) = self.count {
17874            {
17875                let s = val.to_string();
17876                start.push_attribute(("count", s.as_str()));
17877            }
17878        }
17879        if let Some(ref val) = self.user {
17880            start.push_attribute(("user", val.as_str()));
17881        }
17882        if let Some(ref val) = self.comment {
17883            start.push_attribute(("comment", val.as_str()));
17884        }
17885        #[cfg(feature = "extra-attrs")]
17886        for (key, value) in &self.extra_attrs {
17887            start.push_attribute((key.as_str(), value.as_str()));
17888        }
17889        start
17890    }
17891
17892    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
17893        #[cfg(feature = "extra-children")]
17894        let mut extra_iter = self.extra_children.iter().peekable();
17895        #[cfg(feature = "extra-children")]
17896        let mut emit_idx: usize = 0;
17897        for item in &self.input_cells {
17898            #[cfg(feature = "extra-children")]
17899            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17900                extra_iter
17901                    .next()
17902                    .unwrap()
17903                    .node
17904                    .write_to(writer)
17905                    .map_err(SerializeError::from)?;
17906            }
17907            item.write_element("inputCells", writer)?;
17908            #[cfg(feature = "extra-children")]
17909            {
17910                emit_idx += 1;
17911            }
17912        }
17913        #[cfg(feature = "extra-children")]
17914        for extra in extra_iter {
17915            extra.node.write_to(writer).map_err(SerializeError::from)?;
17916        }
17917        Ok(())
17918    }
17919
17920    fn is_empty_element(&self) -> bool {
17921        if !self.input_cells.is_empty() {
17922            return false;
17923        }
17924        #[cfg(feature = "extra-children")]
17925        if !self.extra_children.is_empty() {
17926            return false;
17927        }
17928        true
17929    }
17930}
17931
17932impl ToXml for InputCells {
17933    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
17934        #[allow(unused_mut)]
17935        let mut start = start;
17936        {
17937            let val = &self.reference;
17938            start.push_attribute(("r", val.as_str()));
17939        }
17940        if let Some(ref val) = self.deleted {
17941            start.push_attribute(("deleted", if *val { "1" } else { "0" }));
17942        }
17943        if let Some(ref val) = self.undone {
17944            start.push_attribute(("undone", if *val { "1" } else { "0" }));
17945        }
17946        {
17947            let val = &self.value;
17948            start.push_attribute(("val", val.as_str()));
17949        }
17950        if let Some(ref val) = self.number_format_id {
17951            {
17952                let s = val.to_string();
17953                start.push_attribute(("numFmtId", s.as_str()));
17954            }
17955        }
17956        #[cfg(feature = "extra-attrs")]
17957        for (key, value) in &self.extra_attrs {
17958            start.push_attribute((key.as_str(), value.as_str()));
17959        }
17960        start
17961    }
17962
17963    fn is_empty_element(&self) -> bool {
17964        true
17965    }
17966}
17967
17968impl ToXml for CellWatches {
17969    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
17970        #[cfg(feature = "extra-children")]
17971        let mut extra_iter = self.extra_children.iter().peekable();
17972        #[cfg(feature = "extra-children")]
17973        let mut emit_idx: usize = 0;
17974        for item in &self.cell_watch {
17975            #[cfg(feature = "extra-children")]
17976            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
17977                extra_iter
17978                    .next()
17979                    .unwrap()
17980                    .node
17981                    .write_to(writer)
17982                    .map_err(SerializeError::from)?;
17983            }
17984            item.write_element("cellWatch", writer)?;
17985            #[cfg(feature = "extra-children")]
17986            {
17987                emit_idx += 1;
17988            }
17989        }
17990        #[cfg(feature = "extra-children")]
17991        for extra in extra_iter {
17992            extra.node.write_to(writer).map_err(SerializeError::from)?;
17993        }
17994        Ok(())
17995    }
17996
17997    fn is_empty_element(&self) -> bool {
17998        if !self.cell_watch.is_empty() {
17999            return false;
18000        }
18001        #[cfg(feature = "extra-children")]
18002        if !self.extra_children.is_empty() {
18003            return false;
18004        }
18005        true
18006    }
18007}
18008
18009impl ToXml for CellWatch {
18010    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
18011        #[allow(unused_mut)]
18012        let mut start = start;
18013        {
18014            let val = &self.reference;
18015            start.push_attribute(("r", val.as_str()));
18016        }
18017        #[cfg(feature = "extra-attrs")]
18018        for (key, value) in &self.extra_attrs {
18019            start.push_attribute((key.as_str(), value.as_str()));
18020        }
18021        start
18022    }
18023
18024    fn is_empty_element(&self) -> bool {
18025        true
18026    }
18027}
18028
18029impl ToXml for Chartsheet {
18030    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18031        #[cfg(feature = "extra-children")]
18032        let mut extra_iter = self.extra_children.iter().peekable();
18033        #[cfg(feature = "extra-children")]
18034        let mut emit_idx: usize = 0;
18035        #[cfg(feature = "extra-children")]
18036        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18037            extra_iter
18038                .next()
18039                .unwrap()
18040                .node
18041                .write_to(writer)
18042                .map_err(SerializeError::from)?;
18043        }
18044        if let Some(ref val) = self.sheet_properties {
18045            val.write_element("sheetPr", writer)?;
18046        }
18047        #[cfg(feature = "extra-children")]
18048        {
18049            emit_idx += 1;
18050        }
18051        #[cfg(feature = "extra-children")]
18052        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18053            extra_iter
18054                .next()
18055                .unwrap()
18056                .node
18057                .write_to(writer)
18058                .map_err(SerializeError::from)?;
18059        }
18060        {
18061            let val = &self.sheet_views;
18062            val.write_element("sheetViews", writer)?;
18063        }
18064        #[cfg(feature = "extra-children")]
18065        {
18066            emit_idx += 1;
18067        }
18068        #[cfg(feature = "extra-children")]
18069        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18070            extra_iter
18071                .next()
18072                .unwrap()
18073                .node
18074                .write_to(writer)
18075                .map_err(SerializeError::from)?;
18076        }
18077        if let Some(ref val) = self.sheet_protection {
18078            val.write_element("sheetProtection", writer)?;
18079        }
18080        #[cfg(feature = "extra-children")]
18081        {
18082            emit_idx += 1;
18083        }
18084        #[cfg(feature = "extra-children")]
18085        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18086            extra_iter
18087                .next()
18088                .unwrap()
18089                .node
18090                .write_to(writer)
18091                .map_err(SerializeError::from)?;
18092        }
18093        if let Some(ref val) = self.custom_sheet_views {
18094            val.write_element("customSheetViews", writer)?;
18095        }
18096        #[cfg(feature = "extra-children")]
18097        {
18098            emit_idx += 1;
18099        }
18100        #[cfg(feature = "extra-children")]
18101        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18102            extra_iter
18103                .next()
18104                .unwrap()
18105                .node
18106                .write_to(writer)
18107                .map_err(SerializeError::from)?;
18108        }
18109        if let Some(ref val) = self.page_margins {
18110            val.write_element("pageMargins", writer)?;
18111        }
18112        #[cfg(feature = "extra-children")]
18113        {
18114            emit_idx += 1;
18115        }
18116        #[cfg(feature = "extra-children")]
18117        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18118            extra_iter
18119                .next()
18120                .unwrap()
18121                .node
18122                .write_to(writer)
18123                .map_err(SerializeError::from)?;
18124        }
18125        if let Some(ref val) = self.page_setup {
18126            val.write_element("pageSetup", writer)?;
18127        }
18128        #[cfg(feature = "extra-children")]
18129        {
18130            emit_idx += 1;
18131        }
18132        #[cfg(feature = "extra-children")]
18133        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18134            extra_iter
18135                .next()
18136                .unwrap()
18137                .node
18138                .write_to(writer)
18139                .map_err(SerializeError::from)?;
18140        }
18141        if let Some(ref val) = self.header_footer {
18142            val.write_element("headerFooter", writer)?;
18143        }
18144        #[cfg(feature = "extra-children")]
18145        {
18146            emit_idx += 1;
18147        }
18148        #[cfg(feature = "extra-children")]
18149        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18150            extra_iter
18151                .next()
18152                .unwrap()
18153                .node
18154                .write_to(writer)
18155                .map_err(SerializeError::from)?;
18156        }
18157        {
18158            let val = &self.drawing;
18159            val.write_element("drawing", writer)?;
18160        }
18161        #[cfg(feature = "extra-children")]
18162        {
18163            emit_idx += 1;
18164        }
18165        #[cfg(feature = "extra-children")]
18166        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18167            extra_iter
18168                .next()
18169                .unwrap()
18170                .node
18171                .write_to(writer)
18172                .map_err(SerializeError::from)?;
18173        }
18174        if let Some(ref val) = self.legacy_drawing {
18175            val.write_element("legacyDrawing", writer)?;
18176        }
18177        #[cfg(feature = "extra-children")]
18178        {
18179            emit_idx += 1;
18180        }
18181        #[cfg(feature = "extra-children")]
18182        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18183            extra_iter
18184                .next()
18185                .unwrap()
18186                .node
18187                .write_to(writer)
18188                .map_err(SerializeError::from)?;
18189        }
18190        if let Some(ref val) = self.legacy_drawing_h_f {
18191            val.write_element("legacyDrawingHF", writer)?;
18192        }
18193        #[cfg(feature = "extra-children")]
18194        {
18195            emit_idx += 1;
18196        }
18197        #[cfg(feature = "extra-children")]
18198        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18199            extra_iter
18200                .next()
18201                .unwrap()
18202                .node
18203                .write_to(writer)
18204                .map_err(SerializeError::from)?;
18205        }
18206        if let Some(ref val) = self.drawing_h_f {
18207            val.write_element("drawingHF", writer)?;
18208        }
18209        #[cfg(feature = "extra-children")]
18210        {
18211            emit_idx += 1;
18212        }
18213        #[cfg(feature = "extra-children")]
18214        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18215            extra_iter
18216                .next()
18217                .unwrap()
18218                .node
18219                .write_to(writer)
18220                .map_err(SerializeError::from)?;
18221        }
18222        if let Some(ref val) = self.picture {
18223            val.write_element("picture", writer)?;
18224        }
18225        #[cfg(feature = "extra-children")]
18226        {
18227            emit_idx += 1;
18228        }
18229        #[cfg(feature = "extra-children")]
18230        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18231            extra_iter
18232                .next()
18233                .unwrap()
18234                .node
18235                .write_to(writer)
18236                .map_err(SerializeError::from)?;
18237        }
18238        if let Some(ref val) = self.web_publish_items {
18239            val.write_element("webPublishItems", writer)?;
18240        }
18241        #[cfg(feature = "extra-children")]
18242        {
18243            emit_idx += 1;
18244        }
18245        #[cfg(feature = "extra-children")]
18246        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18247            extra_iter
18248                .next()
18249                .unwrap()
18250                .node
18251                .write_to(writer)
18252                .map_err(SerializeError::from)?;
18253        }
18254        if let Some(ref val) = self.extension_list {
18255            val.write_element("extLst", writer)?;
18256        }
18257        #[cfg(feature = "extra-children")]
18258        {
18259            emit_idx += 1;
18260        }
18261        #[cfg(feature = "extra-children")]
18262        for extra in extra_iter {
18263            extra.node.write_to(writer).map_err(SerializeError::from)?;
18264        }
18265        Ok(())
18266    }
18267
18268    fn is_empty_element(&self) -> bool {
18269        if self.sheet_properties.is_some() {
18270            return false;
18271        }
18272        false
18273    }
18274}
18275
18276impl ToXml for ChartsheetProperties {
18277    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
18278        #[allow(unused_mut)]
18279        let mut start = start;
18280        if let Some(ref val) = self.published {
18281            start.push_attribute(("published", if *val { "1" } else { "0" }));
18282        }
18283        if let Some(ref val) = self.code_name {
18284            start.push_attribute(("codeName", val.as_str()));
18285        }
18286        #[cfg(feature = "extra-attrs")]
18287        for (key, value) in &self.extra_attrs {
18288            start.push_attribute((key.as_str(), value.as_str()));
18289        }
18290        start
18291    }
18292
18293    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18294        #[cfg(feature = "extra-children")]
18295        let mut extra_iter = self.extra_children.iter().peekable();
18296        #[cfg(feature = "extra-children")]
18297        let mut emit_idx: usize = 0;
18298        #[cfg(feature = "extra-children")]
18299        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18300            extra_iter
18301                .next()
18302                .unwrap()
18303                .node
18304                .write_to(writer)
18305                .map_err(SerializeError::from)?;
18306        }
18307        if let Some(ref val) = self.tab_color {
18308            val.write_element("tabColor", writer)?;
18309        }
18310        #[cfg(feature = "extra-children")]
18311        {
18312            emit_idx += 1;
18313        }
18314        #[cfg(feature = "extra-children")]
18315        for extra in extra_iter {
18316            extra.node.write_to(writer).map_err(SerializeError::from)?;
18317        }
18318        Ok(())
18319    }
18320
18321    fn is_empty_element(&self) -> bool {
18322        if self.tab_color.is_some() {
18323            return false;
18324        }
18325        #[cfg(feature = "extra-children")]
18326        if !self.extra_children.is_empty() {
18327            return false;
18328        }
18329        true
18330    }
18331}
18332
18333impl ToXml for ChartsheetViews {
18334    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18335        #[cfg(feature = "extra-children")]
18336        let mut extra_iter = self.extra_children.iter().peekable();
18337        #[cfg(feature = "extra-children")]
18338        let mut emit_idx: usize = 0;
18339        for item in &self.sheet_view {
18340            #[cfg(feature = "extra-children")]
18341            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18342                extra_iter
18343                    .next()
18344                    .unwrap()
18345                    .node
18346                    .write_to(writer)
18347                    .map_err(SerializeError::from)?;
18348            }
18349            item.write_element("sheetView", writer)?;
18350            #[cfg(feature = "extra-children")]
18351            {
18352                emit_idx += 1;
18353            }
18354        }
18355        #[cfg(feature = "extra-children")]
18356        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18357            extra_iter
18358                .next()
18359                .unwrap()
18360                .node
18361                .write_to(writer)
18362                .map_err(SerializeError::from)?;
18363        }
18364        if let Some(ref val) = self.extension_list {
18365            val.write_element("extLst", writer)?;
18366        }
18367        #[cfg(feature = "extra-children")]
18368        {
18369            emit_idx += 1;
18370        }
18371        #[cfg(feature = "extra-children")]
18372        for extra in extra_iter {
18373            extra.node.write_to(writer).map_err(SerializeError::from)?;
18374        }
18375        Ok(())
18376    }
18377
18378    fn is_empty_element(&self) -> bool {
18379        if !self.sheet_view.is_empty() {
18380            return false;
18381        }
18382        if self.extension_list.is_some() {
18383            return false;
18384        }
18385        #[cfg(feature = "extra-children")]
18386        if !self.extra_children.is_empty() {
18387            return false;
18388        }
18389        true
18390    }
18391}
18392
18393impl ToXml for ChartsheetView {
18394    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
18395        #[allow(unused_mut)]
18396        let mut start = start;
18397        if let Some(ref val) = self.tab_selected {
18398            start.push_attribute(("tabSelected", if *val { "1" } else { "0" }));
18399        }
18400        if let Some(ref val) = self.zoom_scale {
18401            {
18402                let s = val.to_string();
18403                start.push_attribute(("zoomScale", s.as_str()));
18404            }
18405        }
18406        {
18407            let val = &self.workbook_view_id;
18408            {
18409                let s = val.to_string();
18410                start.push_attribute(("workbookViewId", s.as_str()));
18411            }
18412        }
18413        if let Some(ref val) = self.zoom_to_fit {
18414            start.push_attribute(("zoomToFit", if *val { "1" } else { "0" }));
18415        }
18416        #[cfg(feature = "extra-attrs")]
18417        for (key, value) in &self.extra_attrs {
18418            start.push_attribute((key.as_str(), value.as_str()));
18419        }
18420        start
18421    }
18422
18423    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18424        #[cfg(feature = "extra-children")]
18425        let mut extra_iter = self.extra_children.iter().peekable();
18426        #[cfg(feature = "extra-children")]
18427        let mut emit_idx: usize = 0;
18428        #[cfg(feature = "extra-children")]
18429        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18430            extra_iter
18431                .next()
18432                .unwrap()
18433                .node
18434                .write_to(writer)
18435                .map_err(SerializeError::from)?;
18436        }
18437        if let Some(ref val) = self.extension_list {
18438            val.write_element("extLst", writer)?;
18439        }
18440        #[cfg(feature = "extra-children")]
18441        {
18442            emit_idx += 1;
18443        }
18444        #[cfg(feature = "extra-children")]
18445        for extra in extra_iter {
18446            extra.node.write_to(writer).map_err(SerializeError::from)?;
18447        }
18448        Ok(())
18449    }
18450
18451    fn is_empty_element(&self) -> bool {
18452        if self.extension_list.is_some() {
18453            return false;
18454        }
18455        #[cfg(feature = "extra-children")]
18456        if !self.extra_children.is_empty() {
18457            return false;
18458        }
18459        true
18460    }
18461}
18462
18463impl ToXml for ChartsheetProtection {
18464    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
18465        #[allow(unused_mut)]
18466        let mut start = start;
18467        if let Some(ref val) = self.password {
18468            {
18469                let hex = encode_hex(val);
18470                start.push_attribute(("password", hex.as_str()));
18471            }
18472        }
18473        if let Some(ref val) = self.algorithm_name {
18474            start.push_attribute(("algorithmName", val.as_str()));
18475        }
18476        if let Some(ref val) = self.hash_value {
18477            {
18478                let b64 = encode_base64(val);
18479                start.push_attribute(("hashValue", b64.as_str()));
18480            }
18481        }
18482        if let Some(ref val) = self.salt_value {
18483            {
18484                let b64 = encode_base64(val);
18485                start.push_attribute(("saltValue", b64.as_str()));
18486            }
18487        }
18488        if let Some(ref val) = self.spin_count {
18489            {
18490                let s = val.to_string();
18491                start.push_attribute(("spinCount", s.as_str()));
18492            }
18493        }
18494        if let Some(ref val) = self.content {
18495            start.push_attribute(("content", if *val { "1" } else { "0" }));
18496        }
18497        if let Some(ref val) = self.objects {
18498            start.push_attribute(("objects", if *val { "1" } else { "0" }));
18499        }
18500        #[cfg(feature = "extra-attrs")]
18501        for (key, value) in &self.extra_attrs {
18502            start.push_attribute((key.as_str(), value.as_str()));
18503        }
18504        start
18505    }
18506
18507    fn is_empty_element(&self) -> bool {
18508        true
18509    }
18510}
18511
18512impl ToXml for ChartsheetPageSetup {
18513    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
18514        #[allow(unused_mut)]
18515        let mut start = start;
18516        if let Some(ref val) = self.paper_size {
18517            {
18518                let s = val.to_string();
18519                start.push_attribute(("paperSize", s.as_str()));
18520            }
18521        }
18522        if let Some(ref val) = self.paper_height {
18523            start.push_attribute(("paperHeight", val.as_str()));
18524        }
18525        if let Some(ref val) = self.paper_width {
18526            start.push_attribute(("paperWidth", val.as_str()));
18527        }
18528        if let Some(ref val) = self.first_page_number {
18529            {
18530                let s = val.to_string();
18531                start.push_attribute(("firstPageNumber", s.as_str()));
18532            }
18533        }
18534        if let Some(ref val) = self.orientation {
18535            {
18536                let s = val.to_string();
18537                start.push_attribute(("orientation", s.as_str()));
18538            }
18539        }
18540        if let Some(ref val) = self.use_printer_defaults {
18541            start.push_attribute(("usePrinterDefaults", if *val { "1" } else { "0" }));
18542        }
18543        if let Some(ref val) = self.black_and_white {
18544            start.push_attribute(("blackAndWhite", if *val { "1" } else { "0" }));
18545        }
18546        if let Some(ref val) = self.draft {
18547            start.push_attribute(("draft", if *val { "1" } else { "0" }));
18548        }
18549        if let Some(ref val) = self.use_first_page_number {
18550            start.push_attribute(("useFirstPageNumber", if *val { "1" } else { "0" }));
18551        }
18552        if let Some(ref val) = self.horizontal_dpi {
18553            {
18554                let s = val.to_string();
18555                start.push_attribute(("horizontalDpi", s.as_str()));
18556            }
18557        }
18558        if let Some(ref val) = self.vertical_dpi {
18559            {
18560                let s = val.to_string();
18561                start.push_attribute(("verticalDpi", s.as_str()));
18562            }
18563        }
18564        if let Some(ref val) = self.copies {
18565            {
18566                let s = val.to_string();
18567                start.push_attribute(("copies", s.as_str()));
18568            }
18569        }
18570        if let Some(ref val) = self.id {
18571            start.push_attribute(("r:id", val.as_str()));
18572        }
18573        #[cfg(feature = "extra-attrs")]
18574        for (key, value) in &self.extra_attrs {
18575            start.push_attribute((key.as_str(), value.as_str()));
18576        }
18577        start
18578    }
18579
18580    fn is_empty_element(&self) -> bool {
18581        true
18582    }
18583}
18584
18585impl ToXml for CustomChartsheetViews {
18586    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18587        #[cfg(feature = "extra-children")]
18588        let mut extra_iter = self.extra_children.iter().peekable();
18589        #[cfg(feature = "extra-children")]
18590        let mut emit_idx: usize = 0;
18591        for item in &self.custom_sheet_view {
18592            #[cfg(feature = "extra-children")]
18593            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18594                extra_iter
18595                    .next()
18596                    .unwrap()
18597                    .node
18598                    .write_to(writer)
18599                    .map_err(SerializeError::from)?;
18600            }
18601            item.write_element("customSheetView", writer)?;
18602            #[cfg(feature = "extra-children")]
18603            {
18604                emit_idx += 1;
18605            }
18606        }
18607        #[cfg(feature = "extra-children")]
18608        for extra in extra_iter {
18609            extra.node.write_to(writer).map_err(SerializeError::from)?;
18610        }
18611        Ok(())
18612    }
18613
18614    fn is_empty_element(&self) -> bool {
18615        if !self.custom_sheet_view.is_empty() {
18616            return false;
18617        }
18618        #[cfg(feature = "extra-children")]
18619        if !self.extra_children.is_empty() {
18620            return false;
18621        }
18622        true
18623    }
18624}
18625
18626impl ToXml for CustomChartsheetView {
18627    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
18628        #[allow(unused_mut)]
18629        let mut start = start;
18630        {
18631            let val = &self.guid;
18632            start.push_attribute(("guid", val.as_str()));
18633        }
18634        if let Some(ref val) = self.scale {
18635            {
18636                let s = val.to_string();
18637                start.push_attribute(("scale", s.as_str()));
18638            }
18639        }
18640        if let Some(ref val) = self.state {
18641            {
18642                let s = val.to_string();
18643                start.push_attribute(("state", s.as_str()));
18644            }
18645        }
18646        if let Some(ref val) = self.zoom_to_fit {
18647            start.push_attribute(("zoomToFit", if *val { "1" } else { "0" }));
18648        }
18649        #[cfg(feature = "extra-attrs")]
18650        for (key, value) in &self.extra_attrs {
18651            start.push_attribute((key.as_str(), value.as_str()));
18652        }
18653        start
18654    }
18655
18656    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18657        #[cfg(feature = "extra-children")]
18658        let mut extra_iter = self.extra_children.iter().peekable();
18659        #[cfg(feature = "extra-children")]
18660        let mut emit_idx: usize = 0;
18661        #[cfg(feature = "extra-children")]
18662        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18663            extra_iter
18664                .next()
18665                .unwrap()
18666                .node
18667                .write_to(writer)
18668                .map_err(SerializeError::from)?;
18669        }
18670        if let Some(ref val) = self.page_margins {
18671            val.write_element("pageMargins", writer)?;
18672        }
18673        #[cfg(feature = "extra-children")]
18674        {
18675            emit_idx += 1;
18676        }
18677        #[cfg(feature = "extra-children")]
18678        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18679            extra_iter
18680                .next()
18681                .unwrap()
18682                .node
18683                .write_to(writer)
18684                .map_err(SerializeError::from)?;
18685        }
18686        if let Some(ref val) = self.page_setup {
18687            val.write_element("pageSetup", writer)?;
18688        }
18689        #[cfg(feature = "extra-children")]
18690        {
18691            emit_idx += 1;
18692        }
18693        #[cfg(feature = "extra-children")]
18694        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18695            extra_iter
18696                .next()
18697                .unwrap()
18698                .node
18699                .write_to(writer)
18700                .map_err(SerializeError::from)?;
18701        }
18702        if let Some(ref val) = self.header_footer {
18703            val.write_element("headerFooter", writer)?;
18704        }
18705        #[cfg(feature = "extra-children")]
18706        {
18707            emit_idx += 1;
18708        }
18709        #[cfg(feature = "extra-children")]
18710        for extra in extra_iter {
18711            extra.node.write_to(writer).map_err(SerializeError::from)?;
18712        }
18713        Ok(())
18714    }
18715
18716    fn is_empty_element(&self) -> bool {
18717        if self.page_margins.is_some() {
18718            return false;
18719        }
18720        if self.page_setup.is_some() {
18721            return false;
18722        }
18723        if self.header_footer.is_some() {
18724            return false;
18725        }
18726        #[cfg(feature = "extra-children")]
18727        if !self.extra_children.is_empty() {
18728            return false;
18729        }
18730        true
18731    }
18732}
18733
18734impl ToXml for CTCustomProperties {
18735    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18736        #[cfg(feature = "extra-children")]
18737        let mut extra_iter = self.extra_children.iter().peekable();
18738        #[cfg(feature = "extra-children")]
18739        let mut emit_idx: usize = 0;
18740        for item in &self.custom_pr {
18741            #[cfg(feature = "extra-children")]
18742            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18743                extra_iter
18744                    .next()
18745                    .unwrap()
18746                    .node
18747                    .write_to(writer)
18748                    .map_err(SerializeError::from)?;
18749            }
18750            item.write_element("customPr", writer)?;
18751            #[cfg(feature = "extra-children")]
18752            {
18753                emit_idx += 1;
18754            }
18755        }
18756        #[cfg(feature = "extra-children")]
18757        for extra in extra_iter {
18758            extra.node.write_to(writer).map_err(SerializeError::from)?;
18759        }
18760        Ok(())
18761    }
18762
18763    fn is_empty_element(&self) -> bool {
18764        if !self.custom_pr.is_empty() {
18765            return false;
18766        }
18767        #[cfg(feature = "extra-children")]
18768        if !self.extra_children.is_empty() {
18769            return false;
18770        }
18771        true
18772    }
18773}
18774
18775impl ToXml for CTCustomProperty {
18776    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
18777        #[allow(unused_mut)]
18778        let mut start = start;
18779        {
18780            let val = &self.name;
18781            start.push_attribute(("name", val.as_str()));
18782        }
18783        {
18784            let val = &self.id;
18785            start.push_attribute(("r:id", val.as_str()));
18786        }
18787        #[cfg(feature = "extra-attrs")]
18788        for (key, value) in &self.extra_attrs {
18789            start.push_attribute((key.as_str(), value.as_str()));
18790        }
18791        start
18792    }
18793
18794    fn is_empty_element(&self) -> bool {
18795        true
18796    }
18797}
18798
18799impl ToXml for OleObjects {
18800    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18801        #[cfg(feature = "extra-children")]
18802        let mut extra_iter = self.extra_children.iter().peekable();
18803        #[cfg(feature = "extra-children")]
18804        let mut emit_idx: usize = 0;
18805        for item in &self.ole_object {
18806            #[cfg(feature = "extra-children")]
18807            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18808                extra_iter
18809                    .next()
18810                    .unwrap()
18811                    .node
18812                    .write_to(writer)
18813                    .map_err(SerializeError::from)?;
18814            }
18815            item.write_element("oleObject", writer)?;
18816            #[cfg(feature = "extra-children")]
18817            {
18818                emit_idx += 1;
18819            }
18820        }
18821        #[cfg(feature = "extra-children")]
18822        for extra in extra_iter {
18823            extra.node.write_to(writer).map_err(SerializeError::from)?;
18824        }
18825        Ok(())
18826    }
18827
18828    fn is_empty_element(&self) -> bool {
18829        if !self.ole_object.is_empty() {
18830            return false;
18831        }
18832        #[cfg(feature = "extra-children")]
18833        if !self.extra_children.is_empty() {
18834            return false;
18835        }
18836        true
18837    }
18838}
18839
18840impl ToXml for OleObject {
18841    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
18842        #[allow(unused_mut)]
18843        let mut start = start;
18844        if let Some(ref val) = self.prog_id {
18845            start.push_attribute(("progId", val.as_str()));
18846        }
18847        if let Some(ref val) = self.dv_aspect {
18848            {
18849                let s = val.to_string();
18850                start.push_attribute(("dvAspect", s.as_str()));
18851            }
18852        }
18853        if let Some(ref val) = self.link {
18854            start.push_attribute(("link", val.as_str()));
18855        }
18856        if let Some(ref val) = self.ole_update {
18857            {
18858                let s = val.to_string();
18859                start.push_attribute(("oleUpdate", s.as_str()));
18860            }
18861        }
18862        if let Some(ref val) = self.auto_load {
18863            start.push_attribute(("autoLoad", if *val { "1" } else { "0" }));
18864        }
18865        {
18866            let val = &self.shape_id;
18867            {
18868                let s = val.to_string();
18869                start.push_attribute(("shapeId", s.as_str()));
18870            }
18871        }
18872        if let Some(ref val) = self.id {
18873            start.push_attribute(("r:id", val.as_str()));
18874        }
18875        #[cfg(feature = "extra-attrs")]
18876        for (key, value) in &self.extra_attrs {
18877            start.push_attribute((key.as_str(), value.as_str()));
18878        }
18879        start
18880    }
18881
18882    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18883        #[cfg(feature = "extra-children")]
18884        let mut extra_iter = self.extra_children.iter().peekable();
18885        #[cfg(feature = "extra-children")]
18886        let mut emit_idx: usize = 0;
18887        #[cfg(feature = "extra-children")]
18888        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18889            extra_iter
18890                .next()
18891                .unwrap()
18892                .node
18893                .write_to(writer)
18894                .map_err(SerializeError::from)?;
18895        }
18896        if let Some(ref val) = self.object_pr {
18897            val.write_element("objectPr", writer)?;
18898        }
18899        #[cfg(feature = "extra-children")]
18900        {
18901            emit_idx += 1;
18902        }
18903        #[cfg(feature = "extra-children")]
18904        for extra in extra_iter {
18905            extra.node.write_to(writer).map_err(SerializeError::from)?;
18906        }
18907        Ok(())
18908    }
18909
18910    fn is_empty_element(&self) -> bool {
18911        if self.object_pr.is_some() {
18912            return false;
18913        }
18914        #[cfg(feature = "extra-children")]
18915        if !self.extra_children.is_empty() {
18916            return false;
18917        }
18918        true
18919    }
18920}
18921
18922impl ToXml for ObjectProperties {
18923    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
18924        #[allow(unused_mut)]
18925        let mut start = start;
18926        if let Some(ref val) = self.locked {
18927            start.push_attribute(("locked", if *val { "1" } else { "0" }));
18928        }
18929        if let Some(ref val) = self.default_size {
18930            start.push_attribute(("defaultSize", if *val { "1" } else { "0" }));
18931        }
18932        if let Some(ref val) = self.print {
18933            start.push_attribute(("print", if *val { "1" } else { "0" }));
18934        }
18935        if let Some(ref val) = self.disabled {
18936            start.push_attribute(("disabled", if *val { "1" } else { "0" }));
18937        }
18938        if let Some(ref val) = self.ui_object {
18939            start.push_attribute(("uiObject", if *val { "1" } else { "0" }));
18940        }
18941        if let Some(ref val) = self.auto_fill {
18942            start.push_attribute(("autoFill", if *val { "1" } else { "0" }));
18943        }
18944        if let Some(ref val) = self.auto_line {
18945            start.push_attribute(("autoLine", if *val { "1" } else { "0" }));
18946        }
18947        if let Some(ref val) = self.auto_pict {
18948            start.push_attribute(("autoPict", if *val { "1" } else { "0" }));
18949        }
18950        if let Some(ref val) = self.r#macro {
18951            start.push_attribute(("macro", val.as_str()));
18952        }
18953        if let Some(ref val) = self.alt_text {
18954            start.push_attribute(("altText", val.as_str()));
18955        }
18956        if let Some(ref val) = self.dde {
18957            start.push_attribute(("dde", if *val { "1" } else { "0" }));
18958        }
18959        if let Some(ref val) = self.id {
18960            start.push_attribute(("r:id", val.as_str()));
18961        }
18962        #[cfg(feature = "extra-attrs")]
18963        for (key, value) in &self.extra_attrs {
18964            start.push_attribute((key.as_str(), value.as_str()));
18965        }
18966        start
18967    }
18968
18969    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
18970        #[cfg(feature = "extra-children")]
18971        let mut extra_iter = self.extra_children.iter().peekable();
18972        #[cfg(feature = "extra-children")]
18973        let mut emit_idx: usize = 0;
18974        #[cfg(feature = "extra-children")]
18975        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
18976            extra_iter
18977                .next()
18978                .unwrap()
18979                .node
18980                .write_to(writer)
18981                .map_err(SerializeError::from)?;
18982        }
18983        {
18984            let val = &self.anchor;
18985            val.write_element("anchor", writer)?;
18986        }
18987        #[cfg(feature = "extra-children")]
18988        {
18989            emit_idx += 1;
18990        }
18991        #[cfg(feature = "extra-children")]
18992        for extra in extra_iter {
18993            extra.node.write_to(writer).map_err(SerializeError::from)?;
18994        }
18995        Ok(())
18996    }
18997
18998    fn is_empty_element(&self) -> bool {
18999        false
19000    }
19001}
19002
19003impl ToXml for WebPublishItems {
19004    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19005        #[allow(unused_mut)]
19006        let mut start = start;
19007        if let Some(ref val) = self.count {
19008            {
19009                let s = val.to_string();
19010                start.push_attribute(("count", s.as_str()));
19011            }
19012        }
19013        #[cfg(feature = "extra-attrs")]
19014        for (key, value) in &self.extra_attrs {
19015            start.push_attribute((key.as_str(), value.as_str()));
19016        }
19017        start
19018    }
19019
19020    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19021        #[cfg(feature = "extra-children")]
19022        let mut extra_iter = self.extra_children.iter().peekable();
19023        #[cfg(feature = "extra-children")]
19024        let mut emit_idx: usize = 0;
19025        for item in &self.web_publish_item {
19026            #[cfg(feature = "extra-children")]
19027            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19028                extra_iter
19029                    .next()
19030                    .unwrap()
19031                    .node
19032                    .write_to(writer)
19033                    .map_err(SerializeError::from)?;
19034            }
19035            item.write_element("webPublishItem", writer)?;
19036            #[cfg(feature = "extra-children")]
19037            {
19038                emit_idx += 1;
19039            }
19040        }
19041        #[cfg(feature = "extra-children")]
19042        for extra in extra_iter {
19043            extra.node.write_to(writer).map_err(SerializeError::from)?;
19044        }
19045        Ok(())
19046    }
19047
19048    fn is_empty_element(&self) -> bool {
19049        if !self.web_publish_item.is_empty() {
19050            return false;
19051        }
19052        #[cfg(feature = "extra-children")]
19053        if !self.extra_children.is_empty() {
19054            return false;
19055        }
19056        true
19057    }
19058}
19059
19060impl ToXml for WebPublishItem {
19061    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19062        #[allow(unused_mut)]
19063        let mut start = start;
19064        {
19065            let val = &self.id;
19066            {
19067                let s = val.to_string();
19068                start.push_attribute(("id", s.as_str()));
19069            }
19070        }
19071        {
19072            let val = &self.div_id;
19073            start.push_attribute(("divId", val.as_str()));
19074        }
19075        {
19076            let val = &self.source_type;
19077            {
19078                let s = val.to_string();
19079                start.push_attribute(("sourceType", s.as_str()));
19080            }
19081        }
19082        if let Some(ref val) = self.source_ref {
19083            start.push_attribute(("sourceRef", val.as_str()));
19084        }
19085        if let Some(ref val) = self.source_object {
19086            start.push_attribute(("sourceObject", val.as_str()));
19087        }
19088        {
19089            let val = &self.destination_file;
19090            start.push_attribute(("destinationFile", val.as_str()));
19091        }
19092        if let Some(ref val) = self.title {
19093            start.push_attribute(("title", val.as_str()));
19094        }
19095        if let Some(ref val) = self.auto_republish {
19096            start.push_attribute(("autoRepublish", if *val { "1" } else { "0" }));
19097        }
19098        #[cfg(feature = "extra-attrs")]
19099        for (key, value) in &self.extra_attrs {
19100            start.push_attribute((key.as_str(), value.as_str()));
19101        }
19102        start
19103    }
19104
19105    fn is_empty_element(&self) -> bool {
19106        true
19107    }
19108}
19109
19110impl ToXml for Controls {
19111    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19112        #[cfg(feature = "extra-children")]
19113        let mut extra_iter = self.extra_children.iter().peekable();
19114        #[cfg(feature = "extra-children")]
19115        let mut emit_idx: usize = 0;
19116        for item in &self.control {
19117            #[cfg(feature = "extra-children")]
19118            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19119                extra_iter
19120                    .next()
19121                    .unwrap()
19122                    .node
19123                    .write_to(writer)
19124                    .map_err(SerializeError::from)?;
19125            }
19126            item.write_element("control", writer)?;
19127            #[cfg(feature = "extra-children")]
19128            {
19129                emit_idx += 1;
19130            }
19131        }
19132        #[cfg(feature = "extra-children")]
19133        for extra in extra_iter {
19134            extra.node.write_to(writer).map_err(SerializeError::from)?;
19135        }
19136        Ok(())
19137    }
19138
19139    fn is_empty_element(&self) -> bool {
19140        if !self.control.is_empty() {
19141            return false;
19142        }
19143        #[cfg(feature = "extra-children")]
19144        if !self.extra_children.is_empty() {
19145            return false;
19146        }
19147        true
19148    }
19149}
19150
19151impl ToXml for Control {
19152    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19153        #[allow(unused_mut)]
19154        let mut start = start;
19155        {
19156            let val = &self.shape_id;
19157            {
19158                let s = val.to_string();
19159                start.push_attribute(("shapeId", s.as_str()));
19160            }
19161        }
19162        {
19163            let val = &self.id;
19164            start.push_attribute(("r:id", val.as_str()));
19165        }
19166        if let Some(ref val) = self.name {
19167            start.push_attribute(("name", val.as_str()));
19168        }
19169        #[cfg(feature = "extra-attrs")]
19170        for (key, value) in &self.extra_attrs {
19171            start.push_attribute((key.as_str(), value.as_str()));
19172        }
19173        start
19174    }
19175
19176    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19177        #[cfg(feature = "extra-children")]
19178        let mut extra_iter = self.extra_children.iter().peekable();
19179        #[cfg(feature = "extra-children")]
19180        let mut emit_idx: usize = 0;
19181        #[cfg(feature = "extra-children")]
19182        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19183            extra_iter
19184                .next()
19185                .unwrap()
19186                .node
19187                .write_to(writer)
19188                .map_err(SerializeError::from)?;
19189        }
19190        if let Some(ref val) = self.control_pr {
19191            val.write_element("controlPr", writer)?;
19192        }
19193        #[cfg(feature = "extra-children")]
19194        {
19195            emit_idx += 1;
19196        }
19197        #[cfg(feature = "extra-children")]
19198        for extra in extra_iter {
19199            extra.node.write_to(writer).map_err(SerializeError::from)?;
19200        }
19201        Ok(())
19202    }
19203
19204    fn is_empty_element(&self) -> bool {
19205        if self.control_pr.is_some() {
19206            return false;
19207        }
19208        #[cfg(feature = "extra-children")]
19209        if !self.extra_children.is_empty() {
19210            return false;
19211        }
19212        true
19213    }
19214}
19215
19216impl ToXml for CTControlPr {
19217    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19218        #[allow(unused_mut)]
19219        let mut start = start;
19220        if let Some(ref val) = self.locked {
19221            start.push_attribute(("locked", if *val { "1" } else { "0" }));
19222        }
19223        if let Some(ref val) = self.default_size {
19224            start.push_attribute(("defaultSize", if *val { "1" } else { "0" }));
19225        }
19226        if let Some(ref val) = self.print {
19227            start.push_attribute(("print", if *val { "1" } else { "0" }));
19228        }
19229        if let Some(ref val) = self.disabled {
19230            start.push_attribute(("disabled", if *val { "1" } else { "0" }));
19231        }
19232        if let Some(ref val) = self.recalc_always {
19233            start.push_attribute(("recalcAlways", if *val { "1" } else { "0" }));
19234        }
19235        if let Some(ref val) = self.ui_object {
19236            start.push_attribute(("uiObject", if *val { "1" } else { "0" }));
19237        }
19238        if let Some(ref val) = self.auto_fill {
19239            start.push_attribute(("autoFill", if *val { "1" } else { "0" }));
19240        }
19241        if let Some(ref val) = self.auto_line {
19242            start.push_attribute(("autoLine", if *val { "1" } else { "0" }));
19243        }
19244        if let Some(ref val) = self.auto_pict {
19245            start.push_attribute(("autoPict", if *val { "1" } else { "0" }));
19246        }
19247        if let Some(ref val) = self.r#macro {
19248            start.push_attribute(("macro", val.as_str()));
19249        }
19250        if let Some(ref val) = self.alt_text {
19251            start.push_attribute(("altText", val.as_str()));
19252        }
19253        if let Some(ref val) = self.linked_cell {
19254            start.push_attribute(("linkedCell", val.as_str()));
19255        }
19256        if let Some(ref val) = self.list_fill_range {
19257            start.push_attribute(("listFillRange", val.as_str()));
19258        }
19259        if let Some(ref val) = self.cf {
19260            start.push_attribute(("cf", val.as_str()));
19261        }
19262        if let Some(ref val) = self.id {
19263            start.push_attribute(("r:id", val.as_str()));
19264        }
19265        #[cfg(feature = "extra-attrs")]
19266        for (key, value) in &self.extra_attrs {
19267            start.push_attribute((key.as_str(), value.as_str()));
19268        }
19269        start
19270    }
19271
19272    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19273        #[cfg(feature = "extra-children")]
19274        let mut extra_iter = self.extra_children.iter().peekable();
19275        #[cfg(feature = "extra-children")]
19276        let mut emit_idx: usize = 0;
19277        #[cfg(feature = "extra-children")]
19278        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19279            extra_iter
19280                .next()
19281                .unwrap()
19282                .node
19283                .write_to(writer)
19284                .map_err(SerializeError::from)?;
19285        }
19286        {
19287            let val = &self.anchor;
19288            val.write_element("anchor", writer)?;
19289        }
19290        #[cfg(feature = "extra-children")]
19291        {
19292            emit_idx += 1;
19293        }
19294        #[cfg(feature = "extra-children")]
19295        for extra in extra_iter {
19296            extra.node.write_to(writer).map_err(SerializeError::from)?;
19297        }
19298        Ok(())
19299    }
19300
19301    fn is_empty_element(&self) -> bool {
19302        false
19303    }
19304}
19305
19306impl ToXml for IgnoredErrors {
19307    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19308        #[cfg(feature = "extra-children")]
19309        let mut extra_iter = self.extra_children.iter().peekable();
19310        #[cfg(feature = "extra-children")]
19311        let mut emit_idx: usize = 0;
19312        for item in &self.ignored_error {
19313            #[cfg(feature = "extra-children")]
19314            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19315                extra_iter
19316                    .next()
19317                    .unwrap()
19318                    .node
19319                    .write_to(writer)
19320                    .map_err(SerializeError::from)?;
19321            }
19322            item.write_element("ignoredError", writer)?;
19323            #[cfg(feature = "extra-children")]
19324            {
19325                emit_idx += 1;
19326            }
19327        }
19328        #[cfg(feature = "extra-children")]
19329        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19330            extra_iter
19331                .next()
19332                .unwrap()
19333                .node
19334                .write_to(writer)
19335                .map_err(SerializeError::from)?;
19336        }
19337        if let Some(ref val) = self.extension_list {
19338            val.write_element("extLst", writer)?;
19339        }
19340        #[cfg(feature = "extra-children")]
19341        {
19342            emit_idx += 1;
19343        }
19344        #[cfg(feature = "extra-children")]
19345        for extra in extra_iter {
19346            extra.node.write_to(writer).map_err(SerializeError::from)?;
19347        }
19348        Ok(())
19349    }
19350
19351    fn is_empty_element(&self) -> bool {
19352        if !self.ignored_error.is_empty() {
19353            return false;
19354        }
19355        if self.extension_list.is_some() {
19356            return false;
19357        }
19358        #[cfg(feature = "extra-children")]
19359        if !self.extra_children.is_empty() {
19360            return false;
19361        }
19362        true
19363    }
19364}
19365
19366impl ToXml for IgnoredError {
19367    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19368        #[allow(unused_mut)]
19369        let mut start = start;
19370        {
19371            let val = &self.square_reference;
19372            start.push_attribute(("sqref", val.as_str()));
19373        }
19374        if let Some(ref val) = self.eval_error {
19375            start.push_attribute(("evalError", if *val { "1" } else { "0" }));
19376        }
19377        if let Some(ref val) = self.two_digit_text_year {
19378            start.push_attribute(("twoDigitTextYear", if *val { "1" } else { "0" }));
19379        }
19380        if let Some(ref val) = self.number_stored_as_text {
19381            start.push_attribute(("numberStoredAsText", if *val { "1" } else { "0" }));
19382        }
19383        if let Some(ref val) = self.formula {
19384            start.push_attribute(("formula", if *val { "1" } else { "0" }));
19385        }
19386        if let Some(ref val) = self.formula_range {
19387            start.push_attribute(("formulaRange", if *val { "1" } else { "0" }));
19388        }
19389        if let Some(ref val) = self.unlocked_formula {
19390            start.push_attribute(("unlockedFormula", if *val { "1" } else { "0" }));
19391        }
19392        if let Some(ref val) = self.empty_cell_reference {
19393            start.push_attribute(("emptyCellReference", if *val { "1" } else { "0" }));
19394        }
19395        if let Some(ref val) = self.list_data_validation {
19396            start.push_attribute(("listDataValidation", if *val { "1" } else { "0" }));
19397        }
19398        if let Some(ref val) = self.calculated_column {
19399            start.push_attribute(("calculatedColumn", if *val { "1" } else { "0" }));
19400        }
19401        #[cfg(feature = "extra-attrs")]
19402        for (key, value) in &self.extra_attrs {
19403            start.push_attribute((key.as_str(), value.as_str()));
19404        }
19405        start
19406    }
19407
19408    fn is_empty_element(&self) -> bool {
19409        true
19410    }
19411}
19412
19413impl ToXml for TableParts {
19414    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19415        #[allow(unused_mut)]
19416        let mut start = start;
19417        if let Some(ref val) = self.count {
19418            {
19419                let s = val.to_string();
19420                start.push_attribute(("count", s.as_str()));
19421            }
19422        }
19423        #[cfg(feature = "extra-attrs")]
19424        for (key, value) in &self.extra_attrs {
19425            start.push_attribute((key.as_str(), value.as_str()));
19426        }
19427        start
19428    }
19429
19430    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19431        #[cfg(feature = "extra-children")]
19432        let mut extra_iter = self.extra_children.iter().peekable();
19433        #[cfg(feature = "extra-children")]
19434        let mut emit_idx: usize = 0;
19435        for item in &self.table_part {
19436            #[cfg(feature = "extra-children")]
19437            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19438                extra_iter
19439                    .next()
19440                    .unwrap()
19441                    .node
19442                    .write_to(writer)
19443                    .map_err(SerializeError::from)?;
19444            }
19445            item.write_element("tablePart", writer)?;
19446            #[cfg(feature = "extra-children")]
19447            {
19448                emit_idx += 1;
19449            }
19450        }
19451        #[cfg(feature = "extra-children")]
19452        for extra in extra_iter {
19453            extra.node.write_to(writer).map_err(SerializeError::from)?;
19454        }
19455        Ok(())
19456    }
19457
19458    fn is_empty_element(&self) -> bool {
19459        if !self.table_part.is_empty() {
19460            return false;
19461        }
19462        #[cfg(feature = "extra-children")]
19463        if !self.extra_children.is_empty() {
19464            return false;
19465        }
19466        true
19467    }
19468}
19469
19470impl ToXml for TablePart {
19471    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19472        #[allow(unused_mut)]
19473        let mut start = start;
19474        {
19475            let val = &self.id;
19476            start.push_attribute(("r:id", val.as_str()));
19477        }
19478        #[cfg(feature = "extra-attrs")]
19479        for (key, value) in &self.extra_attrs {
19480            start.push_attribute((key.as_str(), value.as_str()));
19481        }
19482        start
19483    }
19484
19485    fn is_empty_element(&self) -> bool {
19486        true
19487    }
19488}
19489
19490impl ToXml for Metadata {
19491    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19492        #[cfg(feature = "extra-children")]
19493        let mut extra_iter = self.extra_children.iter().peekable();
19494        #[cfg(feature = "extra-children")]
19495        let mut emit_idx: usize = 0;
19496        #[cfg(feature = "extra-children")]
19497        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19498            extra_iter
19499                .next()
19500                .unwrap()
19501                .node
19502                .write_to(writer)
19503                .map_err(SerializeError::from)?;
19504        }
19505        if let Some(ref val) = self.metadata_types {
19506            val.write_element("metadataTypes", writer)?;
19507        }
19508        #[cfg(feature = "extra-children")]
19509        {
19510            emit_idx += 1;
19511        }
19512        #[cfg(feature = "extra-children")]
19513        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19514            extra_iter
19515                .next()
19516                .unwrap()
19517                .node
19518                .write_to(writer)
19519                .map_err(SerializeError::from)?;
19520        }
19521        if let Some(ref val) = self.metadata_strings {
19522            val.write_element("metadataStrings", writer)?;
19523        }
19524        #[cfg(feature = "extra-children")]
19525        {
19526            emit_idx += 1;
19527        }
19528        #[cfg(feature = "extra-children")]
19529        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19530            extra_iter
19531                .next()
19532                .unwrap()
19533                .node
19534                .write_to(writer)
19535                .map_err(SerializeError::from)?;
19536        }
19537        if let Some(ref val) = self.mdx_metadata {
19538            val.write_element("mdxMetadata", writer)?;
19539        }
19540        #[cfg(feature = "extra-children")]
19541        {
19542            emit_idx += 1;
19543        }
19544        for item in &self.future_metadata {
19545            #[cfg(feature = "extra-children")]
19546            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19547                extra_iter
19548                    .next()
19549                    .unwrap()
19550                    .node
19551                    .write_to(writer)
19552                    .map_err(SerializeError::from)?;
19553            }
19554            item.write_element("futureMetadata", writer)?;
19555            #[cfg(feature = "extra-children")]
19556            {
19557                emit_idx += 1;
19558            }
19559        }
19560        #[cfg(feature = "extra-children")]
19561        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19562            extra_iter
19563                .next()
19564                .unwrap()
19565                .node
19566                .write_to(writer)
19567                .map_err(SerializeError::from)?;
19568        }
19569        if let Some(ref val) = self.cell_metadata {
19570            val.write_element("cellMetadata", writer)?;
19571        }
19572        #[cfg(feature = "extra-children")]
19573        {
19574            emit_idx += 1;
19575        }
19576        #[cfg(feature = "extra-children")]
19577        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19578            extra_iter
19579                .next()
19580                .unwrap()
19581                .node
19582                .write_to(writer)
19583                .map_err(SerializeError::from)?;
19584        }
19585        if let Some(ref val) = self.value_metadata {
19586            val.write_element("valueMetadata", writer)?;
19587        }
19588        #[cfg(feature = "extra-children")]
19589        {
19590            emit_idx += 1;
19591        }
19592        #[cfg(feature = "extra-children")]
19593        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19594            extra_iter
19595                .next()
19596                .unwrap()
19597                .node
19598                .write_to(writer)
19599                .map_err(SerializeError::from)?;
19600        }
19601        if let Some(ref val) = self.extension_list {
19602            val.write_element("extLst", writer)?;
19603        }
19604        #[cfg(feature = "extra-children")]
19605        {
19606            emit_idx += 1;
19607        }
19608        #[cfg(feature = "extra-children")]
19609        for extra in extra_iter {
19610            extra.node.write_to(writer).map_err(SerializeError::from)?;
19611        }
19612        Ok(())
19613    }
19614
19615    fn is_empty_element(&self) -> bool {
19616        if self.metadata_types.is_some() {
19617            return false;
19618        }
19619        if self.metadata_strings.is_some() {
19620            return false;
19621        }
19622        if self.mdx_metadata.is_some() {
19623            return false;
19624        }
19625        if !self.future_metadata.is_empty() {
19626            return false;
19627        }
19628        if self.cell_metadata.is_some() {
19629            return false;
19630        }
19631        if self.value_metadata.is_some() {
19632            return false;
19633        }
19634        if self.extension_list.is_some() {
19635            return false;
19636        }
19637        #[cfg(feature = "extra-children")]
19638        if !self.extra_children.is_empty() {
19639            return false;
19640        }
19641        true
19642    }
19643}
19644
19645impl ToXml for MetadataTypes {
19646    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19647        #[allow(unused_mut)]
19648        let mut start = start;
19649        if let Some(ref val) = self.count {
19650            {
19651                let s = val.to_string();
19652                start.push_attribute(("count", s.as_str()));
19653            }
19654        }
19655        #[cfg(feature = "extra-attrs")]
19656        for (key, value) in &self.extra_attrs {
19657            start.push_attribute((key.as_str(), value.as_str()));
19658        }
19659        start
19660    }
19661
19662    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19663        #[cfg(feature = "extra-children")]
19664        let mut extra_iter = self.extra_children.iter().peekable();
19665        #[cfg(feature = "extra-children")]
19666        let mut emit_idx: usize = 0;
19667        for item in &self.metadata_type {
19668            #[cfg(feature = "extra-children")]
19669            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19670                extra_iter
19671                    .next()
19672                    .unwrap()
19673                    .node
19674                    .write_to(writer)
19675                    .map_err(SerializeError::from)?;
19676            }
19677            item.write_element("metadataType", writer)?;
19678            #[cfg(feature = "extra-children")]
19679            {
19680                emit_idx += 1;
19681            }
19682        }
19683        #[cfg(feature = "extra-children")]
19684        for extra in extra_iter {
19685            extra.node.write_to(writer).map_err(SerializeError::from)?;
19686        }
19687        Ok(())
19688    }
19689
19690    fn is_empty_element(&self) -> bool {
19691        if !self.metadata_type.is_empty() {
19692            return false;
19693        }
19694        #[cfg(feature = "extra-children")]
19695        if !self.extra_children.is_empty() {
19696            return false;
19697        }
19698        true
19699    }
19700}
19701
19702impl ToXml for MetadataType {
19703    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19704        #[allow(unused_mut)]
19705        let mut start = start;
19706        {
19707            let val = &self.name;
19708            start.push_attribute(("name", val.as_str()));
19709        }
19710        {
19711            let val = &self.min_supported_version;
19712            {
19713                let s = val.to_string();
19714                start.push_attribute(("minSupportedVersion", s.as_str()));
19715            }
19716        }
19717        if let Some(ref val) = self.ghost_row {
19718            start.push_attribute(("ghostRow", if *val { "1" } else { "0" }));
19719        }
19720        if let Some(ref val) = self.ghost_col {
19721            start.push_attribute(("ghostCol", if *val { "1" } else { "0" }));
19722        }
19723        if let Some(ref val) = self.edit {
19724            start.push_attribute(("edit", if *val { "1" } else { "0" }));
19725        }
19726        if let Some(ref val) = self.delete {
19727            start.push_attribute(("delete", if *val { "1" } else { "0" }));
19728        }
19729        if let Some(ref val) = self.copy {
19730            start.push_attribute(("copy", if *val { "1" } else { "0" }));
19731        }
19732        if let Some(ref val) = self.paste_all {
19733            start.push_attribute(("pasteAll", if *val { "1" } else { "0" }));
19734        }
19735        if let Some(ref val) = self.paste_formulas {
19736            start.push_attribute(("pasteFormulas", if *val { "1" } else { "0" }));
19737        }
19738        if let Some(ref val) = self.paste_values {
19739            start.push_attribute(("pasteValues", if *val { "1" } else { "0" }));
19740        }
19741        if let Some(ref val) = self.paste_formats {
19742            start.push_attribute(("pasteFormats", if *val { "1" } else { "0" }));
19743        }
19744        if let Some(ref val) = self.paste_comments {
19745            start.push_attribute(("pasteComments", if *val { "1" } else { "0" }));
19746        }
19747        if let Some(ref val) = self.paste_data_validation {
19748            start.push_attribute(("pasteDataValidation", if *val { "1" } else { "0" }));
19749        }
19750        if let Some(ref val) = self.paste_borders {
19751            start.push_attribute(("pasteBorders", if *val { "1" } else { "0" }));
19752        }
19753        if let Some(ref val) = self.paste_col_widths {
19754            start.push_attribute(("pasteColWidths", if *val { "1" } else { "0" }));
19755        }
19756        if let Some(ref val) = self.paste_number_formats {
19757            start.push_attribute(("pasteNumberFormats", if *val { "1" } else { "0" }));
19758        }
19759        if let Some(ref val) = self.merge {
19760            start.push_attribute(("merge", if *val { "1" } else { "0" }));
19761        }
19762        if let Some(ref val) = self.split_first {
19763            start.push_attribute(("splitFirst", if *val { "1" } else { "0" }));
19764        }
19765        if let Some(ref val) = self.split_all {
19766            start.push_attribute(("splitAll", if *val { "1" } else { "0" }));
19767        }
19768        if let Some(ref val) = self.row_col_shift {
19769            start.push_attribute(("rowColShift", if *val { "1" } else { "0" }));
19770        }
19771        if let Some(ref val) = self.clear_all {
19772            start.push_attribute(("clearAll", if *val { "1" } else { "0" }));
19773        }
19774        if let Some(ref val) = self.clear_formats {
19775            start.push_attribute(("clearFormats", if *val { "1" } else { "0" }));
19776        }
19777        if let Some(ref val) = self.clear_contents {
19778            start.push_attribute(("clearContents", if *val { "1" } else { "0" }));
19779        }
19780        if let Some(ref val) = self.clear_comments {
19781            start.push_attribute(("clearComments", if *val { "1" } else { "0" }));
19782        }
19783        if let Some(ref val) = self.assign {
19784            start.push_attribute(("assign", if *val { "1" } else { "0" }));
19785        }
19786        if let Some(ref val) = self.coerce {
19787            start.push_attribute(("coerce", if *val { "1" } else { "0" }));
19788        }
19789        if let Some(ref val) = self.adjust {
19790            start.push_attribute(("adjust", if *val { "1" } else { "0" }));
19791        }
19792        if let Some(ref val) = self.cell_meta {
19793            start.push_attribute(("cellMeta", if *val { "1" } else { "0" }));
19794        }
19795        #[cfg(feature = "extra-attrs")]
19796        for (key, value) in &self.extra_attrs {
19797            start.push_attribute((key.as_str(), value.as_str()));
19798        }
19799        start
19800    }
19801
19802    fn is_empty_element(&self) -> bool {
19803        true
19804    }
19805}
19806
19807impl ToXml for MetadataBlocks {
19808    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19809        #[allow(unused_mut)]
19810        let mut start = start;
19811        if let Some(ref val) = self.count {
19812            {
19813                let s = val.to_string();
19814                start.push_attribute(("count", s.as_str()));
19815            }
19816        }
19817        #[cfg(feature = "extra-attrs")]
19818        for (key, value) in &self.extra_attrs {
19819            start.push_attribute((key.as_str(), value.as_str()));
19820        }
19821        start
19822    }
19823
19824    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19825        #[cfg(feature = "extra-children")]
19826        let mut extra_iter = self.extra_children.iter().peekable();
19827        #[cfg(feature = "extra-children")]
19828        let mut emit_idx: usize = 0;
19829        for item in &self.bk {
19830            #[cfg(feature = "extra-children")]
19831            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19832                extra_iter
19833                    .next()
19834                    .unwrap()
19835                    .node
19836                    .write_to(writer)
19837                    .map_err(SerializeError::from)?;
19838            }
19839            item.write_element("bk", writer)?;
19840            #[cfg(feature = "extra-children")]
19841            {
19842                emit_idx += 1;
19843            }
19844        }
19845        #[cfg(feature = "extra-children")]
19846        for extra in extra_iter {
19847            extra.node.write_to(writer).map_err(SerializeError::from)?;
19848        }
19849        Ok(())
19850    }
19851
19852    fn is_empty_element(&self) -> bool {
19853        if !self.bk.is_empty() {
19854            return false;
19855        }
19856        #[cfg(feature = "extra-children")]
19857        if !self.extra_children.is_empty() {
19858            return false;
19859        }
19860        true
19861    }
19862}
19863
19864impl ToXml for MetadataBlock {
19865    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19866        #[cfg(feature = "extra-children")]
19867        let mut extra_iter = self.extra_children.iter().peekable();
19868        #[cfg(feature = "extra-children")]
19869        let mut emit_idx: usize = 0;
19870        for item in &self.rc {
19871            #[cfg(feature = "extra-children")]
19872            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19873                extra_iter
19874                    .next()
19875                    .unwrap()
19876                    .node
19877                    .write_to(writer)
19878                    .map_err(SerializeError::from)?;
19879            }
19880            item.write_element("rc", writer)?;
19881            #[cfg(feature = "extra-children")]
19882            {
19883                emit_idx += 1;
19884            }
19885        }
19886        #[cfg(feature = "extra-children")]
19887        for extra in extra_iter {
19888            extra.node.write_to(writer).map_err(SerializeError::from)?;
19889        }
19890        Ok(())
19891    }
19892
19893    fn is_empty_element(&self) -> bool {
19894        if !self.rc.is_empty() {
19895            return false;
19896        }
19897        #[cfg(feature = "extra-children")]
19898        if !self.extra_children.is_empty() {
19899            return false;
19900        }
19901        true
19902    }
19903}
19904
19905impl ToXml for MetadataRecord {
19906    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19907        #[allow(unused_mut)]
19908        let mut start = start;
19909        {
19910            let val = &self.cell_type;
19911            {
19912                let s = val.to_string();
19913                start.push_attribute(("t", s.as_str()));
19914            }
19915        }
19916        {
19917            let val = &self.value;
19918            {
19919                let s = val.to_string();
19920                start.push_attribute(("v", s.as_str()));
19921            }
19922        }
19923        #[cfg(feature = "extra-attrs")]
19924        for (key, value) in &self.extra_attrs {
19925            start.push_attribute((key.as_str(), value.as_str()));
19926        }
19927        start
19928    }
19929
19930    fn is_empty_element(&self) -> bool {
19931        true
19932    }
19933}
19934
19935impl ToXml for CTFutureMetadata {
19936    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
19937        #[allow(unused_mut)]
19938        let mut start = start;
19939        {
19940            let val = &self.name;
19941            start.push_attribute(("name", val.as_str()));
19942        }
19943        if let Some(ref val) = self.count {
19944            {
19945                let s = val.to_string();
19946                start.push_attribute(("count", s.as_str()));
19947            }
19948        }
19949        #[cfg(feature = "extra-attrs")]
19950        for (key, value) in &self.extra_attrs {
19951            start.push_attribute((key.as_str(), value.as_str()));
19952        }
19953        start
19954    }
19955
19956    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
19957        #[cfg(feature = "extra-children")]
19958        let mut extra_iter = self.extra_children.iter().peekable();
19959        #[cfg(feature = "extra-children")]
19960        let mut emit_idx: usize = 0;
19961        for item in &self.bk {
19962            #[cfg(feature = "extra-children")]
19963            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19964                extra_iter
19965                    .next()
19966                    .unwrap()
19967                    .node
19968                    .write_to(writer)
19969                    .map_err(SerializeError::from)?;
19970            }
19971            item.write_element("bk", writer)?;
19972            #[cfg(feature = "extra-children")]
19973            {
19974                emit_idx += 1;
19975            }
19976        }
19977        #[cfg(feature = "extra-children")]
19978        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
19979            extra_iter
19980                .next()
19981                .unwrap()
19982                .node
19983                .write_to(writer)
19984                .map_err(SerializeError::from)?;
19985        }
19986        if let Some(ref val) = self.extension_list {
19987            val.write_element("extLst", writer)?;
19988        }
19989        #[cfg(feature = "extra-children")]
19990        {
19991            emit_idx += 1;
19992        }
19993        #[cfg(feature = "extra-children")]
19994        for extra in extra_iter {
19995            extra.node.write_to(writer).map_err(SerializeError::from)?;
19996        }
19997        Ok(())
19998    }
19999
20000    fn is_empty_element(&self) -> bool {
20001        if !self.bk.is_empty() {
20002            return false;
20003        }
20004        if self.extension_list.is_some() {
20005            return false;
20006        }
20007        #[cfg(feature = "extra-children")]
20008        if !self.extra_children.is_empty() {
20009            return false;
20010        }
20011        true
20012    }
20013}
20014
20015impl ToXml for CTFutureMetadataBlock {
20016    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20017        #[cfg(feature = "extra-children")]
20018        let mut extra_iter = self.extra_children.iter().peekable();
20019        #[cfg(feature = "extra-children")]
20020        let mut emit_idx: usize = 0;
20021        #[cfg(feature = "extra-children")]
20022        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20023            extra_iter
20024                .next()
20025                .unwrap()
20026                .node
20027                .write_to(writer)
20028                .map_err(SerializeError::from)?;
20029        }
20030        if let Some(ref val) = self.extension_list {
20031            val.write_element("extLst", writer)?;
20032        }
20033        #[cfg(feature = "extra-children")]
20034        {
20035            emit_idx += 1;
20036        }
20037        #[cfg(feature = "extra-children")]
20038        for extra in extra_iter {
20039            extra.node.write_to(writer).map_err(SerializeError::from)?;
20040        }
20041        Ok(())
20042    }
20043
20044    fn is_empty_element(&self) -> bool {
20045        if self.extension_list.is_some() {
20046            return false;
20047        }
20048        #[cfg(feature = "extra-children")]
20049        if !self.extra_children.is_empty() {
20050            return false;
20051        }
20052        true
20053    }
20054}
20055
20056impl ToXml for CTMdxMetadata {
20057    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20058        #[allow(unused_mut)]
20059        let mut start = start;
20060        if let Some(ref val) = self.count {
20061            {
20062                let s = val.to_string();
20063                start.push_attribute(("count", s.as_str()));
20064            }
20065        }
20066        #[cfg(feature = "extra-attrs")]
20067        for (key, value) in &self.extra_attrs {
20068            start.push_attribute((key.as_str(), value.as_str()));
20069        }
20070        start
20071    }
20072
20073    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20074        #[cfg(feature = "extra-children")]
20075        let mut extra_iter = self.extra_children.iter().peekable();
20076        #[cfg(feature = "extra-children")]
20077        let mut emit_idx: usize = 0;
20078        for item in &self.mdx {
20079            #[cfg(feature = "extra-children")]
20080            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20081                extra_iter
20082                    .next()
20083                    .unwrap()
20084                    .node
20085                    .write_to(writer)
20086                    .map_err(SerializeError::from)?;
20087            }
20088            item.write_element("mdx", writer)?;
20089            #[cfg(feature = "extra-children")]
20090            {
20091                emit_idx += 1;
20092            }
20093        }
20094        #[cfg(feature = "extra-children")]
20095        for extra in extra_iter {
20096            extra.node.write_to(writer).map_err(SerializeError::from)?;
20097        }
20098        Ok(())
20099    }
20100
20101    fn is_empty_element(&self) -> bool {
20102        if !self.mdx.is_empty() {
20103            return false;
20104        }
20105        #[cfg(feature = "extra-children")]
20106        if !self.extra_children.is_empty() {
20107            return false;
20108        }
20109        true
20110    }
20111}
20112
20113impl ToXml for CTMdx {
20114    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20115        #[allow(unused_mut)]
20116        let mut start = start;
20117        {
20118            let val = &self.n;
20119            {
20120                let s = val.to_string();
20121                start.push_attribute(("n", s.as_str()));
20122            }
20123        }
20124        {
20125            let val = &self.formula;
20126            {
20127                let s = val.to_string();
20128                start.push_attribute(("f", s.as_str()));
20129            }
20130        }
20131        #[cfg(feature = "extra-attrs")]
20132        for (key, value) in &self.extra_attrs {
20133            start.push_attribute((key.as_str(), value.as_str()));
20134        }
20135        start
20136    }
20137
20138    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20139        #[cfg(feature = "extra-children")]
20140        let mut extra_iter = self.extra_children.iter().peekable();
20141        #[cfg(feature = "extra-children")]
20142        let mut emit_idx: usize = 0;
20143        #[cfg(feature = "extra-children")]
20144        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20145            extra_iter
20146                .next()
20147                .unwrap()
20148                .node
20149                .write_to(writer)
20150                .map_err(SerializeError::from)?;
20151        }
20152        if let Some(ref val) = self.cell_type {
20153            val.write_element("t", writer)?;
20154        }
20155        #[cfg(feature = "extra-children")]
20156        {
20157            emit_idx += 1;
20158        }
20159        #[cfg(feature = "extra-children")]
20160        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20161            extra_iter
20162                .next()
20163                .unwrap()
20164                .node
20165                .write_to(writer)
20166                .map_err(SerializeError::from)?;
20167        }
20168        if let Some(ref val) = self.ms {
20169            val.write_element("ms", writer)?;
20170        }
20171        #[cfg(feature = "extra-children")]
20172        {
20173            emit_idx += 1;
20174        }
20175        #[cfg(feature = "extra-children")]
20176        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20177            extra_iter
20178                .next()
20179                .unwrap()
20180                .node
20181                .write_to(writer)
20182                .map_err(SerializeError::from)?;
20183        }
20184        if let Some(ref val) = self.p {
20185            val.write_element("p", writer)?;
20186        }
20187        #[cfg(feature = "extra-children")]
20188        {
20189            emit_idx += 1;
20190        }
20191        #[cfg(feature = "extra-children")]
20192        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20193            extra_iter
20194                .next()
20195                .unwrap()
20196                .node
20197                .write_to(writer)
20198                .map_err(SerializeError::from)?;
20199        }
20200        if let Some(ref val) = self.k {
20201            val.write_element("k", writer)?;
20202        }
20203        #[cfg(feature = "extra-children")]
20204        {
20205            emit_idx += 1;
20206        }
20207        #[cfg(feature = "extra-children")]
20208        for extra in extra_iter {
20209            extra.node.write_to(writer).map_err(SerializeError::from)?;
20210        }
20211        Ok(())
20212    }
20213
20214    fn is_empty_element(&self) -> bool {
20215        if self.cell_type.is_some() {
20216            return false;
20217        }
20218        if self.ms.is_some() {
20219            return false;
20220        }
20221        if self.p.is_some() {
20222            return false;
20223        }
20224        if self.k.is_some() {
20225            return false;
20226        }
20227        #[cfg(feature = "extra-children")]
20228        if !self.extra_children.is_empty() {
20229            return false;
20230        }
20231        true
20232    }
20233}
20234
20235impl ToXml for CTMdxTuple {
20236    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20237        #[allow(unused_mut)]
20238        let mut start = start;
20239        if let Some(ref val) = self.cells {
20240            {
20241                let s = val.to_string();
20242                start.push_attribute(("c", s.as_str()));
20243            }
20244        }
20245        if let Some(ref val) = self.ct {
20246            start.push_attribute(("ct", val.as_str()));
20247        }
20248        if let Some(ref val) = self.si {
20249            {
20250                let s = val.to_string();
20251                start.push_attribute(("si", s.as_str()));
20252            }
20253        }
20254        if let Some(ref val) = self.fi {
20255            {
20256                let s = val.to_string();
20257                start.push_attribute(("fi", s.as_str()));
20258            }
20259        }
20260        if let Some(ref val) = self.bc {
20261            {
20262                let hex = encode_hex(val);
20263                start.push_attribute(("bc", hex.as_str()));
20264            }
20265        }
20266        if let Some(ref val) = self.fc {
20267            {
20268                let hex = encode_hex(val);
20269                start.push_attribute(("fc", hex.as_str()));
20270            }
20271        }
20272        if let Some(ref val) = self.i {
20273            start.push_attribute(("i", if *val { "1" } else { "0" }));
20274        }
20275        if let Some(ref val) = self.u {
20276            start.push_attribute(("u", if *val { "1" } else { "0" }));
20277        }
20278        if let Some(ref val) = self.st {
20279            start.push_attribute(("st", if *val { "1" } else { "0" }));
20280        }
20281        if let Some(ref val) = self.b {
20282            start.push_attribute(("b", if *val { "1" } else { "0" }));
20283        }
20284        #[cfg(feature = "extra-attrs")]
20285        for (key, value) in &self.extra_attrs {
20286            start.push_attribute((key.as_str(), value.as_str()));
20287        }
20288        start
20289    }
20290
20291    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20292        #[cfg(feature = "extra-children")]
20293        let mut extra_iter = self.extra_children.iter().peekable();
20294        #[cfg(feature = "extra-children")]
20295        let mut emit_idx: usize = 0;
20296        for item in &self.n {
20297            #[cfg(feature = "extra-children")]
20298            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20299                extra_iter
20300                    .next()
20301                    .unwrap()
20302                    .node
20303                    .write_to(writer)
20304                    .map_err(SerializeError::from)?;
20305            }
20306            item.write_element("n", writer)?;
20307            #[cfg(feature = "extra-children")]
20308            {
20309                emit_idx += 1;
20310            }
20311        }
20312        #[cfg(feature = "extra-children")]
20313        for extra in extra_iter {
20314            extra.node.write_to(writer).map_err(SerializeError::from)?;
20315        }
20316        Ok(())
20317    }
20318
20319    fn is_empty_element(&self) -> bool {
20320        if !self.n.is_empty() {
20321            return false;
20322        }
20323        #[cfg(feature = "extra-children")]
20324        if !self.extra_children.is_empty() {
20325            return false;
20326        }
20327        true
20328    }
20329}
20330
20331impl ToXml for CTMdxSet {
20332    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20333        #[allow(unused_mut)]
20334        let mut start = start;
20335        {
20336            let val = &self.ns;
20337            {
20338                let s = val.to_string();
20339                start.push_attribute(("ns", s.as_str()));
20340            }
20341        }
20342        if let Some(ref val) = self.cells {
20343            {
20344                let s = val.to_string();
20345                start.push_attribute(("c", s.as_str()));
20346            }
20347        }
20348        if let Some(ref val) = self.o {
20349            {
20350                let s = val.to_string();
20351                start.push_attribute(("o", s.as_str()));
20352            }
20353        }
20354        #[cfg(feature = "extra-attrs")]
20355        for (key, value) in &self.extra_attrs {
20356            start.push_attribute((key.as_str(), value.as_str()));
20357        }
20358        start
20359    }
20360
20361    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20362        #[cfg(feature = "extra-children")]
20363        let mut extra_iter = self.extra_children.iter().peekable();
20364        #[cfg(feature = "extra-children")]
20365        let mut emit_idx: usize = 0;
20366        for item in &self.n {
20367            #[cfg(feature = "extra-children")]
20368            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20369                extra_iter
20370                    .next()
20371                    .unwrap()
20372                    .node
20373                    .write_to(writer)
20374                    .map_err(SerializeError::from)?;
20375            }
20376            item.write_element("n", writer)?;
20377            #[cfg(feature = "extra-children")]
20378            {
20379                emit_idx += 1;
20380            }
20381        }
20382        #[cfg(feature = "extra-children")]
20383        for extra in extra_iter {
20384            extra.node.write_to(writer).map_err(SerializeError::from)?;
20385        }
20386        Ok(())
20387    }
20388
20389    fn is_empty_element(&self) -> bool {
20390        if !self.n.is_empty() {
20391            return false;
20392        }
20393        #[cfg(feature = "extra-children")]
20394        if !self.extra_children.is_empty() {
20395            return false;
20396        }
20397        true
20398    }
20399}
20400
20401impl ToXml for CTMdxMemeberProp {
20402    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20403        #[allow(unused_mut)]
20404        let mut start = start;
20405        {
20406            let val = &self.n;
20407            {
20408                let s = val.to_string();
20409                start.push_attribute(("n", s.as_str()));
20410            }
20411        }
20412        {
20413            let val = &self.np;
20414            {
20415                let s = val.to_string();
20416                start.push_attribute(("np", s.as_str()));
20417            }
20418        }
20419        #[cfg(feature = "extra-attrs")]
20420        for (key, value) in &self.extra_attrs {
20421            start.push_attribute((key.as_str(), value.as_str()));
20422        }
20423        start
20424    }
20425
20426    fn is_empty_element(&self) -> bool {
20427        true
20428    }
20429}
20430
20431impl ToXml for CTMdxKPI {
20432    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20433        #[allow(unused_mut)]
20434        let mut start = start;
20435        {
20436            let val = &self.n;
20437            {
20438                let s = val.to_string();
20439                start.push_attribute(("n", s.as_str()));
20440            }
20441        }
20442        {
20443            let val = &self.np;
20444            {
20445                let s = val.to_string();
20446                start.push_attribute(("np", s.as_str()));
20447            }
20448        }
20449        {
20450            let val = &self.p;
20451            {
20452                let s = val.to_string();
20453                start.push_attribute(("p", s.as_str()));
20454            }
20455        }
20456        #[cfg(feature = "extra-attrs")]
20457        for (key, value) in &self.extra_attrs {
20458            start.push_attribute((key.as_str(), value.as_str()));
20459        }
20460        start
20461    }
20462
20463    fn is_empty_element(&self) -> bool {
20464        true
20465    }
20466}
20467
20468impl ToXml for CTMetadataStringIndex {
20469    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20470        #[allow(unused_mut)]
20471        let mut start = start;
20472        {
20473            let val = &self.x;
20474            {
20475                let s = val.to_string();
20476                start.push_attribute(("x", s.as_str()));
20477            }
20478        }
20479        if let Some(ref val) = self.style_index {
20480            start.push_attribute(("s", if *val { "1" } else { "0" }));
20481        }
20482        #[cfg(feature = "extra-attrs")]
20483        for (key, value) in &self.extra_attrs {
20484            start.push_attribute((key.as_str(), value.as_str()));
20485        }
20486        start
20487    }
20488
20489    fn is_empty_element(&self) -> bool {
20490        true
20491    }
20492}
20493
20494impl ToXml for MetadataStrings {
20495    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20496        #[allow(unused_mut)]
20497        let mut start = start;
20498        if let Some(ref val) = self.count {
20499            {
20500                let s = val.to_string();
20501                start.push_attribute(("count", s.as_str()));
20502            }
20503        }
20504        #[cfg(feature = "extra-attrs")]
20505        for (key, value) in &self.extra_attrs {
20506            start.push_attribute((key.as_str(), value.as_str()));
20507        }
20508        start
20509    }
20510
20511    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20512        #[cfg(feature = "extra-children")]
20513        let mut extra_iter = self.extra_children.iter().peekable();
20514        #[cfg(feature = "extra-children")]
20515        let mut emit_idx: usize = 0;
20516        for item in &self.style_index {
20517            #[cfg(feature = "extra-children")]
20518            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20519                extra_iter
20520                    .next()
20521                    .unwrap()
20522                    .node
20523                    .write_to(writer)
20524                    .map_err(SerializeError::from)?;
20525            }
20526            item.write_element("s", writer)?;
20527            #[cfg(feature = "extra-children")]
20528            {
20529                emit_idx += 1;
20530            }
20531        }
20532        #[cfg(feature = "extra-children")]
20533        for extra in extra_iter {
20534            extra.node.write_to(writer).map_err(SerializeError::from)?;
20535        }
20536        Ok(())
20537    }
20538
20539    fn is_empty_element(&self) -> bool {
20540        if !self.style_index.is_empty() {
20541            return false;
20542        }
20543        #[cfg(feature = "extra-children")]
20544        if !self.extra_children.is_empty() {
20545            return false;
20546        }
20547        true
20548    }
20549}
20550
20551impl ToXml for SingleXmlCells {
20552    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20553        #[cfg(feature = "extra-children")]
20554        let mut extra_iter = self.extra_children.iter().peekable();
20555        #[cfg(feature = "extra-children")]
20556        let mut emit_idx: usize = 0;
20557        for item in &self.single_xml_cell {
20558            #[cfg(feature = "extra-children")]
20559            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20560                extra_iter
20561                    .next()
20562                    .unwrap()
20563                    .node
20564                    .write_to(writer)
20565                    .map_err(SerializeError::from)?;
20566            }
20567            item.write_element("singleXmlCell", writer)?;
20568            #[cfg(feature = "extra-children")]
20569            {
20570                emit_idx += 1;
20571            }
20572        }
20573        #[cfg(feature = "extra-children")]
20574        for extra in extra_iter {
20575            extra.node.write_to(writer).map_err(SerializeError::from)?;
20576        }
20577        Ok(())
20578    }
20579
20580    fn is_empty_element(&self) -> bool {
20581        if !self.single_xml_cell.is_empty() {
20582            return false;
20583        }
20584        #[cfg(feature = "extra-children")]
20585        if !self.extra_children.is_empty() {
20586            return false;
20587        }
20588        true
20589    }
20590}
20591
20592impl ToXml for SingleXmlCell {
20593    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20594        #[allow(unused_mut)]
20595        let mut start = start;
20596        {
20597            let val = &self.id;
20598            {
20599                let s = val.to_string();
20600                start.push_attribute(("id", s.as_str()));
20601            }
20602        }
20603        {
20604            let val = &self.reference;
20605            start.push_attribute(("r", val.as_str()));
20606        }
20607        {
20608            let val = &self.connection_id;
20609            {
20610                let s = val.to_string();
20611                start.push_attribute(("connectionId", s.as_str()));
20612            }
20613        }
20614        #[cfg(feature = "extra-attrs")]
20615        for (key, value) in &self.extra_attrs {
20616            start.push_attribute((key.as_str(), value.as_str()));
20617        }
20618        start
20619    }
20620
20621    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20622        #[cfg(feature = "extra-children")]
20623        let mut extra_iter = self.extra_children.iter().peekable();
20624        #[cfg(feature = "extra-children")]
20625        let mut emit_idx: usize = 0;
20626        #[cfg(feature = "extra-children")]
20627        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20628            extra_iter
20629                .next()
20630                .unwrap()
20631                .node
20632                .write_to(writer)
20633                .map_err(SerializeError::from)?;
20634        }
20635        {
20636            let val = &self.xml_cell_pr;
20637            val.write_element("xmlCellPr", writer)?;
20638        }
20639        #[cfg(feature = "extra-children")]
20640        {
20641            emit_idx += 1;
20642        }
20643        #[cfg(feature = "extra-children")]
20644        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20645            extra_iter
20646                .next()
20647                .unwrap()
20648                .node
20649                .write_to(writer)
20650                .map_err(SerializeError::from)?;
20651        }
20652        if let Some(ref val) = self.extension_list {
20653            val.write_element("extLst", writer)?;
20654        }
20655        #[cfg(feature = "extra-children")]
20656        {
20657            emit_idx += 1;
20658        }
20659        #[cfg(feature = "extra-children")]
20660        for extra in extra_iter {
20661            extra.node.write_to(writer).map_err(SerializeError::from)?;
20662        }
20663        Ok(())
20664    }
20665
20666    fn is_empty_element(&self) -> bool {
20667        false
20668    }
20669}
20670
20671impl ToXml for XmlCellProperties {
20672    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20673        #[allow(unused_mut)]
20674        let mut start = start;
20675        {
20676            let val = &self.id;
20677            {
20678                let s = val.to_string();
20679                start.push_attribute(("id", s.as_str()));
20680            }
20681        }
20682        if let Some(ref val) = self.unique_name {
20683            start.push_attribute(("uniqueName", val.as_str()));
20684        }
20685        #[cfg(feature = "extra-attrs")]
20686        for (key, value) in &self.extra_attrs {
20687            start.push_attribute((key.as_str(), value.as_str()));
20688        }
20689        start
20690    }
20691
20692    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20693        #[cfg(feature = "extra-children")]
20694        let mut extra_iter = self.extra_children.iter().peekable();
20695        #[cfg(feature = "extra-children")]
20696        let mut emit_idx: usize = 0;
20697        #[cfg(feature = "extra-children")]
20698        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20699            extra_iter
20700                .next()
20701                .unwrap()
20702                .node
20703                .write_to(writer)
20704                .map_err(SerializeError::from)?;
20705        }
20706        {
20707            let val = &self.xml_pr;
20708            val.write_element("xmlPr", writer)?;
20709        }
20710        #[cfg(feature = "extra-children")]
20711        {
20712            emit_idx += 1;
20713        }
20714        #[cfg(feature = "extra-children")]
20715        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20716            extra_iter
20717                .next()
20718                .unwrap()
20719                .node
20720                .write_to(writer)
20721                .map_err(SerializeError::from)?;
20722        }
20723        if let Some(ref val) = self.extension_list {
20724            val.write_element("extLst", writer)?;
20725        }
20726        #[cfg(feature = "extra-children")]
20727        {
20728            emit_idx += 1;
20729        }
20730        #[cfg(feature = "extra-children")]
20731        for extra in extra_iter {
20732            extra.node.write_to(writer).map_err(SerializeError::from)?;
20733        }
20734        Ok(())
20735    }
20736
20737    fn is_empty_element(&self) -> bool {
20738        false
20739    }
20740}
20741
20742impl ToXml for XmlProperties {
20743    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
20744        #[allow(unused_mut)]
20745        let mut start = start;
20746        {
20747            let val = &self.map_id;
20748            {
20749                let s = val.to_string();
20750                start.push_attribute(("mapId", s.as_str()));
20751            }
20752        }
20753        {
20754            let val = &self.xpath;
20755            start.push_attribute(("xpath", val.as_str()));
20756        }
20757        {
20758            let val = &self.xml_data_type;
20759            start.push_attribute(("xmlDataType", val.as_str()));
20760        }
20761        #[cfg(feature = "extra-attrs")]
20762        for (key, value) in &self.extra_attrs {
20763            start.push_attribute((key.as_str(), value.as_str()));
20764        }
20765        start
20766    }
20767
20768    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20769        #[cfg(feature = "extra-children")]
20770        let mut extra_iter = self.extra_children.iter().peekable();
20771        #[cfg(feature = "extra-children")]
20772        let mut emit_idx: usize = 0;
20773        #[cfg(feature = "extra-children")]
20774        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20775            extra_iter
20776                .next()
20777                .unwrap()
20778                .node
20779                .write_to(writer)
20780                .map_err(SerializeError::from)?;
20781        }
20782        if let Some(ref val) = self.extension_list {
20783            val.write_element("extLst", writer)?;
20784        }
20785        #[cfg(feature = "extra-children")]
20786        {
20787            emit_idx += 1;
20788        }
20789        #[cfg(feature = "extra-children")]
20790        for extra in extra_iter {
20791            extra.node.write_to(writer).map_err(SerializeError::from)?;
20792        }
20793        Ok(())
20794    }
20795
20796    fn is_empty_element(&self) -> bool {
20797        if self.extension_list.is_some() {
20798            return false;
20799        }
20800        #[cfg(feature = "extra-children")]
20801        if !self.extra_children.is_empty() {
20802            return false;
20803        }
20804        true
20805    }
20806}
20807
20808impl ToXml for Stylesheet {
20809    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
20810        #[cfg(feature = "extra-children")]
20811        let mut extra_iter = self.extra_children.iter().peekable();
20812        #[cfg(feature = "extra-children")]
20813        let mut emit_idx: usize = 0;
20814        #[cfg(feature = "extra-children")]
20815        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20816            extra_iter
20817                .next()
20818                .unwrap()
20819                .node
20820                .write_to(writer)
20821                .map_err(SerializeError::from)?;
20822        }
20823        #[cfg(feature = "sml-styling")]
20824        if let Some(ref val) = self.num_fmts {
20825            val.write_element("numFmts", writer)?;
20826        }
20827        #[cfg(feature = "extra-children")]
20828        {
20829            emit_idx += 1;
20830        }
20831        #[cfg(feature = "extra-children")]
20832        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20833            extra_iter
20834                .next()
20835                .unwrap()
20836                .node
20837                .write_to(writer)
20838                .map_err(SerializeError::from)?;
20839        }
20840        #[cfg(feature = "sml-styling")]
20841        if let Some(ref val) = self.fonts {
20842            val.write_element("fonts", writer)?;
20843        }
20844        #[cfg(feature = "extra-children")]
20845        {
20846            emit_idx += 1;
20847        }
20848        #[cfg(feature = "extra-children")]
20849        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20850            extra_iter
20851                .next()
20852                .unwrap()
20853                .node
20854                .write_to(writer)
20855                .map_err(SerializeError::from)?;
20856        }
20857        #[cfg(feature = "sml-styling")]
20858        if let Some(ref val) = self.fills {
20859            val.write_element("fills", writer)?;
20860        }
20861        #[cfg(feature = "extra-children")]
20862        {
20863            emit_idx += 1;
20864        }
20865        #[cfg(feature = "extra-children")]
20866        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20867            extra_iter
20868                .next()
20869                .unwrap()
20870                .node
20871                .write_to(writer)
20872                .map_err(SerializeError::from)?;
20873        }
20874        #[cfg(feature = "sml-styling")]
20875        if let Some(ref val) = self.borders {
20876            val.write_element("borders", writer)?;
20877        }
20878        #[cfg(feature = "extra-children")]
20879        {
20880            emit_idx += 1;
20881        }
20882        #[cfg(feature = "extra-children")]
20883        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20884            extra_iter
20885                .next()
20886                .unwrap()
20887                .node
20888                .write_to(writer)
20889                .map_err(SerializeError::from)?;
20890        }
20891        #[cfg(feature = "sml-styling")]
20892        if let Some(ref val) = self.cell_style_xfs {
20893            val.write_element("cellStyleXfs", writer)?;
20894        }
20895        #[cfg(feature = "extra-children")]
20896        {
20897            emit_idx += 1;
20898        }
20899        #[cfg(feature = "extra-children")]
20900        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20901            extra_iter
20902                .next()
20903                .unwrap()
20904                .node
20905                .write_to(writer)
20906                .map_err(SerializeError::from)?;
20907        }
20908        #[cfg(feature = "sml-styling")]
20909        if let Some(ref val) = self.cell_xfs {
20910            val.write_element("cellXfs", writer)?;
20911        }
20912        #[cfg(feature = "extra-children")]
20913        {
20914            emit_idx += 1;
20915        }
20916        #[cfg(feature = "extra-children")]
20917        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20918            extra_iter
20919                .next()
20920                .unwrap()
20921                .node
20922                .write_to(writer)
20923                .map_err(SerializeError::from)?;
20924        }
20925        #[cfg(feature = "sml-styling")]
20926        if let Some(ref val) = self.cell_styles {
20927            val.write_element("cellStyles", writer)?;
20928        }
20929        #[cfg(feature = "extra-children")]
20930        {
20931            emit_idx += 1;
20932        }
20933        #[cfg(feature = "extra-children")]
20934        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20935            extra_iter
20936                .next()
20937                .unwrap()
20938                .node
20939                .write_to(writer)
20940                .map_err(SerializeError::from)?;
20941        }
20942        #[cfg(feature = "sml-styling")]
20943        if let Some(ref val) = self.dxfs {
20944            val.write_element("dxfs", writer)?;
20945        }
20946        #[cfg(feature = "extra-children")]
20947        {
20948            emit_idx += 1;
20949        }
20950        #[cfg(feature = "extra-children")]
20951        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20952            extra_iter
20953                .next()
20954                .unwrap()
20955                .node
20956                .write_to(writer)
20957                .map_err(SerializeError::from)?;
20958        }
20959        #[cfg(feature = "sml-styling")]
20960        if let Some(ref val) = self.table_styles {
20961            val.write_element("tableStyles", writer)?;
20962        }
20963        #[cfg(feature = "extra-children")]
20964        {
20965            emit_idx += 1;
20966        }
20967        #[cfg(feature = "extra-children")]
20968        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20969            extra_iter
20970                .next()
20971                .unwrap()
20972                .node
20973                .write_to(writer)
20974                .map_err(SerializeError::from)?;
20975        }
20976        #[cfg(feature = "sml-styling")]
20977        if let Some(ref val) = self.colors {
20978            val.write_element("colors", writer)?;
20979        }
20980        #[cfg(feature = "extra-children")]
20981        {
20982            emit_idx += 1;
20983        }
20984        #[cfg(feature = "extra-children")]
20985        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
20986            extra_iter
20987                .next()
20988                .unwrap()
20989                .node
20990                .write_to(writer)
20991                .map_err(SerializeError::from)?;
20992        }
20993        #[cfg(feature = "sml-extensions")]
20994        if let Some(ref val) = self.extension_list {
20995            val.write_element("extLst", writer)?;
20996        }
20997        #[cfg(feature = "extra-children")]
20998        {
20999            emit_idx += 1;
21000        }
21001        #[cfg(feature = "extra-children")]
21002        for extra in extra_iter {
21003            extra.node.write_to(writer).map_err(SerializeError::from)?;
21004        }
21005        Ok(())
21006    }
21007
21008    fn is_empty_element(&self) -> bool {
21009        #[cfg(feature = "sml-styling")]
21010        if self.num_fmts.is_some() {
21011            return false;
21012        }
21013        #[cfg(feature = "sml-styling")]
21014        if self.fonts.is_some() {
21015            return false;
21016        }
21017        #[cfg(feature = "sml-styling")]
21018        if self.fills.is_some() {
21019            return false;
21020        }
21021        #[cfg(feature = "sml-styling")]
21022        if self.borders.is_some() {
21023            return false;
21024        }
21025        #[cfg(feature = "sml-styling")]
21026        if self.cell_style_xfs.is_some() {
21027            return false;
21028        }
21029        #[cfg(feature = "sml-styling")]
21030        if self.cell_xfs.is_some() {
21031            return false;
21032        }
21033        #[cfg(feature = "sml-styling")]
21034        if self.cell_styles.is_some() {
21035            return false;
21036        }
21037        #[cfg(feature = "sml-styling")]
21038        if self.dxfs.is_some() {
21039            return false;
21040        }
21041        #[cfg(feature = "sml-styling")]
21042        if self.table_styles.is_some() {
21043            return false;
21044        }
21045        #[cfg(feature = "sml-styling")]
21046        if self.colors.is_some() {
21047            return false;
21048        }
21049        #[cfg(feature = "sml-extensions")]
21050        if self.extension_list.is_some() {
21051            return false;
21052        }
21053        #[cfg(feature = "extra-children")]
21054        if !self.extra_children.is_empty() {
21055            return false;
21056        }
21057        true
21058    }
21059}
21060
21061impl ToXml for CellAlignment {
21062    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21063        #[allow(unused_mut)]
21064        let mut start = start;
21065        #[cfg(feature = "sml-styling")]
21066        if let Some(ref val) = self.horizontal {
21067            {
21068                let s = val.to_string();
21069                start.push_attribute(("horizontal", s.as_str()));
21070            }
21071        }
21072        #[cfg(feature = "sml-styling")]
21073        if let Some(ref val) = self.vertical {
21074            {
21075                let s = val.to_string();
21076                start.push_attribute(("vertical", s.as_str()));
21077            }
21078        }
21079        #[cfg(feature = "sml-styling")]
21080        if let Some(ref val) = self.text_rotation {
21081            {
21082                let s = val.to_string();
21083                start.push_attribute(("textRotation", s.as_str()));
21084            }
21085        }
21086        #[cfg(feature = "sml-styling")]
21087        if let Some(ref val) = self.wrap_text {
21088            start.push_attribute(("wrapText", if *val { "1" } else { "0" }));
21089        }
21090        #[cfg(feature = "sml-styling")]
21091        if let Some(ref val) = self.indent {
21092            {
21093                let s = val.to_string();
21094                start.push_attribute(("indent", s.as_str()));
21095            }
21096        }
21097        #[cfg(feature = "sml-styling")]
21098        if let Some(ref val) = self.relative_indent {
21099            {
21100                let s = val.to_string();
21101                start.push_attribute(("relativeIndent", s.as_str()));
21102            }
21103        }
21104        #[cfg(feature = "sml-styling")]
21105        if let Some(ref val) = self.justify_last_line {
21106            start.push_attribute(("justifyLastLine", if *val { "1" } else { "0" }));
21107        }
21108        #[cfg(feature = "sml-styling")]
21109        if let Some(ref val) = self.shrink_to_fit {
21110            start.push_attribute(("shrinkToFit", if *val { "1" } else { "0" }));
21111        }
21112        #[cfg(feature = "sml-styling")]
21113        if let Some(ref val) = self.reading_order {
21114            {
21115                let s = val.to_string();
21116                start.push_attribute(("readingOrder", s.as_str()));
21117            }
21118        }
21119        #[cfg(feature = "extra-attrs")]
21120        for (key, value) in &self.extra_attrs {
21121            start.push_attribute((key.as_str(), value.as_str()));
21122        }
21123        start
21124    }
21125
21126    fn is_empty_element(&self) -> bool {
21127        true
21128    }
21129}
21130
21131impl ToXml for Borders {
21132    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21133        #[allow(unused_mut)]
21134        let mut start = start;
21135        if let Some(ref val) = self.count {
21136            {
21137                let s = val.to_string();
21138                start.push_attribute(("count", s.as_str()));
21139            }
21140        }
21141        #[cfg(feature = "extra-attrs")]
21142        for (key, value) in &self.extra_attrs {
21143            start.push_attribute((key.as_str(), value.as_str()));
21144        }
21145        start
21146    }
21147
21148    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21149        #[cfg(feature = "extra-children")]
21150        let mut extra_iter = self.extra_children.iter().peekable();
21151        #[cfg(feature = "extra-children")]
21152        let mut emit_idx: usize = 0;
21153        for item in &self.border {
21154            #[cfg(feature = "extra-children")]
21155            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21156                extra_iter
21157                    .next()
21158                    .unwrap()
21159                    .node
21160                    .write_to(writer)
21161                    .map_err(SerializeError::from)?;
21162            }
21163            item.write_element("border", writer)?;
21164            #[cfg(feature = "extra-children")]
21165            {
21166                emit_idx += 1;
21167            }
21168        }
21169        #[cfg(feature = "extra-children")]
21170        for extra in extra_iter {
21171            extra.node.write_to(writer).map_err(SerializeError::from)?;
21172        }
21173        Ok(())
21174    }
21175
21176    fn is_empty_element(&self) -> bool {
21177        if !self.border.is_empty() {
21178            return false;
21179        }
21180        #[cfg(feature = "extra-children")]
21181        if !self.extra_children.is_empty() {
21182            return false;
21183        }
21184        true
21185    }
21186}
21187
21188impl ToXml for Border {
21189    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21190        #[allow(unused_mut)]
21191        let mut start = start;
21192        #[cfg(feature = "sml-styling")]
21193        if let Some(ref val) = self.diagonal_up {
21194            start.push_attribute(("diagonalUp", if *val { "1" } else { "0" }));
21195        }
21196        #[cfg(feature = "sml-styling")]
21197        if let Some(ref val) = self.diagonal_down {
21198            start.push_attribute(("diagonalDown", if *val { "1" } else { "0" }));
21199        }
21200        #[cfg(feature = "sml-styling")]
21201        if let Some(ref val) = self.outline {
21202            start.push_attribute(("outline", if *val { "1" } else { "0" }));
21203        }
21204        #[cfg(feature = "extra-attrs")]
21205        for (key, value) in &self.extra_attrs {
21206            start.push_attribute((key.as_str(), value.as_str()));
21207        }
21208        start
21209    }
21210
21211    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21212        #[cfg(feature = "extra-children")]
21213        let mut extra_iter = self.extra_children.iter().peekable();
21214        #[cfg(feature = "extra-children")]
21215        let mut emit_idx: usize = 0;
21216        #[cfg(feature = "extra-children")]
21217        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21218            extra_iter
21219                .next()
21220                .unwrap()
21221                .node
21222                .write_to(writer)
21223                .map_err(SerializeError::from)?;
21224        }
21225        if let Some(ref val) = self.start {
21226            val.write_element("start", writer)?;
21227        }
21228        #[cfg(feature = "extra-children")]
21229        {
21230            emit_idx += 1;
21231        }
21232        #[cfg(feature = "extra-children")]
21233        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21234            extra_iter
21235                .next()
21236                .unwrap()
21237                .node
21238                .write_to(writer)
21239                .map_err(SerializeError::from)?;
21240        }
21241        if let Some(ref val) = self.end {
21242            val.write_element("end", writer)?;
21243        }
21244        #[cfg(feature = "extra-children")]
21245        {
21246            emit_idx += 1;
21247        }
21248        #[cfg(feature = "extra-children")]
21249        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21250            extra_iter
21251                .next()
21252                .unwrap()
21253                .node
21254                .write_to(writer)
21255                .map_err(SerializeError::from)?;
21256        }
21257        #[cfg(feature = "sml-styling")]
21258        if let Some(ref val) = self.left {
21259            val.write_element("left", writer)?;
21260        }
21261        #[cfg(feature = "extra-children")]
21262        {
21263            emit_idx += 1;
21264        }
21265        #[cfg(feature = "extra-children")]
21266        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21267            extra_iter
21268                .next()
21269                .unwrap()
21270                .node
21271                .write_to(writer)
21272                .map_err(SerializeError::from)?;
21273        }
21274        #[cfg(feature = "sml-styling")]
21275        if let Some(ref val) = self.right {
21276            val.write_element("right", writer)?;
21277        }
21278        #[cfg(feature = "extra-children")]
21279        {
21280            emit_idx += 1;
21281        }
21282        #[cfg(feature = "extra-children")]
21283        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21284            extra_iter
21285                .next()
21286                .unwrap()
21287                .node
21288                .write_to(writer)
21289                .map_err(SerializeError::from)?;
21290        }
21291        #[cfg(feature = "sml-styling")]
21292        if let Some(ref val) = self.top {
21293            val.write_element("top", writer)?;
21294        }
21295        #[cfg(feature = "extra-children")]
21296        {
21297            emit_idx += 1;
21298        }
21299        #[cfg(feature = "extra-children")]
21300        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21301            extra_iter
21302                .next()
21303                .unwrap()
21304                .node
21305                .write_to(writer)
21306                .map_err(SerializeError::from)?;
21307        }
21308        #[cfg(feature = "sml-styling")]
21309        if let Some(ref val) = self.bottom {
21310            val.write_element("bottom", writer)?;
21311        }
21312        #[cfg(feature = "extra-children")]
21313        {
21314            emit_idx += 1;
21315        }
21316        #[cfg(feature = "extra-children")]
21317        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21318            extra_iter
21319                .next()
21320                .unwrap()
21321                .node
21322                .write_to(writer)
21323                .map_err(SerializeError::from)?;
21324        }
21325        #[cfg(feature = "sml-styling")]
21326        if let Some(ref val) = self.diagonal {
21327            val.write_element("diagonal", writer)?;
21328        }
21329        #[cfg(feature = "extra-children")]
21330        {
21331            emit_idx += 1;
21332        }
21333        #[cfg(feature = "extra-children")]
21334        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21335            extra_iter
21336                .next()
21337                .unwrap()
21338                .node
21339                .write_to(writer)
21340                .map_err(SerializeError::from)?;
21341        }
21342        #[cfg(feature = "sml-styling")]
21343        if let Some(ref val) = self.vertical {
21344            val.write_element("vertical", writer)?;
21345        }
21346        #[cfg(feature = "extra-children")]
21347        {
21348            emit_idx += 1;
21349        }
21350        #[cfg(feature = "extra-children")]
21351        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21352            extra_iter
21353                .next()
21354                .unwrap()
21355                .node
21356                .write_to(writer)
21357                .map_err(SerializeError::from)?;
21358        }
21359        #[cfg(feature = "sml-styling")]
21360        if let Some(ref val) = self.horizontal {
21361            val.write_element("horizontal", writer)?;
21362        }
21363        #[cfg(feature = "extra-children")]
21364        {
21365            emit_idx += 1;
21366        }
21367        #[cfg(feature = "extra-children")]
21368        for extra in extra_iter {
21369            extra.node.write_to(writer).map_err(SerializeError::from)?;
21370        }
21371        Ok(())
21372    }
21373
21374    fn is_empty_element(&self) -> bool {
21375        if self.start.is_some() {
21376            return false;
21377        }
21378        if self.end.is_some() {
21379            return false;
21380        }
21381        #[cfg(feature = "sml-styling")]
21382        if self.left.is_some() {
21383            return false;
21384        }
21385        #[cfg(feature = "sml-styling")]
21386        if self.right.is_some() {
21387            return false;
21388        }
21389        #[cfg(feature = "sml-styling")]
21390        if self.top.is_some() {
21391            return false;
21392        }
21393        #[cfg(feature = "sml-styling")]
21394        if self.bottom.is_some() {
21395            return false;
21396        }
21397        #[cfg(feature = "sml-styling")]
21398        if self.diagonal.is_some() {
21399            return false;
21400        }
21401        #[cfg(feature = "sml-styling")]
21402        if self.vertical.is_some() {
21403            return false;
21404        }
21405        #[cfg(feature = "sml-styling")]
21406        if self.horizontal.is_some() {
21407            return false;
21408        }
21409        #[cfg(feature = "extra-children")]
21410        if !self.extra_children.is_empty() {
21411            return false;
21412        }
21413        true
21414    }
21415}
21416
21417impl ToXml for BorderProperties {
21418    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21419        #[allow(unused_mut)]
21420        let mut start = start;
21421        if let Some(ref val) = self.style {
21422            {
21423                let s = val.to_string();
21424                start.push_attribute(("style", s.as_str()));
21425            }
21426        }
21427        #[cfg(feature = "extra-attrs")]
21428        for (key, value) in &self.extra_attrs {
21429            start.push_attribute((key.as_str(), value.as_str()));
21430        }
21431        start
21432    }
21433
21434    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21435        #[cfg(feature = "extra-children")]
21436        let mut extra_iter = self.extra_children.iter().peekable();
21437        #[cfg(feature = "extra-children")]
21438        let mut emit_idx: usize = 0;
21439        #[cfg(feature = "extra-children")]
21440        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21441            extra_iter
21442                .next()
21443                .unwrap()
21444                .node
21445                .write_to(writer)
21446                .map_err(SerializeError::from)?;
21447        }
21448        if let Some(ref val) = self.color {
21449            val.write_element("color", writer)?;
21450        }
21451        #[cfg(feature = "extra-children")]
21452        {
21453            emit_idx += 1;
21454        }
21455        #[cfg(feature = "extra-children")]
21456        for extra in extra_iter {
21457            extra.node.write_to(writer).map_err(SerializeError::from)?;
21458        }
21459        Ok(())
21460    }
21461
21462    fn is_empty_element(&self) -> bool {
21463        if self.color.is_some() {
21464            return false;
21465        }
21466        #[cfg(feature = "extra-children")]
21467        if !self.extra_children.is_empty() {
21468            return false;
21469        }
21470        true
21471    }
21472}
21473
21474impl ToXml for CellProtection {
21475    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21476        #[allow(unused_mut)]
21477        let mut start = start;
21478        #[cfg(feature = "sml-protection")]
21479        if let Some(ref val) = self.locked {
21480            start.push_attribute(("locked", if *val { "1" } else { "0" }));
21481        }
21482        #[cfg(feature = "sml-protection")]
21483        if let Some(ref val) = self.hidden {
21484            start.push_attribute(("hidden", if *val { "1" } else { "0" }));
21485        }
21486        #[cfg(feature = "extra-attrs")]
21487        for (key, value) in &self.extra_attrs {
21488            start.push_attribute((key.as_str(), value.as_str()));
21489        }
21490        start
21491    }
21492
21493    fn is_empty_element(&self) -> bool {
21494        true
21495    }
21496}
21497
21498impl ToXml for Fonts {
21499    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21500        #[allow(unused_mut)]
21501        let mut start = start;
21502        if let Some(ref val) = self.count {
21503            {
21504                let s = val.to_string();
21505                start.push_attribute(("count", s.as_str()));
21506            }
21507        }
21508        #[cfg(feature = "extra-attrs")]
21509        for (key, value) in &self.extra_attrs {
21510            start.push_attribute((key.as_str(), value.as_str()));
21511        }
21512        start
21513    }
21514
21515    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21516        #[cfg(feature = "extra-children")]
21517        let mut extra_iter = self.extra_children.iter().peekable();
21518        #[cfg(feature = "extra-children")]
21519        let mut emit_idx: usize = 0;
21520        for item in &self.font {
21521            #[cfg(feature = "extra-children")]
21522            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21523                extra_iter
21524                    .next()
21525                    .unwrap()
21526                    .node
21527                    .write_to(writer)
21528                    .map_err(SerializeError::from)?;
21529            }
21530            item.write_element("font", writer)?;
21531            #[cfg(feature = "extra-children")]
21532            {
21533                emit_idx += 1;
21534            }
21535        }
21536        #[cfg(feature = "extra-children")]
21537        for extra in extra_iter {
21538            extra.node.write_to(writer).map_err(SerializeError::from)?;
21539        }
21540        Ok(())
21541    }
21542
21543    fn is_empty_element(&self) -> bool {
21544        if !self.font.is_empty() {
21545            return false;
21546        }
21547        #[cfg(feature = "extra-children")]
21548        if !self.extra_children.is_empty() {
21549            return false;
21550        }
21551        true
21552    }
21553}
21554
21555impl ToXml for Fills {
21556    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21557        #[allow(unused_mut)]
21558        let mut start = start;
21559        if let Some(ref val) = self.count {
21560            {
21561                let s = val.to_string();
21562                start.push_attribute(("count", s.as_str()));
21563            }
21564        }
21565        #[cfg(feature = "extra-attrs")]
21566        for (key, value) in &self.extra_attrs {
21567            start.push_attribute((key.as_str(), value.as_str()));
21568        }
21569        start
21570    }
21571
21572    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21573        #[cfg(feature = "extra-children")]
21574        let mut extra_iter = self.extra_children.iter().peekable();
21575        #[cfg(feature = "extra-children")]
21576        let mut emit_idx: usize = 0;
21577        for item in &self.fill {
21578            #[cfg(feature = "extra-children")]
21579            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21580                extra_iter
21581                    .next()
21582                    .unwrap()
21583                    .node
21584                    .write_to(writer)
21585                    .map_err(SerializeError::from)?;
21586            }
21587            item.write_element("fill", writer)?;
21588            #[cfg(feature = "extra-children")]
21589            {
21590                emit_idx += 1;
21591            }
21592        }
21593        #[cfg(feature = "extra-children")]
21594        for extra in extra_iter {
21595            extra.node.write_to(writer).map_err(SerializeError::from)?;
21596        }
21597        Ok(())
21598    }
21599
21600    fn is_empty_element(&self) -> bool {
21601        if !self.fill.is_empty() {
21602            return false;
21603        }
21604        #[cfg(feature = "extra-children")]
21605        if !self.extra_children.is_empty() {
21606            return false;
21607        }
21608        true
21609    }
21610}
21611
21612impl ToXml for Fill {
21613    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21614        #[cfg(feature = "extra-children")]
21615        let mut extra_iter = self.extra_children.iter().peekable();
21616        #[cfg(feature = "extra-children")]
21617        let mut emit_idx: usize = 0;
21618        #[cfg(feature = "extra-children")]
21619        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21620            extra_iter
21621                .next()
21622                .unwrap()
21623                .node
21624                .write_to(writer)
21625                .map_err(SerializeError::from)?;
21626        }
21627        #[cfg(feature = "sml-styling")]
21628        if let Some(ref val) = self.pattern_fill {
21629            val.write_element("patternFill", writer)?;
21630        }
21631        #[cfg(feature = "extra-children")]
21632        {
21633            emit_idx += 1;
21634        }
21635        #[cfg(feature = "extra-children")]
21636        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21637            extra_iter
21638                .next()
21639                .unwrap()
21640                .node
21641                .write_to(writer)
21642                .map_err(SerializeError::from)?;
21643        }
21644        #[cfg(feature = "sml-styling")]
21645        if let Some(ref val) = self.gradient_fill {
21646            val.write_element("gradientFill", writer)?;
21647        }
21648        #[cfg(feature = "extra-children")]
21649        {
21650            emit_idx += 1;
21651        }
21652        #[cfg(feature = "extra-children")]
21653        for extra in extra_iter {
21654            extra.node.write_to(writer).map_err(SerializeError::from)?;
21655        }
21656        Ok(())
21657    }
21658
21659    fn is_empty_element(&self) -> bool {
21660        #[cfg(feature = "sml-styling")]
21661        if self.pattern_fill.is_some() {
21662            return false;
21663        }
21664        #[cfg(feature = "sml-styling")]
21665        if self.gradient_fill.is_some() {
21666            return false;
21667        }
21668        #[cfg(feature = "extra-children")]
21669        if !self.extra_children.is_empty() {
21670            return false;
21671        }
21672        true
21673    }
21674}
21675
21676impl ToXml for PatternFill {
21677    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21678        #[allow(unused_mut)]
21679        let mut start = start;
21680        if let Some(ref val) = self.pattern_type {
21681            {
21682                let s = val.to_string();
21683                start.push_attribute(("patternType", s.as_str()));
21684            }
21685        }
21686        #[cfg(feature = "extra-attrs")]
21687        for (key, value) in &self.extra_attrs {
21688            start.push_attribute((key.as_str(), value.as_str()));
21689        }
21690        start
21691    }
21692
21693    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21694        #[cfg(feature = "extra-children")]
21695        let mut extra_iter = self.extra_children.iter().peekable();
21696        #[cfg(feature = "extra-children")]
21697        let mut emit_idx: usize = 0;
21698        #[cfg(feature = "extra-children")]
21699        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21700            extra_iter
21701                .next()
21702                .unwrap()
21703                .node
21704                .write_to(writer)
21705                .map_err(SerializeError::from)?;
21706        }
21707        if let Some(ref val) = self.fg_color {
21708            val.write_element("fgColor", writer)?;
21709        }
21710        #[cfg(feature = "extra-children")]
21711        {
21712            emit_idx += 1;
21713        }
21714        #[cfg(feature = "extra-children")]
21715        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21716            extra_iter
21717                .next()
21718                .unwrap()
21719                .node
21720                .write_to(writer)
21721                .map_err(SerializeError::from)?;
21722        }
21723        if let Some(ref val) = self.bg_color {
21724            val.write_element("bgColor", writer)?;
21725        }
21726        #[cfg(feature = "extra-children")]
21727        {
21728            emit_idx += 1;
21729        }
21730        #[cfg(feature = "extra-children")]
21731        for extra in extra_iter {
21732            extra.node.write_to(writer).map_err(SerializeError::from)?;
21733        }
21734        Ok(())
21735    }
21736
21737    fn is_empty_element(&self) -> bool {
21738        if self.fg_color.is_some() {
21739            return false;
21740        }
21741        if self.bg_color.is_some() {
21742            return false;
21743        }
21744        #[cfg(feature = "extra-children")]
21745        if !self.extra_children.is_empty() {
21746            return false;
21747        }
21748        true
21749    }
21750}
21751
21752impl ToXml for Color {
21753    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21754        #[allow(unused_mut)]
21755        let mut start = start;
21756        #[cfg(feature = "sml-styling")]
21757        if let Some(ref val) = self.auto {
21758            start.push_attribute(("auto", if *val { "1" } else { "0" }));
21759        }
21760        #[cfg(feature = "sml-styling")]
21761        if let Some(ref val) = self.indexed {
21762            {
21763                let s = val.to_string();
21764                start.push_attribute(("indexed", s.as_str()));
21765            }
21766        }
21767        #[cfg(feature = "sml-styling")]
21768        if let Some(ref val) = self.rgb {
21769            {
21770                let hex = encode_hex(val);
21771                start.push_attribute(("rgb", hex.as_str()));
21772            }
21773        }
21774        #[cfg(feature = "sml-styling")]
21775        if let Some(ref val) = self.theme {
21776            {
21777                let s = val.to_string();
21778                start.push_attribute(("theme", s.as_str()));
21779            }
21780        }
21781        #[cfg(feature = "sml-styling")]
21782        if let Some(ref val) = self.tint {
21783            {
21784                let s = val.to_string();
21785                start.push_attribute(("tint", s.as_str()));
21786            }
21787        }
21788        #[cfg(feature = "extra-attrs")]
21789        for (key, value) in &self.extra_attrs {
21790            start.push_attribute((key.as_str(), value.as_str()));
21791        }
21792        start
21793    }
21794
21795    fn is_empty_element(&self) -> bool {
21796        true
21797    }
21798}
21799
21800impl ToXml for GradientFill {
21801    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21802        #[allow(unused_mut)]
21803        let mut start = start;
21804        if let Some(ref val) = self.r#type {
21805            {
21806                let s = val.to_string();
21807                start.push_attribute(("type", s.as_str()));
21808            }
21809        }
21810        if let Some(ref val) = self.degree {
21811            {
21812                let s = val.to_string();
21813                start.push_attribute(("degree", s.as_str()));
21814            }
21815        }
21816        if let Some(ref val) = self.left {
21817            {
21818                let s = val.to_string();
21819                start.push_attribute(("left", s.as_str()));
21820            }
21821        }
21822        if let Some(ref val) = self.right {
21823            {
21824                let s = val.to_string();
21825                start.push_attribute(("right", s.as_str()));
21826            }
21827        }
21828        if let Some(ref val) = self.top {
21829            {
21830                let s = val.to_string();
21831                start.push_attribute(("top", s.as_str()));
21832            }
21833        }
21834        if let Some(ref val) = self.bottom {
21835            {
21836                let s = val.to_string();
21837                start.push_attribute(("bottom", s.as_str()));
21838            }
21839        }
21840        #[cfg(feature = "extra-attrs")]
21841        for (key, value) in &self.extra_attrs {
21842            start.push_attribute((key.as_str(), value.as_str()));
21843        }
21844        start
21845    }
21846
21847    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21848        #[cfg(feature = "extra-children")]
21849        let mut extra_iter = self.extra_children.iter().peekable();
21850        #[cfg(feature = "extra-children")]
21851        let mut emit_idx: usize = 0;
21852        for item in &self.stop {
21853            #[cfg(feature = "extra-children")]
21854            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21855                extra_iter
21856                    .next()
21857                    .unwrap()
21858                    .node
21859                    .write_to(writer)
21860                    .map_err(SerializeError::from)?;
21861            }
21862            item.write_element("stop", writer)?;
21863            #[cfg(feature = "extra-children")]
21864            {
21865                emit_idx += 1;
21866            }
21867        }
21868        #[cfg(feature = "extra-children")]
21869        for extra in extra_iter {
21870            extra.node.write_to(writer).map_err(SerializeError::from)?;
21871        }
21872        Ok(())
21873    }
21874
21875    fn is_empty_element(&self) -> bool {
21876        if !self.stop.is_empty() {
21877            return false;
21878        }
21879        #[cfg(feature = "extra-children")]
21880        if !self.extra_children.is_empty() {
21881            return false;
21882        }
21883        true
21884    }
21885}
21886
21887impl ToXml for GradientStop {
21888    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21889        #[allow(unused_mut)]
21890        let mut start = start;
21891        {
21892            let val = &self.position;
21893            {
21894                let s = val.to_string();
21895                start.push_attribute(("position", s.as_str()));
21896            }
21897        }
21898        #[cfg(feature = "extra-attrs")]
21899        for (key, value) in &self.extra_attrs {
21900            start.push_attribute((key.as_str(), value.as_str()));
21901        }
21902        start
21903    }
21904
21905    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21906        #[cfg(feature = "extra-children")]
21907        let mut extra_iter = self.extra_children.iter().peekable();
21908        #[cfg(feature = "extra-children")]
21909        let mut emit_idx: usize = 0;
21910        #[cfg(feature = "extra-children")]
21911        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21912            extra_iter
21913                .next()
21914                .unwrap()
21915                .node
21916                .write_to(writer)
21917                .map_err(SerializeError::from)?;
21918        }
21919        {
21920            let val = &self.color;
21921            val.write_element("color", writer)?;
21922        }
21923        #[cfg(feature = "extra-children")]
21924        {
21925            emit_idx += 1;
21926        }
21927        #[cfg(feature = "extra-children")]
21928        for extra in extra_iter {
21929            extra.node.write_to(writer).map_err(SerializeError::from)?;
21930        }
21931        Ok(())
21932    }
21933
21934    fn is_empty_element(&self) -> bool {
21935        false
21936    }
21937}
21938
21939impl ToXml for NumberFormats {
21940    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21941        #[allow(unused_mut)]
21942        let mut start = start;
21943        if let Some(ref val) = self.count {
21944            {
21945                let s = val.to_string();
21946                start.push_attribute(("count", s.as_str()));
21947            }
21948        }
21949        #[cfg(feature = "extra-attrs")]
21950        for (key, value) in &self.extra_attrs {
21951            start.push_attribute((key.as_str(), value.as_str()));
21952        }
21953        start
21954    }
21955
21956    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
21957        #[cfg(feature = "extra-children")]
21958        let mut extra_iter = self.extra_children.iter().peekable();
21959        #[cfg(feature = "extra-children")]
21960        let mut emit_idx: usize = 0;
21961        for item in &self.num_fmt {
21962            #[cfg(feature = "extra-children")]
21963            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
21964                extra_iter
21965                    .next()
21966                    .unwrap()
21967                    .node
21968                    .write_to(writer)
21969                    .map_err(SerializeError::from)?;
21970            }
21971            item.write_element("numFmt", writer)?;
21972            #[cfg(feature = "extra-children")]
21973            {
21974                emit_idx += 1;
21975            }
21976        }
21977        #[cfg(feature = "extra-children")]
21978        for extra in extra_iter {
21979            extra.node.write_to(writer).map_err(SerializeError::from)?;
21980        }
21981        Ok(())
21982    }
21983
21984    fn is_empty_element(&self) -> bool {
21985        if !self.num_fmt.is_empty() {
21986            return false;
21987        }
21988        #[cfg(feature = "extra-children")]
21989        if !self.extra_children.is_empty() {
21990            return false;
21991        }
21992        true
21993    }
21994}
21995
21996impl ToXml for NumberFormat {
21997    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
21998        #[allow(unused_mut)]
21999        let mut start = start;
22000        #[cfg(feature = "sml-styling")]
22001        {
22002            let val = &self.number_format_id;
22003            {
22004                let s = val.to_string();
22005                start.push_attribute(("numFmtId", s.as_str()));
22006            }
22007        }
22008        #[cfg(feature = "sml-styling")]
22009        {
22010            let val = &self.format_code;
22011            start.push_attribute(("formatCode", val.as_str()));
22012        }
22013        #[cfg(feature = "extra-attrs")]
22014        for (key, value) in &self.extra_attrs {
22015            start.push_attribute((key.as_str(), value.as_str()));
22016        }
22017        start
22018    }
22019
22020    fn is_empty_element(&self) -> bool {
22021        true
22022    }
22023}
22024
22025impl ToXml for CellStyleFormats {
22026    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22027        #[allow(unused_mut)]
22028        let mut start = start;
22029        if let Some(ref val) = self.count {
22030            {
22031                let s = val.to_string();
22032                start.push_attribute(("count", s.as_str()));
22033            }
22034        }
22035        #[cfg(feature = "extra-attrs")]
22036        for (key, value) in &self.extra_attrs {
22037            start.push_attribute((key.as_str(), value.as_str()));
22038        }
22039        start
22040    }
22041
22042    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22043        #[cfg(feature = "extra-children")]
22044        let mut extra_iter = self.extra_children.iter().peekable();
22045        #[cfg(feature = "extra-children")]
22046        let mut emit_idx: usize = 0;
22047        for item in &self.xf {
22048            #[cfg(feature = "extra-children")]
22049            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22050                extra_iter
22051                    .next()
22052                    .unwrap()
22053                    .node
22054                    .write_to(writer)
22055                    .map_err(SerializeError::from)?;
22056            }
22057            item.write_element("xf", writer)?;
22058            #[cfg(feature = "extra-children")]
22059            {
22060                emit_idx += 1;
22061            }
22062        }
22063        #[cfg(feature = "extra-children")]
22064        for extra in extra_iter {
22065            extra.node.write_to(writer).map_err(SerializeError::from)?;
22066        }
22067        Ok(())
22068    }
22069
22070    fn is_empty_element(&self) -> bool {
22071        if !self.xf.is_empty() {
22072            return false;
22073        }
22074        #[cfg(feature = "extra-children")]
22075        if !self.extra_children.is_empty() {
22076            return false;
22077        }
22078        true
22079    }
22080}
22081
22082impl ToXml for CellFormats {
22083    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22084        #[allow(unused_mut)]
22085        let mut start = start;
22086        if let Some(ref val) = self.count {
22087            {
22088                let s = val.to_string();
22089                start.push_attribute(("count", s.as_str()));
22090            }
22091        }
22092        #[cfg(feature = "extra-attrs")]
22093        for (key, value) in &self.extra_attrs {
22094            start.push_attribute((key.as_str(), value.as_str()));
22095        }
22096        start
22097    }
22098
22099    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22100        #[cfg(feature = "extra-children")]
22101        let mut extra_iter = self.extra_children.iter().peekable();
22102        #[cfg(feature = "extra-children")]
22103        let mut emit_idx: usize = 0;
22104        for item in &self.xf {
22105            #[cfg(feature = "extra-children")]
22106            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22107                extra_iter
22108                    .next()
22109                    .unwrap()
22110                    .node
22111                    .write_to(writer)
22112                    .map_err(SerializeError::from)?;
22113            }
22114            item.write_element("xf", writer)?;
22115            #[cfg(feature = "extra-children")]
22116            {
22117                emit_idx += 1;
22118            }
22119        }
22120        #[cfg(feature = "extra-children")]
22121        for extra in extra_iter {
22122            extra.node.write_to(writer).map_err(SerializeError::from)?;
22123        }
22124        Ok(())
22125    }
22126
22127    fn is_empty_element(&self) -> bool {
22128        if !self.xf.is_empty() {
22129            return false;
22130        }
22131        #[cfg(feature = "extra-children")]
22132        if !self.extra_children.is_empty() {
22133            return false;
22134        }
22135        true
22136    }
22137}
22138
22139impl ToXml for Format {
22140    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22141        #[allow(unused_mut)]
22142        let mut start = start;
22143        #[cfg(feature = "sml-styling")]
22144        if let Some(ref val) = self.number_format_id {
22145            {
22146                let s = val.to_string();
22147                start.push_attribute(("numFmtId", s.as_str()));
22148            }
22149        }
22150        #[cfg(feature = "sml-styling")]
22151        if let Some(ref val) = self.font_id {
22152            {
22153                let s = val.to_string();
22154                start.push_attribute(("fontId", s.as_str()));
22155            }
22156        }
22157        #[cfg(feature = "sml-styling")]
22158        if let Some(ref val) = self.fill_id {
22159            {
22160                let s = val.to_string();
22161                start.push_attribute(("fillId", s.as_str()));
22162            }
22163        }
22164        #[cfg(feature = "sml-styling")]
22165        if let Some(ref val) = self.border_id {
22166            {
22167                let s = val.to_string();
22168                start.push_attribute(("borderId", s.as_str()));
22169            }
22170        }
22171        #[cfg(feature = "sml-styling")]
22172        if let Some(ref val) = self.format_id {
22173            {
22174                let s = val.to_string();
22175                start.push_attribute(("xfId", s.as_str()));
22176            }
22177        }
22178        #[cfg(feature = "sml-styling")]
22179        if let Some(ref val) = self.quote_prefix {
22180            start.push_attribute(("quotePrefix", if *val { "1" } else { "0" }));
22181        }
22182        #[cfg(feature = "sml-pivot")]
22183        if let Some(ref val) = self.pivot_button {
22184            start.push_attribute(("pivotButton", if *val { "1" } else { "0" }));
22185        }
22186        #[cfg(feature = "sml-styling")]
22187        if let Some(ref val) = self.apply_number_format {
22188            start.push_attribute(("applyNumberFormat", if *val { "1" } else { "0" }));
22189        }
22190        #[cfg(feature = "sml-styling")]
22191        if let Some(ref val) = self.apply_font {
22192            start.push_attribute(("applyFont", if *val { "1" } else { "0" }));
22193        }
22194        #[cfg(feature = "sml-styling")]
22195        if let Some(ref val) = self.apply_fill {
22196            start.push_attribute(("applyFill", if *val { "1" } else { "0" }));
22197        }
22198        #[cfg(feature = "sml-styling")]
22199        if let Some(ref val) = self.apply_border {
22200            start.push_attribute(("applyBorder", if *val { "1" } else { "0" }));
22201        }
22202        #[cfg(feature = "sml-styling")]
22203        if let Some(ref val) = self.apply_alignment {
22204            start.push_attribute(("applyAlignment", if *val { "1" } else { "0" }));
22205        }
22206        #[cfg(feature = "sml-styling")]
22207        if let Some(ref val) = self.apply_protection {
22208            start.push_attribute(("applyProtection", if *val { "1" } else { "0" }));
22209        }
22210        #[cfg(feature = "extra-attrs")]
22211        for (key, value) in &self.extra_attrs {
22212            start.push_attribute((key.as_str(), value.as_str()));
22213        }
22214        start
22215    }
22216
22217    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22218        #[cfg(feature = "extra-children")]
22219        let mut extra_iter = self.extra_children.iter().peekable();
22220        #[cfg(feature = "extra-children")]
22221        let mut emit_idx: usize = 0;
22222        #[cfg(feature = "extra-children")]
22223        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22224            extra_iter
22225                .next()
22226                .unwrap()
22227                .node
22228                .write_to(writer)
22229                .map_err(SerializeError::from)?;
22230        }
22231        #[cfg(feature = "sml-styling")]
22232        if let Some(ref val) = self.alignment {
22233            val.write_element("alignment", writer)?;
22234        }
22235        #[cfg(feature = "extra-children")]
22236        {
22237            emit_idx += 1;
22238        }
22239        #[cfg(feature = "extra-children")]
22240        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22241            extra_iter
22242                .next()
22243                .unwrap()
22244                .node
22245                .write_to(writer)
22246                .map_err(SerializeError::from)?;
22247        }
22248        #[cfg(feature = "sml-protection")]
22249        if let Some(ref val) = self.protection {
22250            val.write_element("protection", writer)?;
22251        }
22252        #[cfg(feature = "extra-children")]
22253        {
22254            emit_idx += 1;
22255        }
22256        #[cfg(feature = "extra-children")]
22257        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22258            extra_iter
22259                .next()
22260                .unwrap()
22261                .node
22262                .write_to(writer)
22263                .map_err(SerializeError::from)?;
22264        }
22265        #[cfg(feature = "sml-extensions")]
22266        if let Some(ref val) = self.extension_list {
22267            val.write_element("extLst", writer)?;
22268        }
22269        #[cfg(feature = "extra-children")]
22270        {
22271            emit_idx += 1;
22272        }
22273        #[cfg(feature = "extra-children")]
22274        for extra in extra_iter {
22275            extra.node.write_to(writer).map_err(SerializeError::from)?;
22276        }
22277        Ok(())
22278    }
22279
22280    fn is_empty_element(&self) -> bool {
22281        #[cfg(feature = "sml-styling")]
22282        if self.alignment.is_some() {
22283            return false;
22284        }
22285        #[cfg(feature = "sml-protection")]
22286        if self.protection.is_some() {
22287            return false;
22288        }
22289        #[cfg(feature = "sml-extensions")]
22290        if self.extension_list.is_some() {
22291            return false;
22292        }
22293        #[cfg(feature = "extra-children")]
22294        if !self.extra_children.is_empty() {
22295            return false;
22296        }
22297        true
22298    }
22299}
22300
22301impl ToXml for CellStyles {
22302    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22303        #[allow(unused_mut)]
22304        let mut start = start;
22305        if let Some(ref val) = self.count {
22306            {
22307                let s = val.to_string();
22308                start.push_attribute(("count", s.as_str()));
22309            }
22310        }
22311        #[cfg(feature = "extra-attrs")]
22312        for (key, value) in &self.extra_attrs {
22313            start.push_attribute((key.as_str(), value.as_str()));
22314        }
22315        start
22316    }
22317
22318    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22319        #[cfg(feature = "extra-children")]
22320        let mut extra_iter = self.extra_children.iter().peekable();
22321        #[cfg(feature = "extra-children")]
22322        let mut emit_idx: usize = 0;
22323        for item in &self.cell_style {
22324            #[cfg(feature = "extra-children")]
22325            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22326                extra_iter
22327                    .next()
22328                    .unwrap()
22329                    .node
22330                    .write_to(writer)
22331                    .map_err(SerializeError::from)?;
22332            }
22333            item.write_element("cellStyle", writer)?;
22334            #[cfg(feature = "extra-children")]
22335            {
22336                emit_idx += 1;
22337            }
22338        }
22339        #[cfg(feature = "extra-children")]
22340        for extra in extra_iter {
22341            extra.node.write_to(writer).map_err(SerializeError::from)?;
22342        }
22343        Ok(())
22344    }
22345
22346    fn is_empty_element(&self) -> bool {
22347        if !self.cell_style.is_empty() {
22348            return false;
22349        }
22350        #[cfg(feature = "extra-children")]
22351        if !self.extra_children.is_empty() {
22352            return false;
22353        }
22354        true
22355    }
22356}
22357
22358impl ToXml for CellStyle {
22359    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22360        #[allow(unused_mut)]
22361        let mut start = start;
22362        if let Some(ref val) = self.name {
22363            start.push_attribute(("name", val.as_str()));
22364        }
22365        {
22366            let val = &self.format_id;
22367            {
22368                let s = val.to_string();
22369                start.push_attribute(("xfId", s.as_str()));
22370            }
22371        }
22372        if let Some(ref val) = self.builtin_id {
22373            {
22374                let s = val.to_string();
22375                start.push_attribute(("builtinId", s.as_str()));
22376            }
22377        }
22378        if let Some(ref val) = self.i_level {
22379            {
22380                let s = val.to_string();
22381                start.push_attribute(("iLevel", s.as_str()));
22382            }
22383        }
22384        if let Some(ref val) = self.hidden {
22385            start.push_attribute(("hidden", if *val { "1" } else { "0" }));
22386        }
22387        if let Some(ref val) = self.custom_builtin {
22388            start.push_attribute(("customBuiltin", if *val { "1" } else { "0" }));
22389        }
22390        #[cfg(feature = "extra-attrs")]
22391        for (key, value) in &self.extra_attrs {
22392            start.push_attribute((key.as_str(), value.as_str()));
22393        }
22394        start
22395    }
22396
22397    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22398        #[cfg(feature = "extra-children")]
22399        let mut extra_iter = self.extra_children.iter().peekable();
22400        #[cfg(feature = "extra-children")]
22401        let mut emit_idx: usize = 0;
22402        #[cfg(feature = "extra-children")]
22403        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22404            extra_iter
22405                .next()
22406                .unwrap()
22407                .node
22408                .write_to(writer)
22409                .map_err(SerializeError::from)?;
22410        }
22411        if let Some(ref val) = self.extension_list {
22412            val.write_element("extLst", writer)?;
22413        }
22414        #[cfg(feature = "extra-children")]
22415        {
22416            emit_idx += 1;
22417        }
22418        #[cfg(feature = "extra-children")]
22419        for extra in extra_iter {
22420            extra.node.write_to(writer).map_err(SerializeError::from)?;
22421        }
22422        Ok(())
22423    }
22424
22425    fn is_empty_element(&self) -> bool {
22426        if self.extension_list.is_some() {
22427            return false;
22428        }
22429        #[cfg(feature = "extra-children")]
22430        if !self.extra_children.is_empty() {
22431            return false;
22432        }
22433        true
22434    }
22435}
22436
22437impl ToXml for DifferentialFormats {
22438    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22439        #[allow(unused_mut)]
22440        let mut start = start;
22441        if let Some(ref val) = self.count {
22442            {
22443                let s = val.to_string();
22444                start.push_attribute(("count", s.as_str()));
22445            }
22446        }
22447        #[cfg(feature = "extra-attrs")]
22448        for (key, value) in &self.extra_attrs {
22449            start.push_attribute((key.as_str(), value.as_str()));
22450        }
22451        start
22452    }
22453
22454    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22455        #[cfg(feature = "extra-children")]
22456        let mut extra_iter = self.extra_children.iter().peekable();
22457        #[cfg(feature = "extra-children")]
22458        let mut emit_idx: usize = 0;
22459        for item in &self.dxf {
22460            #[cfg(feature = "extra-children")]
22461            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22462                extra_iter
22463                    .next()
22464                    .unwrap()
22465                    .node
22466                    .write_to(writer)
22467                    .map_err(SerializeError::from)?;
22468            }
22469            item.write_element("dxf", writer)?;
22470            #[cfg(feature = "extra-children")]
22471            {
22472                emit_idx += 1;
22473            }
22474        }
22475        #[cfg(feature = "extra-children")]
22476        for extra in extra_iter {
22477            extra.node.write_to(writer).map_err(SerializeError::from)?;
22478        }
22479        Ok(())
22480    }
22481
22482    fn is_empty_element(&self) -> bool {
22483        if !self.dxf.is_empty() {
22484            return false;
22485        }
22486        #[cfg(feature = "extra-children")]
22487        if !self.extra_children.is_empty() {
22488            return false;
22489        }
22490        true
22491    }
22492}
22493
22494impl ToXml for DifferentialFormat {
22495    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22496        #[cfg(feature = "extra-children")]
22497        let mut extra_iter = self.extra_children.iter().peekable();
22498        #[cfg(feature = "extra-children")]
22499        let mut emit_idx: usize = 0;
22500        #[cfg(feature = "extra-children")]
22501        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22502            extra_iter
22503                .next()
22504                .unwrap()
22505                .node
22506                .write_to(writer)
22507                .map_err(SerializeError::from)?;
22508        }
22509        if let Some(ref val) = self.font {
22510            val.write_element("font", writer)?;
22511        }
22512        #[cfg(feature = "extra-children")]
22513        {
22514            emit_idx += 1;
22515        }
22516        #[cfg(feature = "extra-children")]
22517        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22518            extra_iter
22519                .next()
22520                .unwrap()
22521                .node
22522                .write_to(writer)
22523                .map_err(SerializeError::from)?;
22524        }
22525        if let Some(ref val) = self.num_fmt {
22526            val.write_element("numFmt", writer)?;
22527        }
22528        #[cfg(feature = "extra-children")]
22529        {
22530            emit_idx += 1;
22531        }
22532        #[cfg(feature = "extra-children")]
22533        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22534            extra_iter
22535                .next()
22536                .unwrap()
22537                .node
22538                .write_to(writer)
22539                .map_err(SerializeError::from)?;
22540        }
22541        if let Some(ref val) = self.fill {
22542            val.write_element("fill", writer)?;
22543        }
22544        #[cfg(feature = "extra-children")]
22545        {
22546            emit_idx += 1;
22547        }
22548        #[cfg(feature = "extra-children")]
22549        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22550            extra_iter
22551                .next()
22552                .unwrap()
22553                .node
22554                .write_to(writer)
22555                .map_err(SerializeError::from)?;
22556        }
22557        if let Some(ref val) = self.alignment {
22558            val.write_element("alignment", writer)?;
22559        }
22560        #[cfg(feature = "extra-children")]
22561        {
22562            emit_idx += 1;
22563        }
22564        #[cfg(feature = "extra-children")]
22565        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22566            extra_iter
22567                .next()
22568                .unwrap()
22569                .node
22570                .write_to(writer)
22571                .map_err(SerializeError::from)?;
22572        }
22573        if let Some(ref val) = self.border {
22574            val.write_element("border", writer)?;
22575        }
22576        #[cfg(feature = "extra-children")]
22577        {
22578            emit_idx += 1;
22579        }
22580        #[cfg(feature = "extra-children")]
22581        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22582            extra_iter
22583                .next()
22584                .unwrap()
22585                .node
22586                .write_to(writer)
22587                .map_err(SerializeError::from)?;
22588        }
22589        if let Some(ref val) = self.protection {
22590            val.write_element("protection", writer)?;
22591        }
22592        #[cfg(feature = "extra-children")]
22593        {
22594            emit_idx += 1;
22595        }
22596        #[cfg(feature = "extra-children")]
22597        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22598            extra_iter
22599                .next()
22600                .unwrap()
22601                .node
22602                .write_to(writer)
22603                .map_err(SerializeError::from)?;
22604        }
22605        if let Some(ref val) = self.extension_list {
22606            val.write_element("extLst", writer)?;
22607        }
22608        #[cfg(feature = "extra-children")]
22609        {
22610            emit_idx += 1;
22611        }
22612        #[cfg(feature = "extra-children")]
22613        for extra in extra_iter {
22614            extra.node.write_to(writer).map_err(SerializeError::from)?;
22615        }
22616        Ok(())
22617    }
22618
22619    fn is_empty_element(&self) -> bool {
22620        if self.font.is_some() {
22621            return false;
22622        }
22623        if self.num_fmt.is_some() {
22624            return false;
22625        }
22626        if self.fill.is_some() {
22627            return false;
22628        }
22629        if self.alignment.is_some() {
22630            return false;
22631        }
22632        if self.border.is_some() {
22633            return false;
22634        }
22635        if self.protection.is_some() {
22636            return false;
22637        }
22638        if self.extension_list.is_some() {
22639            return false;
22640        }
22641        #[cfg(feature = "extra-children")]
22642        if !self.extra_children.is_empty() {
22643            return false;
22644        }
22645        true
22646    }
22647}
22648
22649impl ToXml for Colors {
22650    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22651        #[cfg(feature = "extra-children")]
22652        let mut extra_iter = self.extra_children.iter().peekable();
22653        #[cfg(feature = "extra-children")]
22654        let mut emit_idx: usize = 0;
22655        #[cfg(feature = "extra-children")]
22656        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22657            extra_iter
22658                .next()
22659                .unwrap()
22660                .node
22661                .write_to(writer)
22662                .map_err(SerializeError::from)?;
22663        }
22664        #[cfg(feature = "sml-styling")]
22665        if let Some(ref val) = self.indexed_colors {
22666            val.write_element("indexedColors", writer)?;
22667        }
22668        #[cfg(feature = "extra-children")]
22669        {
22670            emit_idx += 1;
22671        }
22672        #[cfg(feature = "extra-children")]
22673        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22674            extra_iter
22675                .next()
22676                .unwrap()
22677                .node
22678                .write_to(writer)
22679                .map_err(SerializeError::from)?;
22680        }
22681        #[cfg(feature = "sml-styling")]
22682        if let Some(ref val) = self.mru_colors {
22683            val.write_element("mruColors", writer)?;
22684        }
22685        #[cfg(feature = "extra-children")]
22686        {
22687            emit_idx += 1;
22688        }
22689        #[cfg(feature = "extra-children")]
22690        for extra in extra_iter {
22691            extra.node.write_to(writer).map_err(SerializeError::from)?;
22692        }
22693        Ok(())
22694    }
22695
22696    fn is_empty_element(&self) -> bool {
22697        #[cfg(feature = "sml-styling")]
22698        if self.indexed_colors.is_some() {
22699            return false;
22700        }
22701        #[cfg(feature = "sml-styling")]
22702        if self.mru_colors.is_some() {
22703            return false;
22704        }
22705        #[cfg(feature = "extra-children")]
22706        if !self.extra_children.is_empty() {
22707            return false;
22708        }
22709        true
22710    }
22711}
22712
22713impl ToXml for IndexedColors {
22714    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22715        #[cfg(feature = "extra-children")]
22716        let mut extra_iter = self.extra_children.iter().peekable();
22717        #[cfg(feature = "extra-children")]
22718        let mut emit_idx: usize = 0;
22719        for item in &self.rgb_color {
22720            #[cfg(feature = "extra-children")]
22721            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22722                extra_iter
22723                    .next()
22724                    .unwrap()
22725                    .node
22726                    .write_to(writer)
22727                    .map_err(SerializeError::from)?;
22728            }
22729            item.write_element("rgbColor", writer)?;
22730            #[cfg(feature = "extra-children")]
22731            {
22732                emit_idx += 1;
22733            }
22734        }
22735        #[cfg(feature = "extra-children")]
22736        for extra in extra_iter {
22737            extra.node.write_to(writer).map_err(SerializeError::from)?;
22738        }
22739        Ok(())
22740    }
22741
22742    fn is_empty_element(&self) -> bool {
22743        if !self.rgb_color.is_empty() {
22744            return false;
22745        }
22746        #[cfg(feature = "extra-children")]
22747        if !self.extra_children.is_empty() {
22748            return false;
22749        }
22750        true
22751    }
22752}
22753
22754impl ToXml for MostRecentColors {
22755    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22756        #[cfg(feature = "extra-children")]
22757        let mut extra_iter = self.extra_children.iter().peekable();
22758        #[cfg(feature = "extra-children")]
22759        let mut emit_idx: usize = 0;
22760        for item in &self.color {
22761            #[cfg(feature = "extra-children")]
22762            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22763                extra_iter
22764                    .next()
22765                    .unwrap()
22766                    .node
22767                    .write_to(writer)
22768                    .map_err(SerializeError::from)?;
22769            }
22770            item.write_element("color", writer)?;
22771            #[cfg(feature = "extra-children")]
22772            {
22773                emit_idx += 1;
22774            }
22775        }
22776        #[cfg(feature = "extra-children")]
22777        for extra in extra_iter {
22778            extra.node.write_to(writer).map_err(SerializeError::from)?;
22779        }
22780        Ok(())
22781    }
22782
22783    fn is_empty_element(&self) -> bool {
22784        if !self.color.is_empty() {
22785            return false;
22786        }
22787        #[cfg(feature = "extra-children")]
22788        if !self.extra_children.is_empty() {
22789            return false;
22790        }
22791        true
22792    }
22793}
22794
22795impl ToXml for RgbColor {
22796    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22797        #[allow(unused_mut)]
22798        let mut start = start;
22799        if let Some(ref val) = self.rgb {
22800            {
22801                let hex = encode_hex(val);
22802                start.push_attribute(("rgb", hex.as_str()));
22803            }
22804        }
22805        #[cfg(feature = "extra-attrs")]
22806        for (key, value) in &self.extra_attrs {
22807            start.push_attribute((key.as_str(), value.as_str()));
22808        }
22809        start
22810    }
22811
22812    fn is_empty_element(&self) -> bool {
22813        true
22814    }
22815}
22816
22817impl ToXml for TableStyles {
22818    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22819        #[allow(unused_mut)]
22820        let mut start = start;
22821        if let Some(ref val) = self.count {
22822            {
22823                let s = val.to_string();
22824                start.push_attribute(("count", s.as_str()));
22825            }
22826        }
22827        if let Some(ref val) = self.default_table_style {
22828            start.push_attribute(("defaultTableStyle", val.as_str()));
22829        }
22830        if let Some(ref val) = self.default_pivot_style {
22831            start.push_attribute(("defaultPivotStyle", val.as_str()));
22832        }
22833        #[cfg(feature = "extra-attrs")]
22834        for (key, value) in &self.extra_attrs {
22835            start.push_attribute((key.as_str(), value.as_str()));
22836        }
22837        start
22838    }
22839
22840    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22841        #[cfg(feature = "extra-children")]
22842        let mut extra_iter = self.extra_children.iter().peekable();
22843        #[cfg(feature = "extra-children")]
22844        let mut emit_idx: usize = 0;
22845        for item in &self.table_style {
22846            #[cfg(feature = "extra-children")]
22847            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22848                extra_iter
22849                    .next()
22850                    .unwrap()
22851                    .node
22852                    .write_to(writer)
22853                    .map_err(SerializeError::from)?;
22854            }
22855            item.write_element("tableStyle", writer)?;
22856            #[cfg(feature = "extra-children")]
22857            {
22858                emit_idx += 1;
22859            }
22860        }
22861        #[cfg(feature = "extra-children")]
22862        for extra in extra_iter {
22863            extra.node.write_to(writer).map_err(SerializeError::from)?;
22864        }
22865        Ok(())
22866    }
22867
22868    fn is_empty_element(&self) -> bool {
22869        if !self.table_style.is_empty() {
22870            return false;
22871        }
22872        #[cfg(feature = "extra-children")]
22873        if !self.extra_children.is_empty() {
22874            return false;
22875        }
22876        true
22877    }
22878}
22879
22880impl ToXml for TableStyle {
22881    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22882        #[allow(unused_mut)]
22883        let mut start = start;
22884        {
22885            let val = &self.name;
22886            start.push_attribute(("name", val.as_str()));
22887        }
22888        if let Some(ref val) = self.pivot {
22889            start.push_attribute(("pivot", if *val { "1" } else { "0" }));
22890        }
22891        if let Some(ref val) = self.table {
22892            start.push_attribute(("table", if *val { "1" } else { "0" }));
22893        }
22894        if let Some(ref val) = self.count {
22895            {
22896                let s = val.to_string();
22897                start.push_attribute(("count", s.as_str()));
22898            }
22899        }
22900        #[cfg(feature = "extra-attrs")]
22901        for (key, value) in &self.extra_attrs {
22902            start.push_attribute((key.as_str(), value.as_str()));
22903        }
22904        start
22905    }
22906
22907    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
22908        #[cfg(feature = "extra-children")]
22909        let mut extra_iter = self.extra_children.iter().peekable();
22910        #[cfg(feature = "extra-children")]
22911        let mut emit_idx: usize = 0;
22912        for item in &self.table_style_element {
22913            #[cfg(feature = "extra-children")]
22914            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
22915                extra_iter
22916                    .next()
22917                    .unwrap()
22918                    .node
22919                    .write_to(writer)
22920                    .map_err(SerializeError::from)?;
22921            }
22922            item.write_element("tableStyleElement", writer)?;
22923            #[cfg(feature = "extra-children")]
22924            {
22925                emit_idx += 1;
22926            }
22927        }
22928        #[cfg(feature = "extra-children")]
22929        for extra in extra_iter {
22930            extra.node.write_to(writer).map_err(SerializeError::from)?;
22931        }
22932        Ok(())
22933    }
22934
22935    fn is_empty_element(&self) -> bool {
22936        if !self.table_style_element.is_empty() {
22937            return false;
22938        }
22939        #[cfg(feature = "extra-children")]
22940        if !self.extra_children.is_empty() {
22941            return false;
22942        }
22943        true
22944    }
22945}
22946
22947impl ToXml for TableStyleElement {
22948    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22949        #[allow(unused_mut)]
22950        let mut start = start;
22951        {
22952            let val = &self.r#type;
22953            {
22954                let s = val.to_string();
22955                start.push_attribute(("type", s.as_str()));
22956            }
22957        }
22958        if let Some(ref val) = self.size {
22959            {
22960                let s = val.to_string();
22961                start.push_attribute(("size", s.as_str()));
22962            }
22963        }
22964        if let Some(ref val) = self.dxf_id {
22965            {
22966                let s = val.to_string();
22967                start.push_attribute(("dxfId", s.as_str()));
22968            }
22969        }
22970        #[cfg(feature = "extra-attrs")]
22971        for (key, value) in &self.extra_attrs {
22972            start.push_attribute((key.as_str(), value.as_str()));
22973        }
22974        start
22975    }
22976
22977    fn is_empty_element(&self) -> bool {
22978        true
22979    }
22980}
22981
22982impl ToXml for BooleanProperty {
22983    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
22984        #[allow(unused_mut)]
22985        let mut start = start;
22986        if let Some(ref val) = self.value {
22987            start.push_attribute(("val", if *val { "1" } else { "0" }));
22988        }
22989        #[cfg(feature = "extra-attrs")]
22990        for (key, value) in &self.extra_attrs {
22991            start.push_attribute((key.as_str(), value.as_str()));
22992        }
22993        start
22994    }
22995
22996    fn is_empty_element(&self) -> bool {
22997        true
22998    }
22999}
23000
23001impl ToXml for FontSize {
23002    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23003        #[allow(unused_mut)]
23004        let mut start = start;
23005        {
23006            let val = &self.value;
23007            {
23008                let s = val.to_string();
23009                start.push_attribute(("val", s.as_str()));
23010            }
23011        }
23012        #[cfg(feature = "extra-attrs")]
23013        for (key, value) in &self.extra_attrs {
23014            start.push_attribute((key.as_str(), value.as_str()));
23015        }
23016        start
23017    }
23018
23019    fn is_empty_element(&self) -> bool {
23020        true
23021    }
23022}
23023
23024impl ToXml for IntProperty {
23025    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23026        #[allow(unused_mut)]
23027        let mut start = start;
23028        {
23029            let val = &self.value;
23030            {
23031                let s = val.to_string();
23032                start.push_attribute(("val", s.as_str()));
23033            }
23034        }
23035        #[cfg(feature = "extra-attrs")]
23036        for (key, value) in &self.extra_attrs {
23037            start.push_attribute((key.as_str(), value.as_str()));
23038        }
23039        start
23040    }
23041
23042    fn is_empty_element(&self) -> bool {
23043        true
23044    }
23045}
23046
23047impl ToXml for FontName {
23048    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23049        #[allow(unused_mut)]
23050        let mut start = start;
23051        {
23052            let val = &self.value;
23053            start.push_attribute(("val", val.as_str()));
23054        }
23055        #[cfg(feature = "extra-attrs")]
23056        for (key, value) in &self.extra_attrs {
23057            start.push_attribute((key.as_str(), value.as_str()));
23058        }
23059        start
23060    }
23061
23062    fn is_empty_element(&self) -> bool {
23063        true
23064    }
23065}
23066
23067impl ToXml for VerticalAlignFontProperty {
23068    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23069        #[allow(unused_mut)]
23070        let mut start = start;
23071        {
23072            let val = &self.value;
23073            {
23074                let s = val.to_string();
23075                start.push_attribute(("val", s.as_str()));
23076            }
23077        }
23078        #[cfg(feature = "extra-attrs")]
23079        for (key, value) in &self.extra_attrs {
23080            start.push_attribute((key.as_str(), value.as_str()));
23081        }
23082        start
23083    }
23084
23085    fn is_empty_element(&self) -> bool {
23086        true
23087    }
23088}
23089
23090impl ToXml for FontSchemeProperty {
23091    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23092        #[allow(unused_mut)]
23093        let mut start = start;
23094        {
23095            let val = &self.value;
23096            {
23097                let s = val.to_string();
23098                start.push_attribute(("val", s.as_str()));
23099            }
23100        }
23101        #[cfg(feature = "extra-attrs")]
23102        for (key, value) in &self.extra_attrs {
23103            start.push_attribute((key.as_str(), value.as_str()));
23104        }
23105        start
23106    }
23107
23108    fn is_empty_element(&self) -> bool {
23109        true
23110    }
23111}
23112
23113impl ToXml for UnderlineProperty {
23114    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23115        #[allow(unused_mut)]
23116        let mut start = start;
23117        if let Some(ref val) = self.value {
23118            {
23119                let s = val.to_string();
23120                start.push_attribute(("val", s.as_str()));
23121            }
23122        }
23123        #[cfg(feature = "extra-attrs")]
23124        for (key, value) in &self.extra_attrs {
23125            start.push_attribute((key.as_str(), value.as_str()));
23126        }
23127        start
23128    }
23129
23130    fn is_empty_element(&self) -> bool {
23131        true
23132    }
23133}
23134
23135impl ToXml for Font {
23136    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
23137        #[cfg(feature = "extra-children")]
23138        let mut extra_iter = self.extra_children.iter().peekable();
23139        #[cfg(feature = "extra-children")]
23140        let mut emit_idx: usize = 0;
23141        #[cfg(feature = "extra-children")]
23142        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23143            extra_iter
23144                .next()
23145                .unwrap()
23146                .node
23147                .write_to(writer)
23148                .map_err(SerializeError::from)?;
23149        }
23150        #[cfg(feature = "sml-styling")]
23151        if let Some(ref val) = self.name {
23152            val.write_element("name", writer)?;
23153        }
23154        #[cfg(feature = "extra-children")]
23155        {
23156            emit_idx += 1;
23157        }
23158        #[cfg(feature = "extra-children")]
23159        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23160            extra_iter
23161                .next()
23162                .unwrap()
23163                .node
23164                .write_to(writer)
23165                .map_err(SerializeError::from)?;
23166        }
23167        #[cfg(feature = "sml-styling")]
23168        if let Some(ref val) = self.charset {
23169            val.write_element("charset", writer)?;
23170        }
23171        #[cfg(feature = "extra-children")]
23172        {
23173            emit_idx += 1;
23174        }
23175        #[cfg(feature = "extra-children")]
23176        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23177            extra_iter
23178                .next()
23179                .unwrap()
23180                .node
23181                .write_to(writer)
23182                .map_err(SerializeError::from)?;
23183        }
23184        #[cfg(feature = "sml-styling")]
23185        if let Some(ref val) = self.family {
23186            val.write_element("family", writer)?;
23187        }
23188        #[cfg(feature = "extra-children")]
23189        {
23190            emit_idx += 1;
23191        }
23192        #[cfg(feature = "extra-children")]
23193        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23194            extra_iter
23195                .next()
23196                .unwrap()
23197                .node
23198                .write_to(writer)
23199                .map_err(SerializeError::from)?;
23200        }
23201        #[cfg(feature = "sml-styling")]
23202        if let Some(ref val) = self.b {
23203            val.write_element("b", writer)?;
23204        }
23205        #[cfg(feature = "extra-children")]
23206        {
23207            emit_idx += 1;
23208        }
23209        #[cfg(feature = "extra-children")]
23210        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23211            extra_iter
23212                .next()
23213                .unwrap()
23214                .node
23215                .write_to(writer)
23216                .map_err(SerializeError::from)?;
23217        }
23218        #[cfg(feature = "sml-styling")]
23219        if let Some(ref val) = self.i {
23220            val.write_element("i", writer)?;
23221        }
23222        #[cfg(feature = "extra-children")]
23223        {
23224            emit_idx += 1;
23225        }
23226        #[cfg(feature = "extra-children")]
23227        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23228            extra_iter
23229                .next()
23230                .unwrap()
23231                .node
23232                .write_to(writer)
23233                .map_err(SerializeError::from)?;
23234        }
23235        #[cfg(feature = "sml-styling")]
23236        if let Some(ref val) = self.strike {
23237            val.write_element("strike", writer)?;
23238        }
23239        #[cfg(feature = "extra-children")]
23240        {
23241            emit_idx += 1;
23242        }
23243        #[cfg(feature = "extra-children")]
23244        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23245            extra_iter
23246                .next()
23247                .unwrap()
23248                .node
23249                .write_to(writer)
23250                .map_err(SerializeError::from)?;
23251        }
23252        #[cfg(feature = "sml-styling")]
23253        if let Some(ref val) = self.outline {
23254            val.write_element("outline", writer)?;
23255        }
23256        #[cfg(feature = "extra-children")]
23257        {
23258            emit_idx += 1;
23259        }
23260        #[cfg(feature = "extra-children")]
23261        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23262            extra_iter
23263                .next()
23264                .unwrap()
23265                .node
23266                .write_to(writer)
23267                .map_err(SerializeError::from)?;
23268        }
23269        #[cfg(feature = "sml-styling")]
23270        if let Some(ref val) = self.shadow {
23271            val.write_element("shadow", writer)?;
23272        }
23273        #[cfg(feature = "extra-children")]
23274        {
23275            emit_idx += 1;
23276        }
23277        #[cfg(feature = "extra-children")]
23278        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23279            extra_iter
23280                .next()
23281                .unwrap()
23282                .node
23283                .write_to(writer)
23284                .map_err(SerializeError::from)?;
23285        }
23286        #[cfg(feature = "sml-styling")]
23287        if let Some(ref val) = self.condense {
23288            val.write_element("condense", writer)?;
23289        }
23290        #[cfg(feature = "extra-children")]
23291        {
23292            emit_idx += 1;
23293        }
23294        #[cfg(feature = "extra-children")]
23295        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23296            extra_iter
23297                .next()
23298                .unwrap()
23299                .node
23300                .write_to(writer)
23301                .map_err(SerializeError::from)?;
23302        }
23303        #[cfg(feature = "sml-styling")]
23304        if let Some(ref val) = self.extend {
23305            val.write_element("extend", writer)?;
23306        }
23307        #[cfg(feature = "extra-children")]
23308        {
23309            emit_idx += 1;
23310        }
23311        #[cfg(feature = "extra-children")]
23312        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23313            extra_iter
23314                .next()
23315                .unwrap()
23316                .node
23317                .write_to(writer)
23318                .map_err(SerializeError::from)?;
23319        }
23320        #[cfg(feature = "sml-styling")]
23321        if let Some(ref val) = self.color {
23322            val.write_element("color", writer)?;
23323        }
23324        #[cfg(feature = "extra-children")]
23325        {
23326            emit_idx += 1;
23327        }
23328        #[cfg(feature = "extra-children")]
23329        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23330            extra_iter
23331                .next()
23332                .unwrap()
23333                .node
23334                .write_to(writer)
23335                .map_err(SerializeError::from)?;
23336        }
23337        #[cfg(feature = "sml-styling")]
23338        if let Some(ref val) = self.sz {
23339            val.write_element("sz", writer)?;
23340        }
23341        #[cfg(feature = "extra-children")]
23342        {
23343            emit_idx += 1;
23344        }
23345        #[cfg(feature = "extra-children")]
23346        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23347            extra_iter
23348                .next()
23349                .unwrap()
23350                .node
23351                .write_to(writer)
23352                .map_err(SerializeError::from)?;
23353        }
23354        #[cfg(feature = "sml-styling")]
23355        if let Some(ref val) = self.u {
23356            val.write_element("u", writer)?;
23357        }
23358        #[cfg(feature = "extra-children")]
23359        {
23360            emit_idx += 1;
23361        }
23362        #[cfg(feature = "extra-children")]
23363        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23364            extra_iter
23365                .next()
23366                .unwrap()
23367                .node
23368                .write_to(writer)
23369                .map_err(SerializeError::from)?;
23370        }
23371        #[cfg(feature = "sml-styling")]
23372        if let Some(ref val) = self.vert_align {
23373            val.write_element("vertAlign", writer)?;
23374        }
23375        #[cfg(feature = "extra-children")]
23376        {
23377            emit_idx += 1;
23378        }
23379        #[cfg(feature = "extra-children")]
23380        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23381            extra_iter
23382                .next()
23383                .unwrap()
23384                .node
23385                .write_to(writer)
23386                .map_err(SerializeError::from)?;
23387        }
23388        #[cfg(feature = "sml-styling")]
23389        if let Some(ref val) = self.scheme {
23390            val.write_element("scheme", writer)?;
23391        }
23392        #[cfg(feature = "extra-children")]
23393        {
23394            emit_idx += 1;
23395        }
23396        #[cfg(feature = "extra-children")]
23397        for extra in extra_iter {
23398            extra.node.write_to(writer).map_err(SerializeError::from)?;
23399        }
23400        Ok(())
23401    }
23402
23403    fn is_empty_element(&self) -> bool {
23404        #[cfg(feature = "sml-styling")]
23405        if self.name.is_some() {
23406            return false;
23407        }
23408        #[cfg(feature = "sml-styling")]
23409        if self.charset.is_some() {
23410            return false;
23411        }
23412        #[cfg(feature = "sml-styling")]
23413        if self.family.is_some() {
23414            return false;
23415        }
23416        #[cfg(feature = "sml-styling")]
23417        if self.b.is_some() {
23418            return false;
23419        }
23420        #[cfg(feature = "sml-styling")]
23421        if self.i.is_some() {
23422            return false;
23423        }
23424        #[cfg(feature = "sml-styling")]
23425        if self.strike.is_some() {
23426            return false;
23427        }
23428        #[cfg(feature = "sml-styling")]
23429        if self.outline.is_some() {
23430            return false;
23431        }
23432        #[cfg(feature = "sml-styling")]
23433        if self.shadow.is_some() {
23434            return false;
23435        }
23436        #[cfg(feature = "sml-styling")]
23437        if self.condense.is_some() {
23438            return false;
23439        }
23440        #[cfg(feature = "sml-styling")]
23441        if self.extend.is_some() {
23442            return false;
23443        }
23444        #[cfg(feature = "sml-styling")]
23445        if self.color.is_some() {
23446            return false;
23447        }
23448        #[cfg(feature = "sml-styling")]
23449        if self.sz.is_some() {
23450            return false;
23451        }
23452        #[cfg(feature = "sml-styling")]
23453        if self.u.is_some() {
23454            return false;
23455        }
23456        #[cfg(feature = "sml-styling")]
23457        if self.vert_align.is_some() {
23458            return false;
23459        }
23460        #[cfg(feature = "sml-styling")]
23461        if self.scheme.is_some() {
23462            return false;
23463        }
23464        #[cfg(feature = "extra-children")]
23465        if !self.extra_children.is_empty() {
23466            return false;
23467        }
23468        true
23469    }
23470}
23471
23472impl ToXml for FontFamily {
23473    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23474        #[allow(unused_mut)]
23475        let mut start = start;
23476        {
23477            let val = &self.value;
23478            {
23479                let s = val.to_string();
23480                start.push_attribute(("val", s.as_str()));
23481            }
23482        }
23483        #[cfg(feature = "extra-attrs")]
23484        for (key, value) in &self.extra_attrs {
23485            start.push_attribute((key.as_str(), value.as_str()));
23486        }
23487        start
23488    }
23489
23490    fn is_empty_element(&self) -> bool {
23491        true
23492    }
23493}
23494
23495impl ToXml for SmlAGAutoFormat {
23496    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23497        #[allow(unused_mut)]
23498        let mut start = start;
23499        if let Some(ref val) = self.auto_format_id {
23500            {
23501                let s = val.to_string();
23502                start.push_attribute(("autoFormatId", s.as_str()));
23503            }
23504        }
23505        if let Some(ref val) = self.apply_number_formats {
23506            start.push_attribute(("applyNumberFormats", if *val { "1" } else { "0" }));
23507        }
23508        if let Some(ref val) = self.apply_border_formats {
23509            start.push_attribute(("applyBorderFormats", if *val { "1" } else { "0" }));
23510        }
23511        if let Some(ref val) = self.apply_font_formats {
23512            start.push_attribute(("applyFontFormats", if *val { "1" } else { "0" }));
23513        }
23514        if let Some(ref val) = self.apply_pattern_formats {
23515            start.push_attribute(("applyPatternFormats", if *val { "1" } else { "0" }));
23516        }
23517        if let Some(ref val) = self.apply_alignment_formats {
23518            start.push_attribute(("applyAlignmentFormats", if *val { "1" } else { "0" }));
23519        }
23520        if let Some(ref val) = self.apply_width_height_formats {
23521            start.push_attribute(("applyWidthHeightFormats", if *val { "1" } else { "0" }));
23522        }
23523        #[cfg(feature = "extra-attrs")]
23524        for (key, value) in &self.extra_attrs {
23525            start.push_attribute((key.as_str(), value.as_str()));
23526        }
23527        start
23528    }
23529
23530    fn is_empty_element(&self) -> bool {
23531        true
23532    }
23533}
23534
23535impl ToXml for ExternalLink {
23536    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
23537        #[cfg(feature = "extra-children")]
23538        let mut extra_iter = self.extra_children.iter().peekable();
23539        #[cfg(feature = "extra-children")]
23540        let mut emit_idx: usize = 0;
23541        #[cfg(feature = "extra-children")]
23542        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23543            extra_iter
23544                .next()
23545                .unwrap()
23546                .node
23547                .write_to(writer)
23548                .map_err(SerializeError::from)?;
23549        }
23550        if let Some(ref val) = self.external_book {
23551            val.write_element("externalBook", writer)?;
23552        }
23553        #[cfg(feature = "extra-children")]
23554        {
23555            emit_idx += 1;
23556        }
23557        #[cfg(feature = "extra-children")]
23558        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23559            extra_iter
23560                .next()
23561                .unwrap()
23562                .node
23563                .write_to(writer)
23564                .map_err(SerializeError::from)?;
23565        }
23566        if let Some(ref val) = self.dde_link {
23567            val.write_element("ddeLink", writer)?;
23568        }
23569        #[cfg(feature = "extra-children")]
23570        {
23571            emit_idx += 1;
23572        }
23573        #[cfg(feature = "extra-children")]
23574        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23575            extra_iter
23576                .next()
23577                .unwrap()
23578                .node
23579                .write_to(writer)
23580                .map_err(SerializeError::from)?;
23581        }
23582        if let Some(ref val) = self.ole_link {
23583            val.write_element("oleLink", writer)?;
23584        }
23585        #[cfg(feature = "extra-children")]
23586        {
23587            emit_idx += 1;
23588        }
23589        #[cfg(feature = "extra-children")]
23590        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23591            extra_iter
23592                .next()
23593                .unwrap()
23594                .node
23595                .write_to(writer)
23596                .map_err(SerializeError::from)?;
23597        }
23598        if let Some(ref val) = self.extension_list {
23599            val.write_element("extLst", writer)?;
23600        }
23601        #[cfg(feature = "extra-children")]
23602        {
23603            emit_idx += 1;
23604        }
23605        #[cfg(feature = "extra-children")]
23606        for extra in extra_iter {
23607            extra.node.write_to(writer).map_err(SerializeError::from)?;
23608        }
23609        Ok(())
23610    }
23611
23612    fn is_empty_element(&self) -> bool {
23613        if self.external_book.is_some() {
23614            return false;
23615        }
23616        if self.dde_link.is_some() {
23617            return false;
23618        }
23619        if self.ole_link.is_some() {
23620            return false;
23621        }
23622        if self.extension_list.is_some() {
23623            return false;
23624        }
23625        #[cfg(feature = "extra-children")]
23626        if !self.extra_children.is_empty() {
23627            return false;
23628        }
23629        true
23630    }
23631}
23632
23633impl ToXml for ExternalBook {
23634    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23635        #[allow(unused_mut)]
23636        let mut start = start;
23637        {
23638            let val = &self.id;
23639            start.push_attribute(("r:id", val.as_str()));
23640        }
23641        #[cfg(feature = "extra-attrs")]
23642        for (key, value) in &self.extra_attrs {
23643            start.push_attribute((key.as_str(), value.as_str()));
23644        }
23645        start
23646    }
23647
23648    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
23649        #[cfg(feature = "extra-children")]
23650        let mut extra_iter = self.extra_children.iter().peekable();
23651        #[cfg(feature = "extra-children")]
23652        let mut emit_idx: usize = 0;
23653        #[cfg(feature = "extra-children")]
23654        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23655            extra_iter
23656                .next()
23657                .unwrap()
23658                .node
23659                .write_to(writer)
23660                .map_err(SerializeError::from)?;
23661        }
23662        if let Some(ref val) = self.sheet_names {
23663            val.write_element("sheetNames", writer)?;
23664        }
23665        #[cfg(feature = "extra-children")]
23666        {
23667            emit_idx += 1;
23668        }
23669        #[cfg(feature = "extra-children")]
23670        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23671            extra_iter
23672                .next()
23673                .unwrap()
23674                .node
23675                .write_to(writer)
23676                .map_err(SerializeError::from)?;
23677        }
23678        if let Some(ref val) = self.defined_names {
23679            val.write_element("definedNames", writer)?;
23680        }
23681        #[cfg(feature = "extra-children")]
23682        {
23683            emit_idx += 1;
23684        }
23685        #[cfg(feature = "extra-children")]
23686        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23687            extra_iter
23688                .next()
23689                .unwrap()
23690                .node
23691                .write_to(writer)
23692                .map_err(SerializeError::from)?;
23693        }
23694        if let Some(ref val) = self.sheet_data_set {
23695            val.write_element("sheetDataSet", writer)?;
23696        }
23697        #[cfg(feature = "extra-children")]
23698        {
23699            emit_idx += 1;
23700        }
23701        #[cfg(feature = "extra-children")]
23702        for extra in extra_iter {
23703            extra.node.write_to(writer).map_err(SerializeError::from)?;
23704        }
23705        Ok(())
23706    }
23707
23708    fn is_empty_element(&self) -> bool {
23709        if self.sheet_names.is_some() {
23710            return false;
23711        }
23712        if self.defined_names.is_some() {
23713            return false;
23714        }
23715        if self.sheet_data_set.is_some() {
23716            return false;
23717        }
23718        #[cfg(feature = "extra-children")]
23719        if !self.extra_children.is_empty() {
23720            return false;
23721        }
23722        true
23723    }
23724}
23725
23726impl ToXml for CTExternalSheetNames {
23727    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
23728        #[cfg(feature = "extra-children")]
23729        let mut extra_iter = self.extra_children.iter().peekable();
23730        #[cfg(feature = "extra-children")]
23731        let mut emit_idx: usize = 0;
23732        for item in &self.sheet_name {
23733            #[cfg(feature = "extra-children")]
23734            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23735                extra_iter
23736                    .next()
23737                    .unwrap()
23738                    .node
23739                    .write_to(writer)
23740                    .map_err(SerializeError::from)?;
23741            }
23742            item.write_element("sheetName", writer)?;
23743            #[cfg(feature = "extra-children")]
23744            {
23745                emit_idx += 1;
23746            }
23747        }
23748        #[cfg(feature = "extra-children")]
23749        for extra in extra_iter {
23750            extra.node.write_to(writer).map_err(SerializeError::from)?;
23751        }
23752        Ok(())
23753    }
23754
23755    fn is_empty_element(&self) -> bool {
23756        if !self.sheet_name.is_empty() {
23757            return false;
23758        }
23759        #[cfg(feature = "extra-children")]
23760        if !self.extra_children.is_empty() {
23761            return false;
23762        }
23763        true
23764    }
23765}
23766
23767impl ToXml for CTExternalSheetName {
23768    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23769        #[allow(unused_mut)]
23770        let mut start = start;
23771        if let Some(ref val) = self.value {
23772            start.push_attribute(("val", val.as_str()));
23773        }
23774        #[cfg(feature = "extra-attrs")]
23775        for (key, value) in &self.extra_attrs {
23776            start.push_attribute((key.as_str(), value.as_str()));
23777        }
23778        start
23779    }
23780
23781    fn is_empty_element(&self) -> bool {
23782        true
23783    }
23784}
23785
23786impl ToXml for CTExternalDefinedNames {
23787    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
23788        #[cfg(feature = "extra-children")]
23789        let mut extra_iter = self.extra_children.iter().peekable();
23790        #[cfg(feature = "extra-children")]
23791        let mut emit_idx: usize = 0;
23792        for item in &self.defined_name {
23793            #[cfg(feature = "extra-children")]
23794            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23795                extra_iter
23796                    .next()
23797                    .unwrap()
23798                    .node
23799                    .write_to(writer)
23800                    .map_err(SerializeError::from)?;
23801            }
23802            item.write_element("definedName", writer)?;
23803            #[cfg(feature = "extra-children")]
23804            {
23805                emit_idx += 1;
23806            }
23807        }
23808        #[cfg(feature = "extra-children")]
23809        for extra in extra_iter {
23810            extra.node.write_to(writer).map_err(SerializeError::from)?;
23811        }
23812        Ok(())
23813    }
23814
23815    fn is_empty_element(&self) -> bool {
23816        if !self.defined_name.is_empty() {
23817            return false;
23818        }
23819        #[cfg(feature = "extra-children")]
23820        if !self.extra_children.is_empty() {
23821            return false;
23822        }
23823        true
23824    }
23825}
23826
23827impl ToXml for CTExternalDefinedName {
23828    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23829        #[allow(unused_mut)]
23830        let mut start = start;
23831        {
23832            let val = &self.name;
23833            start.push_attribute(("name", val.as_str()));
23834        }
23835        if let Some(ref val) = self.refers_to {
23836            start.push_attribute(("refersTo", val.as_str()));
23837        }
23838        if let Some(ref val) = self.sheet_id {
23839            {
23840                let s = val.to_string();
23841                start.push_attribute(("sheetId", s.as_str()));
23842            }
23843        }
23844        #[cfg(feature = "extra-attrs")]
23845        for (key, value) in &self.extra_attrs {
23846            start.push_attribute((key.as_str(), value.as_str()));
23847        }
23848        start
23849    }
23850
23851    fn is_empty_element(&self) -> bool {
23852        true
23853    }
23854}
23855
23856impl ToXml for ExternalSheetDataSet {
23857    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
23858        #[cfg(feature = "extra-children")]
23859        let mut extra_iter = self.extra_children.iter().peekable();
23860        #[cfg(feature = "extra-children")]
23861        let mut emit_idx: usize = 0;
23862        for item in &self.sheet_data {
23863            #[cfg(feature = "extra-children")]
23864            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23865                extra_iter
23866                    .next()
23867                    .unwrap()
23868                    .node
23869                    .write_to(writer)
23870                    .map_err(SerializeError::from)?;
23871            }
23872            item.write_element("sheetData", writer)?;
23873            #[cfg(feature = "extra-children")]
23874            {
23875                emit_idx += 1;
23876            }
23877        }
23878        #[cfg(feature = "extra-children")]
23879        for extra in extra_iter {
23880            extra.node.write_to(writer).map_err(SerializeError::from)?;
23881        }
23882        Ok(())
23883    }
23884
23885    fn is_empty_element(&self) -> bool {
23886        if !self.sheet_data.is_empty() {
23887            return false;
23888        }
23889        #[cfg(feature = "extra-children")]
23890        if !self.extra_children.is_empty() {
23891            return false;
23892        }
23893        true
23894    }
23895}
23896
23897impl ToXml for ExternalSheetData {
23898    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23899        #[allow(unused_mut)]
23900        let mut start = start;
23901        {
23902            let val = &self.sheet_id;
23903            {
23904                let s = val.to_string();
23905                start.push_attribute(("sheetId", s.as_str()));
23906            }
23907        }
23908        if let Some(ref val) = self.refresh_error {
23909            start.push_attribute(("refreshError", if *val { "1" } else { "0" }));
23910        }
23911        #[cfg(feature = "extra-attrs")]
23912        for (key, value) in &self.extra_attrs {
23913            start.push_attribute((key.as_str(), value.as_str()));
23914        }
23915        start
23916    }
23917
23918    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
23919        #[cfg(feature = "extra-children")]
23920        let mut extra_iter = self.extra_children.iter().peekable();
23921        #[cfg(feature = "extra-children")]
23922        let mut emit_idx: usize = 0;
23923        for item in &self.row {
23924            #[cfg(feature = "extra-children")]
23925            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23926                extra_iter
23927                    .next()
23928                    .unwrap()
23929                    .node
23930                    .write_to(writer)
23931                    .map_err(SerializeError::from)?;
23932            }
23933            item.write_element("row", writer)?;
23934            #[cfg(feature = "extra-children")]
23935            {
23936                emit_idx += 1;
23937            }
23938        }
23939        #[cfg(feature = "extra-children")]
23940        for extra in extra_iter {
23941            extra.node.write_to(writer).map_err(SerializeError::from)?;
23942        }
23943        Ok(())
23944    }
23945
23946    fn is_empty_element(&self) -> bool {
23947        if !self.row.is_empty() {
23948            return false;
23949        }
23950        #[cfg(feature = "extra-children")]
23951        if !self.extra_children.is_empty() {
23952            return false;
23953        }
23954        true
23955    }
23956}
23957
23958impl ToXml for ExternalRow {
23959    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
23960        #[allow(unused_mut)]
23961        let mut start = start;
23962        {
23963            let val = &self.reference;
23964            {
23965                let s = val.to_string();
23966                start.push_attribute(("r", s.as_str()));
23967            }
23968        }
23969        #[cfg(feature = "extra-attrs")]
23970        for (key, value) in &self.extra_attrs {
23971            start.push_attribute((key.as_str(), value.as_str()));
23972        }
23973        start
23974    }
23975
23976    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
23977        #[cfg(feature = "extra-children")]
23978        let mut extra_iter = self.extra_children.iter().peekable();
23979        #[cfg(feature = "extra-children")]
23980        let mut emit_idx: usize = 0;
23981        for item in &self.cell {
23982            #[cfg(feature = "extra-children")]
23983            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
23984                extra_iter
23985                    .next()
23986                    .unwrap()
23987                    .node
23988                    .write_to(writer)
23989                    .map_err(SerializeError::from)?;
23990            }
23991            item.write_element("cell", writer)?;
23992            #[cfg(feature = "extra-children")]
23993            {
23994                emit_idx += 1;
23995            }
23996        }
23997        #[cfg(feature = "extra-children")]
23998        for extra in extra_iter {
23999            extra.node.write_to(writer).map_err(SerializeError::from)?;
24000        }
24001        Ok(())
24002    }
24003
24004    fn is_empty_element(&self) -> bool {
24005        if !self.cell.is_empty() {
24006            return false;
24007        }
24008        #[cfg(feature = "extra-children")]
24009        if !self.extra_children.is_empty() {
24010            return false;
24011        }
24012        true
24013    }
24014}
24015
24016impl ToXml for ExternalCell {
24017    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24018        #[allow(unused_mut)]
24019        let mut start = start;
24020        if let Some(ref val) = self.reference {
24021            start.push_attribute(("r", val.as_str()));
24022        }
24023        if let Some(ref val) = self.cell_type {
24024            {
24025                let s = val.to_string();
24026                start.push_attribute(("t", s.as_str()));
24027            }
24028        }
24029        if let Some(ref val) = self.vm {
24030            {
24031                let s = val.to_string();
24032                start.push_attribute(("vm", s.as_str()));
24033            }
24034        }
24035        #[cfg(feature = "extra-attrs")]
24036        for (key, value) in &self.extra_attrs {
24037            start.push_attribute((key.as_str(), value.as_str()));
24038        }
24039        start
24040    }
24041
24042    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24043        #[cfg(feature = "extra-children")]
24044        let mut extra_iter = self.extra_children.iter().peekable();
24045        #[cfg(feature = "extra-children")]
24046        let mut emit_idx: usize = 0;
24047        #[cfg(feature = "extra-children")]
24048        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24049            extra_iter
24050                .next()
24051                .unwrap()
24052                .node
24053                .write_to(writer)
24054                .map_err(SerializeError::from)?;
24055        }
24056        if let Some(ref val) = self.value {
24057            {
24058                let start = BytesStart::new("v");
24059                writer.write_event(Event::Start(start))?;
24060                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
24061                writer.write_event(Event::End(BytesEnd::new("v")))?;
24062            }
24063        }
24064        #[cfg(feature = "extra-children")]
24065        {
24066            emit_idx += 1;
24067        }
24068        #[cfg(feature = "extra-children")]
24069        for extra in extra_iter {
24070            extra.node.write_to(writer).map_err(SerializeError::from)?;
24071        }
24072        Ok(())
24073    }
24074
24075    fn is_empty_element(&self) -> bool {
24076        if self.value.is_some() {
24077            return false;
24078        }
24079        #[cfg(feature = "extra-children")]
24080        if !self.extra_children.is_empty() {
24081            return false;
24082        }
24083        true
24084    }
24085}
24086
24087impl ToXml for DdeLink {
24088    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24089        #[allow(unused_mut)]
24090        let mut start = start;
24091        {
24092            let val = &self.dde_service;
24093            start.push_attribute(("ddeService", val.as_str()));
24094        }
24095        {
24096            let val = &self.dde_topic;
24097            start.push_attribute(("ddeTopic", val.as_str()));
24098        }
24099        #[cfg(feature = "extra-attrs")]
24100        for (key, value) in &self.extra_attrs {
24101            start.push_attribute((key.as_str(), value.as_str()));
24102        }
24103        start
24104    }
24105
24106    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24107        #[cfg(feature = "extra-children")]
24108        let mut extra_iter = self.extra_children.iter().peekable();
24109        #[cfg(feature = "extra-children")]
24110        let mut emit_idx: usize = 0;
24111        #[cfg(feature = "extra-children")]
24112        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24113            extra_iter
24114                .next()
24115                .unwrap()
24116                .node
24117                .write_to(writer)
24118                .map_err(SerializeError::from)?;
24119        }
24120        if let Some(ref val) = self.dde_items {
24121            val.write_element("ddeItems", writer)?;
24122        }
24123        #[cfg(feature = "extra-children")]
24124        {
24125            emit_idx += 1;
24126        }
24127        #[cfg(feature = "extra-children")]
24128        for extra in extra_iter {
24129            extra.node.write_to(writer).map_err(SerializeError::from)?;
24130        }
24131        Ok(())
24132    }
24133
24134    fn is_empty_element(&self) -> bool {
24135        if self.dde_items.is_some() {
24136            return false;
24137        }
24138        #[cfg(feature = "extra-children")]
24139        if !self.extra_children.is_empty() {
24140            return false;
24141        }
24142        true
24143    }
24144}
24145
24146impl ToXml for DdeItems {
24147    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24148        #[cfg(feature = "extra-children")]
24149        let mut extra_iter = self.extra_children.iter().peekable();
24150        #[cfg(feature = "extra-children")]
24151        let mut emit_idx: usize = 0;
24152        for item in &self.dde_item {
24153            #[cfg(feature = "extra-children")]
24154            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24155                extra_iter
24156                    .next()
24157                    .unwrap()
24158                    .node
24159                    .write_to(writer)
24160                    .map_err(SerializeError::from)?;
24161            }
24162            item.write_element("ddeItem", writer)?;
24163            #[cfg(feature = "extra-children")]
24164            {
24165                emit_idx += 1;
24166            }
24167        }
24168        #[cfg(feature = "extra-children")]
24169        for extra in extra_iter {
24170            extra.node.write_to(writer).map_err(SerializeError::from)?;
24171        }
24172        Ok(())
24173    }
24174
24175    fn is_empty_element(&self) -> bool {
24176        if !self.dde_item.is_empty() {
24177            return false;
24178        }
24179        #[cfg(feature = "extra-children")]
24180        if !self.extra_children.is_empty() {
24181            return false;
24182        }
24183        true
24184    }
24185}
24186
24187impl ToXml for DdeItem {
24188    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24189        #[allow(unused_mut)]
24190        let mut start = start;
24191        if let Some(ref val) = self.name {
24192            start.push_attribute(("name", val.as_str()));
24193        }
24194        if let Some(ref val) = self.ole {
24195            start.push_attribute(("ole", if *val { "1" } else { "0" }));
24196        }
24197        if let Some(ref val) = self.advise {
24198            start.push_attribute(("advise", if *val { "1" } else { "0" }));
24199        }
24200        if let Some(ref val) = self.prefer_pic {
24201            start.push_attribute(("preferPic", if *val { "1" } else { "0" }));
24202        }
24203        #[cfg(feature = "extra-attrs")]
24204        for (key, value) in &self.extra_attrs {
24205            start.push_attribute((key.as_str(), value.as_str()));
24206        }
24207        start
24208    }
24209
24210    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24211        #[cfg(feature = "extra-children")]
24212        let mut extra_iter = self.extra_children.iter().peekable();
24213        #[cfg(feature = "extra-children")]
24214        let mut emit_idx: usize = 0;
24215        #[cfg(feature = "extra-children")]
24216        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24217            extra_iter
24218                .next()
24219                .unwrap()
24220                .node
24221                .write_to(writer)
24222                .map_err(SerializeError::from)?;
24223        }
24224        if let Some(ref val) = self.values {
24225            val.write_element("values", writer)?;
24226        }
24227        #[cfg(feature = "extra-children")]
24228        {
24229            emit_idx += 1;
24230        }
24231        #[cfg(feature = "extra-children")]
24232        for extra in extra_iter {
24233            extra.node.write_to(writer).map_err(SerializeError::from)?;
24234        }
24235        Ok(())
24236    }
24237
24238    fn is_empty_element(&self) -> bool {
24239        if self.values.is_some() {
24240            return false;
24241        }
24242        #[cfg(feature = "extra-children")]
24243        if !self.extra_children.is_empty() {
24244            return false;
24245        }
24246        true
24247    }
24248}
24249
24250impl ToXml for CTDdeValues {
24251    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24252        #[allow(unused_mut)]
24253        let mut start = start;
24254        if let Some(ref val) = self.rows {
24255            {
24256                let s = val.to_string();
24257                start.push_attribute(("rows", s.as_str()));
24258            }
24259        }
24260        if let Some(ref val) = self.cols {
24261            {
24262                let s = val.to_string();
24263                start.push_attribute(("cols", s.as_str()));
24264            }
24265        }
24266        #[cfg(feature = "extra-attrs")]
24267        for (key, value) in &self.extra_attrs {
24268            start.push_attribute((key.as_str(), value.as_str()));
24269        }
24270        start
24271    }
24272
24273    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24274        #[cfg(feature = "extra-children")]
24275        let mut extra_iter = self.extra_children.iter().peekable();
24276        #[cfg(feature = "extra-children")]
24277        let mut emit_idx: usize = 0;
24278        for item in &self.value {
24279            #[cfg(feature = "extra-children")]
24280            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24281                extra_iter
24282                    .next()
24283                    .unwrap()
24284                    .node
24285                    .write_to(writer)
24286                    .map_err(SerializeError::from)?;
24287            }
24288            item.write_element("value", writer)?;
24289            #[cfg(feature = "extra-children")]
24290            {
24291                emit_idx += 1;
24292            }
24293        }
24294        #[cfg(feature = "extra-children")]
24295        for extra in extra_iter {
24296            extra.node.write_to(writer).map_err(SerializeError::from)?;
24297        }
24298        Ok(())
24299    }
24300
24301    fn is_empty_element(&self) -> bool {
24302        if !self.value.is_empty() {
24303            return false;
24304        }
24305        #[cfg(feature = "extra-children")]
24306        if !self.extra_children.is_empty() {
24307            return false;
24308        }
24309        true
24310    }
24311}
24312
24313impl ToXml for CTDdeValue {
24314    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24315        #[allow(unused_mut)]
24316        let mut start = start;
24317        if let Some(ref val) = self.cell_type {
24318            {
24319                let s = val.to_string();
24320                start.push_attribute(("t", s.as_str()));
24321            }
24322        }
24323        #[cfg(feature = "extra-attrs")]
24324        for (key, value) in &self.extra_attrs {
24325            start.push_attribute((key.as_str(), value.as_str()));
24326        }
24327        start
24328    }
24329
24330    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24331        #[cfg(feature = "extra-children")]
24332        let mut extra_iter = self.extra_children.iter().peekable();
24333        #[cfg(feature = "extra-children")]
24334        let mut emit_idx: usize = 0;
24335        #[cfg(feature = "extra-children")]
24336        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24337            extra_iter
24338                .next()
24339                .unwrap()
24340                .node
24341                .write_to(writer)
24342                .map_err(SerializeError::from)?;
24343        }
24344        {
24345            let val = &self.value;
24346            {
24347                let start = BytesStart::new("val");
24348                writer.write_event(Event::Start(start))?;
24349                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
24350                writer.write_event(Event::End(BytesEnd::new("val")))?;
24351            }
24352        }
24353        #[cfg(feature = "extra-children")]
24354        {
24355            emit_idx += 1;
24356        }
24357        #[cfg(feature = "extra-children")]
24358        for extra in extra_iter {
24359            extra.node.write_to(writer).map_err(SerializeError::from)?;
24360        }
24361        Ok(())
24362    }
24363
24364    fn is_empty_element(&self) -> bool {
24365        false
24366    }
24367}
24368
24369impl ToXml for OleLink {
24370    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24371        #[allow(unused_mut)]
24372        let mut start = start;
24373        {
24374            let val = &self.id;
24375            start.push_attribute(("r:id", val.as_str()));
24376        }
24377        {
24378            let val = &self.prog_id;
24379            start.push_attribute(("progId", val.as_str()));
24380        }
24381        #[cfg(feature = "extra-attrs")]
24382        for (key, value) in &self.extra_attrs {
24383            start.push_attribute((key.as_str(), value.as_str()));
24384        }
24385        start
24386    }
24387
24388    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24389        #[cfg(feature = "extra-children")]
24390        let mut extra_iter = self.extra_children.iter().peekable();
24391        #[cfg(feature = "extra-children")]
24392        let mut emit_idx: usize = 0;
24393        #[cfg(feature = "extra-children")]
24394        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24395            extra_iter
24396                .next()
24397                .unwrap()
24398                .node
24399                .write_to(writer)
24400                .map_err(SerializeError::from)?;
24401        }
24402        if let Some(ref val) = self.ole_items {
24403            val.write_element("oleItems", writer)?;
24404        }
24405        #[cfg(feature = "extra-children")]
24406        {
24407            emit_idx += 1;
24408        }
24409        #[cfg(feature = "extra-children")]
24410        for extra in extra_iter {
24411            extra.node.write_to(writer).map_err(SerializeError::from)?;
24412        }
24413        Ok(())
24414    }
24415
24416    fn is_empty_element(&self) -> bool {
24417        if self.ole_items.is_some() {
24418            return false;
24419        }
24420        #[cfg(feature = "extra-children")]
24421        if !self.extra_children.is_empty() {
24422            return false;
24423        }
24424        true
24425    }
24426}
24427
24428impl ToXml for OleItems {
24429    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24430        #[cfg(feature = "extra-children")]
24431        let mut extra_iter = self.extra_children.iter().peekable();
24432        #[cfg(feature = "extra-children")]
24433        let mut emit_idx: usize = 0;
24434        for item in &self.ole_item {
24435            #[cfg(feature = "extra-children")]
24436            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24437                extra_iter
24438                    .next()
24439                    .unwrap()
24440                    .node
24441                    .write_to(writer)
24442                    .map_err(SerializeError::from)?;
24443            }
24444            item.write_element("oleItem", writer)?;
24445            #[cfg(feature = "extra-children")]
24446            {
24447                emit_idx += 1;
24448            }
24449        }
24450        #[cfg(feature = "extra-children")]
24451        for extra in extra_iter {
24452            extra.node.write_to(writer).map_err(SerializeError::from)?;
24453        }
24454        Ok(())
24455    }
24456
24457    fn is_empty_element(&self) -> bool {
24458        if !self.ole_item.is_empty() {
24459            return false;
24460        }
24461        #[cfg(feature = "extra-children")]
24462        if !self.extra_children.is_empty() {
24463            return false;
24464        }
24465        true
24466    }
24467}
24468
24469impl ToXml for OleItem {
24470    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24471        #[allow(unused_mut)]
24472        let mut start = start;
24473        {
24474            let val = &self.name;
24475            start.push_attribute(("name", val.as_str()));
24476        }
24477        if let Some(ref val) = self.icon {
24478            start.push_attribute(("icon", if *val { "1" } else { "0" }));
24479        }
24480        if let Some(ref val) = self.advise {
24481            start.push_attribute(("advise", if *val { "1" } else { "0" }));
24482        }
24483        if let Some(ref val) = self.prefer_pic {
24484            start.push_attribute(("preferPic", if *val { "1" } else { "0" }));
24485        }
24486        #[cfg(feature = "extra-attrs")]
24487        for (key, value) in &self.extra_attrs {
24488            start.push_attribute((key.as_str(), value.as_str()));
24489        }
24490        start
24491    }
24492
24493    fn is_empty_element(&self) -> bool {
24494        true
24495    }
24496}
24497
24498impl ToXml for Table {
24499    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24500        #[allow(unused_mut)]
24501        let mut start = start;
24502        #[cfg(feature = "sml-tables")]
24503        {
24504            let val = &self.id;
24505            {
24506                let s = val.to_string();
24507                start.push_attribute(("id", s.as_str()));
24508            }
24509        }
24510        #[cfg(feature = "sml-tables")]
24511        if let Some(ref val) = self.name {
24512            start.push_attribute(("name", val.as_str()));
24513        }
24514        #[cfg(feature = "sml-tables")]
24515        {
24516            let val = &self.display_name;
24517            start.push_attribute(("displayName", val.as_str()));
24518        }
24519        #[cfg(feature = "sml-tables")]
24520        if let Some(ref val) = self.comment {
24521            start.push_attribute(("comment", val.as_str()));
24522        }
24523        #[cfg(feature = "sml-tables")]
24524        {
24525            let val = &self.reference;
24526            start.push_attribute(("ref", val.as_str()));
24527        }
24528        #[cfg(feature = "sml-tables")]
24529        if let Some(ref val) = self.table_type {
24530            {
24531                let s = val.to_string();
24532                start.push_attribute(("tableType", s.as_str()));
24533            }
24534        }
24535        #[cfg(feature = "sml-tables")]
24536        if let Some(ref val) = self.header_row_count {
24537            {
24538                let s = val.to_string();
24539                start.push_attribute(("headerRowCount", s.as_str()));
24540            }
24541        }
24542        #[cfg(feature = "sml-tables")]
24543        if let Some(ref val) = self.insert_row {
24544            start.push_attribute(("insertRow", if *val { "1" } else { "0" }));
24545        }
24546        #[cfg(feature = "sml-tables")]
24547        if let Some(ref val) = self.insert_row_shift {
24548            start.push_attribute(("insertRowShift", if *val { "1" } else { "0" }));
24549        }
24550        #[cfg(feature = "sml-tables")]
24551        if let Some(ref val) = self.totals_row_count {
24552            {
24553                let s = val.to_string();
24554                start.push_attribute(("totalsRowCount", s.as_str()));
24555            }
24556        }
24557        #[cfg(feature = "sml-tables")]
24558        if let Some(ref val) = self.totals_row_shown {
24559            start.push_attribute(("totalsRowShown", if *val { "1" } else { "0" }));
24560        }
24561        #[cfg(feature = "sml-tables")]
24562        if let Some(ref val) = self.published {
24563            start.push_attribute(("published", if *val { "1" } else { "0" }));
24564        }
24565        #[cfg(feature = "sml-tables")]
24566        if let Some(ref val) = self.header_row_dxf_id {
24567            {
24568                let s = val.to_string();
24569                start.push_attribute(("headerRowDxfId", s.as_str()));
24570            }
24571        }
24572        #[cfg(feature = "sml-tables")]
24573        if let Some(ref val) = self.data_dxf_id {
24574            {
24575                let s = val.to_string();
24576                start.push_attribute(("dataDxfId", s.as_str()));
24577            }
24578        }
24579        #[cfg(feature = "sml-tables")]
24580        if let Some(ref val) = self.totals_row_dxf_id {
24581            {
24582                let s = val.to_string();
24583                start.push_attribute(("totalsRowDxfId", s.as_str()));
24584            }
24585        }
24586        #[cfg(feature = "sml-tables")]
24587        if let Some(ref val) = self.header_row_border_dxf_id {
24588            {
24589                let s = val.to_string();
24590                start.push_attribute(("headerRowBorderDxfId", s.as_str()));
24591            }
24592        }
24593        #[cfg(feature = "sml-tables")]
24594        if let Some(ref val) = self.table_border_dxf_id {
24595            {
24596                let s = val.to_string();
24597                start.push_attribute(("tableBorderDxfId", s.as_str()));
24598            }
24599        }
24600        #[cfg(feature = "sml-tables")]
24601        if let Some(ref val) = self.totals_row_border_dxf_id {
24602            {
24603                let s = val.to_string();
24604                start.push_attribute(("totalsRowBorderDxfId", s.as_str()));
24605            }
24606        }
24607        #[cfg(feature = "sml-tables")]
24608        if let Some(ref val) = self.header_row_cell_style {
24609            start.push_attribute(("headerRowCellStyle", val.as_str()));
24610        }
24611        #[cfg(feature = "sml-tables")]
24612        if let Some(ref val) = self.data_cell_style {
24613            start.push_attribute(("dataCellStyle", val.as_str()));
24614        }
24615        #[cfg(feature = "sml-tables")]
24616        if let Some(ref val) = self.totals_row_cell_style {
24617            start.push_attribute(("totalsRowCellStyle", val.as_str()));
24618        }
24619        #[cfg(feature = "sml-tables")]
24620        if let Some(ref val) = self.connection_id {
24621            {
24622                let s = val.to_string();
24623                start.push_attribute(("connectionId", s.as_str()));
24624            }
24625        }
24626        #[cfg(feature = "extra-attrs")]
24627        for (key, value) in &self.extra_attrs {
24628            start.push_attribute((key.as_str(), value.as_str()));
24629        }
24630        start
24631    }
24632
24633    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24634        #[cfg(feature = "extra-children")]
24635        let mut extra_iter = self.extra_children.iter().peekable();
24636        #[cfg(feature = "extra-children")]
24637        let mut emit_idx: usize = 0;
24638        #[cfg(feature = "extra-children")]
24639        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24640            extra_iter
24641                .next()
24642                .unwrap()
24643                .node
24644                .write_to(writer)
24645                .map_err(SerializeError::from)?;
24646        }
24647        #[cfg(feature = "sml-tables")]
24648        if let Some(ref val) = self.auto_filter {
24649            val.write_element("autoFilter", writer)?;
24650        }
24651        #[cfg(feature = "extra-children")]
24652        {
24653            emit_idx += 1;
24654        }
24655        #[cfg(feature = "extra-children")]
24656        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24657            extra_iter
24658                .next()
24659                .unwrap()
24660                .node
24661                .write_to(writer)
24662                .map_err(SerializeError::from)?;
24663        }
24664        #[cfg(feature = "sml-tables")]
24665        if let Some(ref val) = self.sort_state {
24666            val.write_element("sortState", writer)?;
24667        }
24668        #[cfg(feature = "extra-children")]
24669        {
24670            emit_idx += 1;
24671        }
24672        #[cfg(feature = "extra-children")]
24673        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24674            extra_iter
24675                .next()
24676                .unwrap()
24677                .node
24678                .write_to(writer)
24679                .map_err(SerializeError::from)?;
24680        }
24681        #[cfg(feature = "sml-tables")]
24682        {
24683            let val = &self.table_columns;
24684            val.write_element("tableColumns", writer)?;
24685        }
24686        #[cfg(feature = "extra-children")]
24687        {
24688            emit_idx += 1;
24689        }
24690        #[cfg(feature = "extra-children")]
24691        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24692            extra_iter
24693                .next()
24694                .unwrap()
24695                .node
24696                .write_to(writer)
24697                .map_err(SerializeError::from)?;
24698        }
24699        #[cfg(feature = "sml-tables")]
24700        if let Some(ref val) = self.table_style_info {
24701            val.write_element("tableStyleInfo", writer)?;
24702        }
24703        #[cfg(feature = "extra-children")]
24704        {
24705            emit_idx += 1;
24706        }
24707        #[cfg(feature = "extra-children")]
24708        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24709            extra_iter
24710                .next()
24711                .unwrap()
24712                .node
24713                .write_to(writer)
24714                .map_err(SerializeError::from)?;
24715        }
24716        #[cfg(feature = "sml-extensions")]
24717        if let Some(ref val) = self.extension_list {
24718            val.write_element("extLst", writer)?;
24719        }
24720        #[cfg(feature = "extra-children")]
24721        {
24722            emit_idx += 1;
24723        }
24724        #[cfg(feature = "extra-children")]
24725        for extra in extra_iter {
24726            extra.node.write_to(writer).map_err(SerializeError::from)?;
24727        }
24728        Ok(())
24729    }
24730
24731    fn is_empty_element(&self) -> bool {
24732        #[cfg(feature = "sml-tables")]
24733        if self.auto_filter.is_some() {
24734            return false;
24735        }
24736        #[cfg(feature = "sml-tables")]
24737        if self.sort_state.is_some() {
24738            return false;
24739        }
24740        #[cfg(feature = "sml-tables")]
24741        return false;
24742        #[cfg(feature = "sml-tables")]
24743        if self.table_style_info.is_some() {
24744            return false;
24745        }
24746        #[cfg(feature = "sml-extensions")]
24747        if self.extension_list.is_some() {
24748            return false;
24749        }
24750        #[cfg(feature = "extra-children")]
24751        if !self.extra_children.is_empty() {
24752            return false;
24753        }
24754        true
24755    }
24756}
24757
24758impl ToXml for TableStyleInfo {
24759    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24760        #[allow(unused_mut)]
24761        let mut start = start;
24762        if let Some(ref val) = self.name {
24763            start.push_attribute(("name", val.as_str()));
24764        }
24765        if let Some(ref val) = self.show_first_column {
24766            start.push_attribute(("showFirstColumn", if *val { "1" } else { "0" }));
24767        }
24768        if let Some(ref val) = self.show_last_column {
24769            start.push_attribute(("showLastColumn", if *val { "1" } else { "0" }));
24770        }
24771        if let Some(ref val) = self.show_row_stripes {
24772            start.push_attribute(("showRowStripes", if *val { "1" } else { "0" }));
24773        }
24774        if let Some(ref val) = self.show_column_stripes {
24775            start.push_attribute(("showColumnStripes", if *val { "1" } else { "0" }));
24776        }
24777        #[cfg(feature = "extra-attrs")]
24778        for (key, value) in &self.extra_attrs {
24779            start.push_attribute((key.as_str(), value.as_str()));
24780        }
24781        start
24782    }
24783
24784    fn is_empty_element(&self) -> bool {
24785        true
24786    }
24787}
24788
24789impl ToXml for TableColumns {
24790    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24791        #[allow(unused_mut)]
24792        let mut start = start;
24793        if let Some(ref val) = self.count {
24794            {
24795                let s = val.to_string();
24796                start.push_attribute(("count", s.as_str()));
24797            }
24798        }
24799        #[cfg(feature = "extra-attrs")]
24800        for (key, value) in &self.extra_attrs {
24801            start.push_attribute((key.as_str(), value.as_str()));
24802        }
24803        start
24804    }
24805
24806    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24807        #[cfg(feature = "extra-children")]
24808        let mut extra_iter = self.extra_children.iter().peekable();
24809        #[cfg(feature = "extra-children")]
24810        let mut emit_idx: usize = 0;
24811        for item in &self.table_column {
24812            #[cfg(feature = "extra-children")]
24813            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24814                extra_iter
24815                    .next()
24816                    .unwrap()
24817                    .node
24818                    .write_to(writer)
24819                    .map_err(SerializeError::from)?;
24820            }
24821            item.write_element("tableColumn", writer)?;
24822            #[cfg(feature = "extra-children")]
24823            {
24824                emit_idx += 1;
24825            }
24826        }
24827        #[cfg(feature = "extra-children")]
24828        for extra in extra_iter {
24829            extra.node.write_to(writer).map_err(SerializeError::from)?;
24830        }
24831        Ok(())
24832    }
24833
24834    fn is_empty_element(&self) -> bool {
24835        if !self.table_column.is_empty() {
24836            return false;
24837        }
24838        #[cfg(feature = "extra-children")]
24839        if !self.extra_children.is_empty() {
24840            return false;
24841        }
24842        true
24843    }
24844}
24845
24846impl ToXml for TableColumn {
24847    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
24848        #[allow(unused_mut)]
24849        let mut start = start;
24850        {
24851            let val = &self.id;
24852            {
24853                let s = val.to_string();
24854                start.push_attribute(("id", s.as_str()));
24855            }
24856        }
24857        if let Some(ref val) = self.unique_name {
24858            start.push_attribute(("uniqueName", val.as_str()));
24859        }
24860        {
24861            let val = &self.name;
24862            start.push_attribute(("name", val.as_str()));
24863        }
24864        if let Some(ref val) = self.totals_row_function {
24865            {
24866                let s = val.to_string();
24867                start.push_attribute(("totalsRowFunction", s.as_str()));
24868            }
24869        }
24870        if let Some(ref val) = self.totals_row_label {
24871            start.push_attribute(("totalsRowLabel", val.as_str()));
24872        }
24873        if let Some(ref val) = self.query_table_field_id {
24874            {
24875                let s = val.to_string();
24876                start.push_attribute(("queryTableFieldId", s.as_str()));
24877            }
24878        }
24879        if let Some(ref val) = self.header_row_dxf_id {
24880            {
24881                let s = val.to_string();
24882                start.push_attribute(("headerRowDxfId", s.as_str()));
24883            }
24884        }
24885        if let Some(ref val) = self.data_dxf_id {
24886            {
24887                let s = val.to_string();
24888                start.push_attribute(("dataDxfId", s.as_str()));
24889            }
24890        }
24891        if let Some(ref val) = self.totals_row_dxf_id {
24892            {
24893                let s = val.to_string();
24894                start.push_attribute(("totalsRowDxfId", s.as_str()));
24895            }
24896        }
24897        if let Some(ref val) = self.header_row_cell_style {
24898            start.push_attribute(("headerRowCellStyle", val.as_str()));
24899        }
24900        if let Some(ref val) = self.data_cell_style {
24901            start.push_attribute(("dataCellStyle", val.as_str()));
24902        }
24903        if let Some(ref val) = self.totals_row_cell_style {
24904            start.push_attribute(("totalsRowCellStyle", val.as_str()));
24905        }
24906        #[cfg(feature = "extra-attrs")]
24907        for (key, value) in &self.extra_attrs {
24908            start.push_attribute((key.as_str(), value.as_str()));
24909        }
24910        start
24911    }
24912
24913    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
24914        #[cfg(feature = "extra-children")]
24915        let mut extra_iter = self.extra_children.iter().peekable();
24916        #[cfg(feature = "extra-children")]
24917        let mut emit_idx: usize = 0;
24918        #[cfg(feature = "extra-children")]
24919        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24920            extra_iter
24921                .next()
24922                .unwrap()
24923                .node
24924                .write_to(writer)
24925                .map_err(SerializeError::from)?;
24926        }
24927        if let Some(ref val) = self.calculated_column_formula {
24928            val.write_element("calculatedColumnFormula", writer)?;
24929        }
24930        #[cfg(feature = "extra-children")]
24931        {
24932            emit_idx += 1;
24933        }
24934        #[cfg(feature = "extra-children")]
24935        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24936            extra_iter
24937                .next()
24938                .unwrap()
24939                .node
24940                .write_to(writer)
24941                .map_err(SerializeError::from)?;
24942        }
24943        if let Some(ref val) = self.totals_row_formula {
24944            val.write_element("totalsRowFormula", writer)?;
24945        }
24946        #[cfg(feature = "extra-children")]
24947        {
24948            emit_idx += 1;
24949        }
24950        #[cfg(feature = "extra-children")]
24951        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24952            extra_iter
24953                .next()
24954                .unwrap()
24955                .node
24956                .write_to(writer)
24957                .map_err(SerializeError::from)?;
24958        }
24959        if let Some(ref val) = self.xml_column_pr {
24960            val.write_element("xmlColumnPr", writer)?;
24961        }
24962        #[cfg(feature = "extra-children")]
24963        {
24964            emit_idx += 1;
24965        }
24966        #[cfg(feature = "extra-children")]
24967        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
24968            extra_iter
24969                .next()
24970                .unwrap()
24971                .node
24972                .write_to(writer)
24973                .map_err(SerializeError::from)?;
24974        }
24975        if let Some(ref val) = self.extension_list {
24976            val.write_element("extLst", writer)?;
24977        }
24978        #[cfg(feature = "extra-children")]
24979        {
24980            emit_idx += 1;
24981        }
24982        #[cfg(feature = "extra-children")]
24983        for extra in extra_iter {
24984            extra.node.write_to(writer).map_err(SerializeError::from)?;
24985        }
24986        Ok(())
24987    }
24988
24989    fn is_empty_element(&self) -> bool {
24990        if self.calculated_column_formula.is_some() {
24991            return false;
24992        }
24993        if self.totals_row_formula.is_some() {
24994            return false;
24995        }
24996        if self.xml_column_pr.is_some() {
24997            return false;
24998        }
24999        if self.extension_list.is_some() {
25000            return false;
25001        }
25002        #[cfg(feature = "extra-children")]
25003        if !self.extra_children.is_empty() {
25004            return false;
25005        }
25006        true
25007    }
25008}
25009
25010impl ToXml for TableFormula {
25011    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
25012        #[allow(unused_mut)]
25013        let mut start = start;
25014        if let Some(ref val) = self.array {
25015            start.push_attribute(("array", if *val { "1" } else { "0" }));
25016        }
25017        #[cfg(feature = "extra-attrs")]
25018        for (key, value) in &self.extra_attrs {
25019            start.push_attribute((key.as_str(), value.as_str()));
25020        }
25021        start
25022    }
25023
25024    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25025        if let Some(ref text) = self.text {
25026            writer.write_event(Event::Text(BytesText::new(text)))?;
25027        }
25028        #[cfg(feature = "extra-children")]
25029        for extra in &self.extra_children {
25030            extra.node.write_to(writer).map_err(SerializeError::from)?;
25031        }
25032        Ok(())
25033    }
25034
25035    fn is_empty_element(&self) -> bool {
25036        if self.text.is_some() {
25037            return false;
25038        }
25039        #[cfg(feature = "extra-children")]
25040        if !self.extra_children.is_empty() {
25041            return false;
25042        }
25043        true
25044    }
25045}
25046
25047impl ToXml for XmlColumnProperties {
25048    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
25049        #[allow(unused_mut)]
25050        let mut start = start;
25051        {
25052            let val = &self.map_id;
25053            {
25054                let s = val.to_string();
25055                start.push_attribute(("mapId", s.as_str()));
25056            }
25057        }
25058        {
25059            let val = &self.xpath;
25060            start.push_attribute(("xpath", val.as_str()));
25061        }
25062        if let Some(ref val) = self.denormalized {
25063            start.push_attribute(("denormalized", if *val { "1" } else { "0" }));
25064        }
25065        {
25066            let val = &self.xml_data_type;
25067            start.push_attribute(("xmlDataType", val.as_str()));
25068        }
25069        #[cfg(feature = "extra-attrs")]
25070        for (key, value) in &self.extra_attrs {
25071            start.push_attribute((key.as_str(), value.as_str()));
25072        }
25073        start
25074    }
25075
25076    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25077        #[cfg(feature = "extra-children")]
25078        let mut extra_iter = self.extra_children.iter().peekable();
25079        #[cfg(feature = "extra-children")]
25080        let mut emit_idx: usize = 0;
25081        #[cfg(feature = "extra-children")]
25082        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25083            extra_iter
25084                .next()
25085                .unwrap()
25086                .node
25087                .write_to(writer)
25088                .map_err(SerializeError::from)?;
25089        }
25090        if let Some(ref val) = self.extension_list {
25091            val.write_element("extLst", writer)?;
25092        }
25093        #[cfg(feature = "extra-children")]
25094        {
25095            emit_idx += 1;
25096        }
25097        #[cfg(feature = "extra-children")]
25098        for extra in extra_iter {
25099            extra.node.write_to(writer).map_err(SerializeError::from)?;
25100        }
25101        Ok(())
25102    }
25103
25104    fn is_empty_element(&self) -> bool {
25105        if self.extension_list.is_some() {
25106            return false;
25107        }
25108        #[cfg(feature = "extra-children")]
25109        if !self.extra_children.is_empty() {
25110            return false;
25111        }
25112        true
25113    }
25114}
25115
25116impl ToXml for CTVolTypes {
25117    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25118        #[cfg(feature = "extra-children")]
25119        let mut extra_iter = self.extra_children.iter().peekable();
25120        #[cfg(feature = "extra-children")]
25121        let mut emit_idx: usize = 0;
25122        for item in &self.vol_type {
25123            #[cfg(feature = "extra-children")]
25124            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25125                extra_iter
25126                    .next()
25127                    .unwrap()
25128                    .node
25129                    .write_to(writer)
25130                    .map_err(SerializeError::from)?;
25131            }
25132            item.write_element("volType", writer)?;
25133            #[cfg(feature = "extra-children")]
25134            {
25135                emit_idx += 1;
25136            }
25137        }
25138        #[cfg(feature = "extra-children")]
25139        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25140            extra_iter
25141                .next()
25142                .unwrap()
25143                .node
25144                .write_to(writer)
25145                .map_err(SerializeError::from)?;
25146        }
25147        if let Some(ref val) = self.extension_list {
25148            val.write_element("extLst", writer)?;
25149        }
25150        #[cfg(feature = "extra-children")]
25151        {
25152            emit_idx += 1;
25153        }
25154        #[cfg(feature = "extra-children")]
25155        for extra in extra_iter {
25156            extra.node.write_to(writer).map_err(SerializeError::from)?;
25157        }
25158        Ok(())
25159    }
25160
25161    fn is_empty_element(&self) -> bool {
25162        if !self.vol_type.is_empty() {
25163            return false;
25164        }
25165        if self.extension_list.is_some() {
25166            return false;
25167        }
25168        #[cfg(feature = "extra-children")]
25169        if !self.extra_children.is_empty() {
25170            return false;
25171        }
25172        true
25173    }
25174}
25175
25176impl ToXml for CTVolType {
25177    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
25178        #[allow(unused_mut)]
25179        let mut start = start;
25180        {
25181            let val = &self.r#type;
25182            {
25183                let s = val.to_string();
25184                start.push_attribute(("type", s.as_str()));
25185            }
25186        }
25187        #[cfg(feature = "extra-attrs")]
25188        for (key, value) in &self.extra_attrs {
25189            start.push_attribute((key.as_str(), value.as_str()));
25190        }
25191        start
25192    }
25193
25194    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25195        #[cfg(feature = "extra-children")]
25196        let mut extra_iter = self.extra_children.iter().peekable();
25197        #[cfg(feature = "extra-children")]
25198        let mut emit_idx: usize = 0;
25199        for item in &self.main {
25200            #[cfg(feature = "extra-children")]
25201            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25202                extra_iter
25203                    .next()
25204                    .unwrap()
25205                    .node
25206                    .write_to(writer)
25207                    .map_err(SerializeError::from)?;
25208            }
25209            item.write_element("main", writer)?;
25210            #[cfg(feature = "extra-children")]
25211            {
25212                emit_idx += 1;
25213            }
25214        }
25215        #[cfg(feature = "extra-children")]
25216        for extra in extra_iter {
25217            extra.node.write_to(writer).map_err(SerializeError::from)?;
25218        }
25219        Ok(())
25220    }
25221
25222    fn is_empty_element(&self) -> bool {
25223        if !self.main.is_empty() {
25224            return false;
25225        }
25226        #[cfg(feature = "extra-children")]
25227        if !self.extra_children.is_empty() {
25228            return false;
25229        }
25230        true
25231    }
25232}
25233
25234impl ToXml for CTVolMain {
25235    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
25236        #[allow(unused_mut)]
25237        let mut start = start;
25238        {
25239            let val = &self.first;
25240            start.push_attribute(("first", val.as_str()));
25241        }
25242        #[cfg(feature = "extra-attrs")]
25243        for (key, value) in &self.extra_attrs {
25244            start.push_attribute((key.as_str(), value.as_str()));
25245        }
25246        start
25247    }
25248
25249    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25250        #[cfg(feature = "extra-children")]
25251        let mut extra_iter = self.extra_children.iter().peekable();
25252        #[cfg(feature = "extra-children")]
25253        let mut emit_idx: usize = 0;
25254        for item in &self.tp {
25255            #[cfg(feature = "extra-children")]
25256            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25257                extra_iter
25258                    .next()
25259                    .unwrap()
25260                    .node
25261                    .write_to(writer)
25262                    .map_err(SerializeError::from)?;
25263            }
25264            item.write_element("tp", writer)?;
25265            #[cfg(feature = "extra-children")]
25266            {
25267                emit_idx += 1;
25268            }
25269        }
25270        #[cfg(feature = "extra-children")]
25271        for extra in extra_iter {
25272            extra.node.write_to(writer).map_err(SerializeError::from)?;
25273        }
25274        Ok(())
25275    }
25276
25277    fn is_empty_element(&self) -> bool {
25278        if !self.tp.is_empty() {
25279            return false;
25280        }
25281        #[cfg(feature = "extra-children")]
25282        if !self.extra_children.is_empty() {
25283            return false;
25284        }
25285        true
25286    }
25287}
25288
25289impl ToXml for CTVolTopic {
25290    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
25291        #[allow(unused_mut)]
25292        let mut start = start;
25293        if let Some(ref val) = self.cell_type {
25294            {
25295                let s = val.to_string();
25296                start.push_attribute(("t", s.as_str()));
25297            }
25298        }
25299        #[cfg(feature = "extra-attrs")]
25300        for (key, value) in &self.extra_attrs {
25301            start.push_attribute((key.as_str(), value.as_str()));
25302        }
25303        start
25304    }
25305
25306    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25307        #[cfg(feature = "extra-children")]
25308        let mut extra_iter = self.extra_children.iter().peekable();
25309        #[cfg(feature = "extra-children")]
25310        let mut emit_idx: usize = 0;
25311        #[cfg(feature = "extra-children")]
25312        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25313            extra_iter
25314                .next()
25315                .unwrap()
25316                .node
25317                .write_to(writer)
25318                .map_err(SerializeError::from)?;
25319        }
25320        {
25321            let val = &self.value;
25322            {
25323                let start = BytesStart::new("v");
25324                writer.write_event(Event::Start(start))?;
25325                writer.write_event(Event::Text(BytesText::new(val.as_str())))?;
25326                writer.write_event(Event::End(BytesEnd::new("v")))?;
25327            }
25328        }
25329        #[cfg(feature = "extra-children")]
25330        {
25331            emit_idx += 1;
25332        }
25333        for item in &self.stp {
25334            #[cfg(feature = "extra-children")]
25335            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25336                extra_iter
25337                    .next()
25338                    .unwrap()
25339                    .node
25340                    .write_to(writer)
25341                    .map_err(SerializeError::from)?;
25342            }
25343            {
25344                let start = BytesStart::new("stp");
25345                writer.write_event(Event::Start(start))?;
25346                writer.write_event(Event::Text(BytesText::new(item.as_str())))?;
25347                writer.write_event(Event::End(BytesEnd::new("stp")))?;
25348            }
25349            #[cfg(feature = "extra-children")]
25350            {
25351                emit_idx += 1;
25352            }
25353        }
25354        for item in &self.tr {
25355            #[cfg(feature = "extra-children")]
25356            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25357                extra_iter
25358                    .next()
25359                    .unwrap()
25360                    .node
25361                    .write_to(writer)
25362                    .map_err(SerializeError::from)?;
25363            }
25364            item.write_element("tr", writer)?;
25365            #[cfg(feature = "extra-children")]
25366            {
25367                emit_idx += 1;
25368            }
25369        }
25370        #[cfg(feature = "extra-children")]
25371        for extra in extra_iter {
25372            extra.node.write_to(writer).map_err(SerializeError::from)?;
25373        }
25374        Ok(())
25375    }
25376
25377    fn is_empty_element(&self) -> bool {
25378        false
25379    }
25380}
25381
25382impl ToXml for CTVolTopicRef {
25383    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
25384        #[allow(unused_mut)]
25385        let mut start = start;
25386        {
25387            let val = &self.reference;
25388            start.push_attribute(("r", val.as_str()));
25389        }
25390        {
25391            let val = &self.style_index;
25392            {
25393                let s = val.to_string();
25394                start.push_attribute(("s", s.as_str()));
25395            }
25396        }
25397        #[cfg(feature = "extra-attrs")]
25398        for (key, value) in &self.extra_attrs {
25399            start.push_attribute((key.as_str(), value.as_str()));
25400        }
25401        start
25402    }
25403
25404    fn is_empty_element(&self) -> bool {
25405        true
25406    }
25407}
25408
25409impl ToXml for Workbook {
25410    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
25411        #[allow(unused_mut)]
25412        let mut start = start;
25413        if let Some(ref val) = self.conformance {
25414            {
25415                let s = val.to_string();
25416                start.push_attribute(("conformance", s.as_str()));
25417            }
25418        }
25419        #[cfg(feature = "extra-attrs")]
25420        for (key, value) in &self.extra_attrs {
25421            start.push_attribute((key.as_str(), value.as_str()));
25422        }
25423        start
25424    }
25425
25426    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25427        #[cfg(feature = "extra-children")]
25428        let mut extra_iter = self.extra_children.iter().peekable();
25429        #[cfg(feature = "extra-children")]
25430        let mut emit_idx: usize = 0;
25431        #[cfg(feature = "extra-children")]
25432        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25433            extra_iter
25434                .next()
25435                .unwrap()
25436                .node
25437                .write_to(writer)
25438                .map_err(SerializeError::from)?;
25439        }
25440        if let Some(ref val) = self.file_version {
25441            val.write_element("fileVersion", writer)?;
25442        }
25443        #[cfg(feature = "extra-children")]
25444        {
25445            emit_idx += 1;
25446        }
25447        #[cfg(feature = "extra-children")]
25448        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25449            extra_iter
25450                .next()
25451                .unwrap()
25452                .node
25453                .write_to(writer)
25454                .map_err(SerializeError::from)?;
25455        }
25456        #[cfg(feature = "sml-protection")]
25457        if let Some(ref val) = self.file_sharing {
25458            val.write_element("fileSharing", writer)?;
25459        }
25460        #[cfg(feature = "extra-children")]
25461        {
25462            emit_idx += 1;
25463        }
25464        #[cfg(feature = "extra-children")]
25465        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25466            extra_iter
25467                .next()
25468                .unwrap()
25469                .node
25470                .write_to(writer)
25471                .map_err(SerializeError::from)?;
25472        }
25473        if let Some(ref val) = self.workbook_pr {
25474            val.write_element("workbookPr", writer)?;
25475        }
25476        #[cfg(feature = "extra-children")]
25477        {
25478            emit_idx += 1;
25479        }
25480        #[cfg(feature = "extra-children")]
25481        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25482            extra_iter
25483                .next()
25484                .unwrap()
25485                .node
25486                .write_to(writer)
25487                .map_err(SerializeError::from)?;
25488        }
25489        #[cfg(feature = "sml-protection")]
25490        if let Some(ref val) = self.workbook_protection {
25491            val.write_element("workbookProtection", writer)?;
25492        }
25493        #[cfg(feature = "extra-children")]
25494        {
25495            emit_idx += 1;
25496        }
25497        #[cfg(feature = "extra-children")]
25498        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25499            extra_iter
25500                .next()
25501                .unwrap()
25502                .node
25503                .write_to(writer)
25504                .map_err(SerializeError::from)?;
25505        }
25506        if let Some(ref val) = self.book_views {
25507            val.write_element("bookViews", writer)?;
25508        }
25509        #[cfg(feature = "extra-children")]
25510        {
25511            emit_idx += 1;
25512        }
25513        #[cfg(feature = "extra-children")]
25514        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25515            extra_iter
25516                .next()
25517                .unwrap()
25518                .node
25519                .write_to(writer)
25520                .map_err(SerializeError::from)?;
25521        }
25522        {
25523            let val = &self.sheets;
25524            val.write_element("sheets", writer)?;
25525        }
25526        #[cfg(feature = "extra-children")]
25527        {
25528            emit_idx += 1;
25529        }
25530        #[cfg(feature = "extra-children")]
25531        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25532            extra_iter
25533                .next()
25534                .unwrap()
25535                .node
25536                .write_to(writer)
25537                .map_err(SerializeError::from)?;
25538        }
25539        #[cfg(feature = "sml-formulas-advanced")]
25540        if let Some(ref val) = self.function_groups {
25541            val.write_element("functionGroups", writer)?;
25542        }
25543        #[cfg(feature = "extra-children")]
25544        {
25545            emit_idx += 1;
25546        }
25547        #[cfg(feature = "extra-children")]
25548        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25549            extra_iter
25550                .next()
25551                .unwrap()
25552                .node
25553                .write_to(writer)
25554                .map_err(SerializeError::from)?;
25555        }
25556        #[cfg(feature = "sml-external")]
25557        if let Some(ref val) = self.external_references {
25558            val.write_element("externalReferences", writer)?;
25559        }
25560        #[cfg(feature = "extra-children")]
25561        {
25562            emit_idx += 1;
25563        }
25564        #[cfg(feature = "extra-children")]
25565        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25566            extra_iter
25567                .next()
25568                .unwrap()
25569                .node
25570                .write_to(writer)
25571                .map_err(SerializeError::from)?;
25572        }
25573        if let Some(ref val) = self.defined_names {
25574            val.write_element("definedNames", writer)?;
25575        }
25576        #[cfg(feature = "extra-children")]
25577        {
25578            emit_idx += 1;
25579        }
25580        #[cfg(feature = "extra-children")]
25581        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25582            extra_iter
25583                .next()
25584                .unwrap()
25585                .node
25586                .write_to(writer)
25587                .map_err(SerializeError::from)?;
25588        }
25589        #[cfg(feature = "sml-formulas")]
25590        if let Some(ref val) = self.calc_pr {
25591            val.write_element("calcPr", writer)?;
25592        }
25593        #[cfg(feature = "extra-children")]
25594        {
25595            emit_idx += 1;
25596        }
25597        #[cfg(feature = "extra-children")]
25598        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25599            extra_iter
25600                .next()
25601                .unwrap()
25602                .node
25603                .write_to(writer)
25604                .map_err(SerializeError::from)?;
25605        }
25606        #[cfg(feature = "sml-external")]
25607        if let Some(ref val) = self.ole_size {
25608            val.write_element("oleSize", writer)?;
25609        }
25610        #[cfg(feature = "extra-children")]
25611        {
25612            emit_idx += 1;
25613        }
25614        #[cfg(feature = "extra-children")]
25615        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25616            extra_iter
25617                .next()
25618                .unwrap()
25619                .node
25620                .write_to(writer)
25621                .map_err(SerializeError::from)?;
25622        }
25623        #[cfg(feature = "sml-structure")]
25624        if let Some(ref val) = self.custom_workbook_views {
25625            val.write_element("customWorkbookViews", writer)?;
25626        }
25627        #[cfg(feature = "extra-children")]
25628        {
25629            emit_idx += 1;
25630        }
25631        #[cfg(feature = "extra-children")]
25632        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25633            extra_iter
25634                .next()
25635                .unwrap()
25636                .node
25637                .write_to(writer)
25638                .map_err(SerializeError::from)?;
25639        }
25640        #[cfg(feature = "sml-pivot")]
25641        if let Some(ref val) = self.pivot_caches {
25642            val.write_element("pivotCaches", writer)?;
25643        }
25644        #[cfg(feature = "extra-children")]
25645        {
25646            emit_idx += 1;
25647        }
25648        #[cfg(feature = "extra-children")]
25649        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25650            extra_iter
25651                .next()
25652                .unwrap()
25653                .node
25654                .write_to(writer)
25655                .map_err(SerializeError::from)?;
25656        }
25657        #[cfg(feature = "sml-metadata")]
25658        if let Some(ref val) = self.smart_tag_pr {
25659            val.write_element("smartTagPr", writer)?;
25660        }
25661        #[cfg(feature = "extra-children")]
25662        {
25663            emit_idx += 1;
25664        }
25665        #[cfg(feature = "extra-children")]
25666        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25667            extra_iter
25668                .next()
25669                .unwrap()
25670                .node
25671                .write_to(writer)
25672                .map_err(SerializeError::from)?;
25673        }
25674        #[cfg(feature = "sml-metadata")]
25675        if let Some(ref val) = self.smart_tag_types {
25676            val.write_element("smartTagTypes", writer)?;
25677        }
25678        #[cfg(feature = "extra-children")]
25679        {
25680            emit_idx += 1;
25681        }
25682        #[cfg(feature = "extra-children")]
25683        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25684            extra_iter
25685                .next()
25686                .unwrap()
25687                .node
25688                .write_to(writer)
25689                .map_err(SerializeError::from)?;
25690        }
25691        #[cfg(feature = "sml-external")]
25692        if let Some(ref val) = self.web_publishing {
25693            val.write_element("webPublishing", writer)?;
25694        }
25695        #[cfg(feature = "extra-children")]
25696        {
25697            emit_idx += 1;
25698        }
25699        for item in &self.file_recovery_pr {
25700            #[cfg(feature = "extra-children")]
25701            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25702                extra_iter
25703                    .next()
25704                    .unwrap()
25705                    .node
25706                    .write_to(writer)
25707                    .map_err(SerializeError::from)?;
25708            }
25709            item.write_element("fileRecoveryPr", writer)?;
25710            #[cfg(feature = "extra-children")]
25711            {
25712                emit_idx += 1;
25713            }
25714        }
25715        #[cfg(feature = "extra-children")]
25716        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25717            extra_iter
25718                .next()
25719                .unwrap()
25720                .node
25721                .write_to(writer)
25722                .map_err(SerializeError::from)?;
25723        }
25724        #[cfg(feature = "sml-external")]
25725        if let Some(ref val) = self.web_publish_objects {
25726            val.write_element("webPublishObjects", writer)?;
25727        }
25728        #[cfg(feature = "extra-children")]
25729        {
25730            emit_idx += 1;
25731        }
25732        #[cfg(feature = "extra-children")]
25733        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25734            extra_iter
25735                .next()
25736                .unwrap()
25737                .node
25738                .write_to(writer)
25739                .map_err(SerializeError::from)?;
25740        }
25741        #[cfg(feature = "sml-extensions")]
25742        if let Some(ref val) = self.extension_list {
25743            val.write_element("extLst", writer)?;
25744        }
25745        #[cfg(feature = "extra-children")]
25746        {
25747            emit_idx += 1;
25748        }
25749        #[cfg(feature = "extra-children")]
25750        for extra in extra_iter {
25751            extra.node.write_to(writer).map_err(SerializeError::from)?;
25752        }
25753        Ok(())
25754    }
25755
25756    fn is_empty_element(&self) -> bool {
25757        if self.file_version.is_some() {
25758            return false;
25759        }
25760        #[cfg(feature = "sml-protection")]
25761        if self.file_sharing.is_some() {
25762            return false;
25763        }
25764        if self.workbook_pr.is_some() {
25765            return false;
25766        }
25767        #[cfg(feature = "sml-protection")]
25768        if self.workbook_protection.is_some() {
25769            return false;
25770        }
25771        if self.book_views.is_some() {
25772            return false;
25773        }
25774        false
25775    }
25776}
25777
25778impl ToXml for FileVersion {
25779    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
25780        #[allow(unused_mut)]
25781        let mut start = start;
25782        if let Some(ref val) = self.app_name {
25783            start.push_attribute(("appName", val.as_str()));
25784        }
25785        if let Some(ref val) = self.last_edited {
25786            start.push_attribute(("lastEdited", val.as_str()));
25787        }
25788        if let Some(ref val) = self.lowest_edited {
25789            start.push_attribute(("lowestEdited", val.as_str()));
25790        }
25791        if let Some(ref val) = self.rup_build {
25792            start.push_attribute(("rupBuild", val.as_str()));
25793        }
25794        if let Some(ref val) = self.code_name {
25795            start.push_attribute(("codeName", val.as_str()));
25796        }
25797        #[cfg(feature = "extra-attrs")]
25798        for (key, value) in &self.extra_attrs {
25799            start.push_attribute((key.as_str(), value.as_str()));
25800        }
25801        start
25802    }
25803
25804    fn is_empty_element(&self) -> bool {
25805        true
25806    }
25807}
25808
25809impl ToXml for BookViews {
25810    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25811        #[cfg(feature = "extra-children")]
25812        let mut extra_iter = self.extra_children.iter().peekable();
25813        #[cfg(feature = "extra-children")]
25814        let mut emit_idx: usize = 0;
25815        for item in &self.workbook_view {
25816            #[cfg(feature = "extra-children")]
25817            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25818                extra_iter
25819                    .next()
25820                    .unwrap()
25821                    .node
25822                    .write_to(writer)
25823                    .map_err(SerializeError::from)?;
25824            }
25825            item.write_element("workbookView", writer)?;
25826            #[cfg(feature = "extra-children")]
25827            {
25828                emit_idx += 1;
25829            }
25830        }
25831        #[cfg(feature = "extra-children")]
25832        for extra in extra_iter {
25833            extra.node.write_to(writer).map_err(SerializeError::from)?;
25834        }
25835        Ok(())
25836    }
25837
25838    fn is_empty_element(&self) -> bool {
25839        if !self.workbook_view.is_empty() {
25840            return false;
25841        }
25842        #[cfg(feature = "extra-children")]
25843        if !self.extra_children.is_empty() {
25844            return false;
25845        }
25846        true
25847    }
25848}
25849
25850impl ToXml for BookView {
25851    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
25852        #[allow(unused_mut)]
25853        let mut start = start;
25854        #[cfg(feature = "sml-structure")]
25855        if let Some(ref val) = self.visibility {
25856            {
25857                let s = val.to_string();
25858                start.push_attribute(("visibility", s.as_str()));
25859            }
25860        }
25861        #[cfg(feature = "sml-structure")]
25862        if let Some(ref val) = self.minimized {
25863            start.push_attribute(("minimized", if *val { "1" } else { "0" }));
25864        }
25865        #[cfg(feature = "sml-structure")]
25866        if let Some(ref val) = self.show_horizontal_scroll {
25867            start.push_attribute(("showHorizontalScroll", if *val { "1" } else { "0" }));
25868        }
25869        #[cfg(feature = "sml-structure")]
25870        if let Some(ref val) = self.show_vertical_scroll {
25871            start.push_attribute(("showVerticalScroll", if *val { "1" } else { "0" }));
25872        }
25873        #[cfg(feature = "sml-structure")]
25874        if let Some(ref val) = self.show_sheet_tabs {
25875            start.push_attribute(("showSheetTabs", if *val { "1" } else { "0" }));
25876        }
25877        #[cfg(feature = "sml-structure")]
25878        if let Some(ref val) = self.x_window {
25879            {
25880                let s = val.to_string();
25881                start.push_attribute(("xWindow", s.as_str()));
25882            }
25883        }
25884        #[cfg(feature = "sml-structure")]
25885        if let Some(ref val) = self.y_window {
25886            {
25887                let s = val.to_string();
25888                start.push_attribute(("yWindow", s.as_str()));
25889            }
25890        }
25891        #[cfg(feature = "sml-structure")]
25892        if let Some(ref val) = self.window_width {
25893            {
25894                let s = val.to_string();
25895                start.push_attribute(("windowWidth", s.as_str()));
25896            }
25897        }
25898        #[cfg(feature = "sml-structure")]
25899        if let Some(ref val) = self.window_height {
25900            {
25901                let s = val.to_string();
25902                start.push_attribute(("windowHeight", s.as_str()));
25903            }
25904        }
25905        #[cfg(feature = "sml-structure")]
25906        if let Some(ref val) = self.tab_ratio {
25907            {
25908                let s = val.to_string();
25909                start.push_attribute(("tabRatio", s.as_str()));
25910            }
25911        }
25912        #[cfg(feature = "sml-structure")]
25913        if let Some(ref val) = self.first_sheet {
25914            {
25915                let s = val.to_string();
25916                start.push_attribute(("firstSheet", s.as_str()));
25917            }
25918        }
25919        if let Some(ref val) = self.active_tab {
25920            {
25921                let s = val.to_string();
25922                start.push_attribute(("activeTab", s.as_str()));
25923            }
25924        }
25925        #[cfg(feature = "sml-filtering")]
25926        if let Some(ref val) = self.auto_filter_date_grouping {
25927            start.push_attribute(("autoFilterDateGrouping", if *val { "1" } else { "0" }));
25928        }
25929        #[cfg(feature = "extra-attrs")]
25930        for (key, value) in &self.extra_attrs {
25931            start.push_attribute((key.as_str(), value.as_str()));
25932        }
25933        start
25934    }
25935
25936    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25937        #[cfg(feature = "extra-children")]
25938        let mut extra_iter = self.extra_children.iter().peekable();
25939        #[cfg(feature = "extra-children")]
25940        let mut emit_idx: usize = 0;
25941        #[cfg(feature = "extra-children")]
25942        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25943            extra_iter
25944                .next()
25945                .unwrap()
25946                .node
25947                .write_to(writer)
25948                .map_err(SerializeError::from)?;
25949        }
25950        #[cfg(feature = "sml-extensions")]
25951        if let Some(ref val) = self.extension_list {
25952            val.write_element("extLst", writer)?;
25953        }
25954        #[cfg(feature = "extra-children")]
25955        {
25956            emit_idx += 1;
25957        }
25958        #[cfg(feature = "extra-children")]
25959        for extra in extra_iter {
25960            extra.node.write_to(writer).map_err(SerializeError::from)?;
25961        }
25962        Ok(())
25963    }
25964
25965    fn is_empty_element(&self) -> bool {
25966        #[cfg(feature = "sml-extensions")]
25967        if self.extension_list.is_some() {
25968            return false;
25969        }
25970        #[cfg(feature = "extra-children")]
25971        if !self.extra_children.is_empty() {
25972            return false;
25973        }
25974        true
25975    }
25976}
25977
25978impl ToXml for CustomWorkbookViews {
25979    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
25980        #[cfg(feature = "extra-children")]
25981        let mut extra_iter = self.extra_children.iter().peekable();
25982        #[cfg(feature = "extra-children")]
25983        let mut emit_idx: usize = 0;
25984        for item in &self.custom_workbook_view {
25985            #[cfg(feature = "extra-children")]
25986            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
25987                extra_iter
25988                    .next()
25989                    .unwrap()
25990                    .node
25991                    .write_to(writer)
25992                    .map_err(SerializeError::from)?;
25993            }
25994            item.write_element("customWorkbookView", writer)?;
25995            #[cfg(feature = "extra-children")]
25996            {
25997                emit_idx += 1;
25998            }
25999        }
26000        #[cfg(feature = "extra-children")]
26001        for extra in extra_iter {
26002            extra.node.write_to(writer).map_err(SerializeError::from)?;
26003        }
26004        Ok(())
26005    }
26006
26007    fn is_empty_element(&self) -> bool {
26008        if !self.custom_workbook_view.is_empty() {
26009            return false;
26010        }
26011        #[cfg(feature = "extra-children")]
26012        if !self.extra_children.is_empty() {
26013            return false;
26014        }
26015        true
26016    }
26017}
26018
26019impl ToXml for CustomWorkbookView {
26020    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26021        #[allow(unused_mut)]
26022        let mut start = start;
26023        {
26024            let val = &self.name;
26025            start.push_attribute(("name", val.as_str()));
26026        }
26027        {
26028            let val = &self.guid;
26029            start.push_attribute(("guid", val.as_str()));
26030        }
26031        if let Some(ref val) = self.auto_update {
26032            start.push_attribute(("autoUpdate", if *val { "1" } else { "0" }));
26033        }
26034        if let Some(ref val) = self.merge_interval {
26035            {
26036                let s = val.to_string();
26037                start.push_attribute(("mergeInterval", s.as_str()));
26038            }
26039        }
26040        if let Some(ref val) = self.changes_saved_win {
26041            start.push_attribute(("changesSavedWin", if *val { "1" } else { "0" }));
26042        }
26043        if let Some(ref val) = self.only_sync {
26044            start.push_attribute(("onlySync", if *val { "1" } else { "0" }));
26045        }
26046        if let Some(ref val) = self.personal_view {
26047            start.push_attribute(("personalView", if *val { "1" } else { "0" }));
26048        }
26049        if let Some(ref val) = self.include_print_settings {
26050            start.push_attribute(("includePrintSettings", if *val { "1" } else { "0" }));
26051        }
26052        if let Some(ref val) = self.include_hidden_row_col {
26053            start.push_attribute(("includeHiddenRowCol", if *val { "1" } else { "0" }));
26054        }
26055        if let Some(ref val) = self.maximized {
26056            start.push_attribute(("maximized", if *val { "1" } else { "0" }));
26057        }
26058        if let Some(ref val) = self.minimized {
26059            start.push_attribute(("minimized", if *val { "1" } else { "0" }));
26060        }
26061        if let Some(ref val) = self.show_horizontal_scroll {
26062            start.push_attribute(("showHorizontalScroll", if *val { "1" } else { "0" }));
26063        }
26064        if let Some(ref val) = self.show_vertical_scroll {
26065            start.push_attribute(("showVerticalScroll", if *val { "1" } else { "0" }));
26066        }
26067        if let Some(ref val) = self.show_sheet_tabs {
26068            start.push_attribute(("showSheetTabs", if *val { "1" } else { "0" }));
26069        }
26070        if let Some(ref val) = self.x_window {
26071            {
26072                let s = val.to_string();
26073                start.push_attribute(("xWindow", s.as_str()));
26074            }
26075        }
26076        if let Some(ref val) = self.y_window {
26077            {
26078                let s = val.to_string();
26079                start.push_attribute(("yWindow", s.as_str()));
26080            }
26081        }
26082        {
26083            let val = &self.window_width;
26084            {
26085                let s = val.to_string();
26086                start.push_attribute(("windowWidth", s.as_str()));
26087            }
26088        }
26089        {
26090            let val = &self.window_height;
26091            {
26092                let s = val.to_string();
26093                start.push_attribute(("windowHeight", s.as_str()));
26094            }
26095        }
26096        if let Some(ref val) = self.tab_ratio {
26097            {
26098                let s = val.to_string();
26099                start.push_attribute(("tabRatio", s.as_str()));
26100            }
26101        }
26102        {
26103            let val = &self.active_sheet_id;
26104            {
26105                let s = val.to_string();
26106                start.push_attribute(("activeSheetId", s.as_str()));
26107            }
26108        }
26109        if let Some(ref val) = self.show_formula_bar {
26110            start.push_attribute(("showFormulaBar", if *val { "1" } else { "0" }));
26111        }
26112        if let Some(ref val) = self.show_statusbar {
26113            start.push_attribute(("showStatusbar", if *val { "1" } else { "0" }));
26114        }
26115        if let Some(ref val) = self.show_comments {
26116            {
26117                let s = val.to_string();
26118                start.push_attribute(("showComments", s.as_str()));
26119            }
26120        }
26121        if let Some(ref val) = self.show_objects {
26122            {
26123                let s = val.to_string();
26124                start.push_attribute(("showObjects", s.as_str()));
26125            }
26126        }
26127        #[cfg(feature = "extra-attrs")]
26128        for (key, value) in &self.extra_attrs {
26129            start.push_attribute((key.as_str(), value.as_str()));
26130        }
26131        start
26132    }
26133
26134    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
26135        #[cfg(feature = "extra-children")]
26136        let mut extra_iter = self.extra_children.iter().peekable();
26137        #[cfg(feature = "extra-children")]
26138        let mut emit_idx: usize = 0;
26139        #[cfg(feature = "extra-children")]
26140        while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
26141            extra_iter
26142                .next()
26143                .unwrap()
26144                .node
26145                .write_to(writer)
26146                .map_err(SerializeError::from)?;
26147        }
26148        if let Some(ref val) = self.extension_list {
26149            val.write_element("extLst", writer)?;
26150        }
26151        #[cfg(feature = "extra-children")]
26152        {
26153            emit_idx += 1;
26154        }
26155        #[cfg(feature = "extra-children")]
26156        for extra in extra_iter {
26157            extra.node.write_to(writer).map_err(SerializeError::from)?;
26158        }
26159        Ok(())
26160    }
26161
26162    fn is_empty_element(&self) -> bool {
26163        if self.extension_list.is_some() {
26164            return false;
26165        }
26166        #[cfg(feature = "extra-children")]
26167        if !self.extra_children.is_empty() {
26168            return false;
26169        }
26170        true
26171    }
26172}
26173
26174impl ToXml for Sheets {
26175    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
26176        #[cfg(feature = "extra-children")]
26177        let mut extra_iter = self.extra_children.iter().peekable();
26178        #[cfg(feature = "extra-children")]
26179        let mut emit_idx: usize = 0;
26180        for item in &self.sheet {
26181            #[cfg(feature = "extra-children")]
26182            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
26183                extra_iter
26184                    .next()
26185                    .unwrap()
26186                    .node
26187                    .write_to(writer)
26188                    .map_err(SerializeError::from)?;
26189            }
26190            item.write_element("sheet", writer)?;
26191            #[cfg(feature = "extra-children")]
26192            {
26193                emit_idx += 1;
26194            }
26195        }
26196        #[cfg(feature = "extra-children")]
26197        for extra in extra_iter {
26198            extra.node.write_to(writer).map_err(SerializeError::from)?;
26199        }
26200        Ok(())
26201    }
26202
26203    fn is_empty_element(&self) -> bool {
26204        if !self.sheet.is_empty() {
26205            return false;
26206        }
26207        #[cfg(feature = "extra-children")]
26208        if !self.extra_children.is_empty() {
26209            return false;
26210        }
26211        true
26212    }
26213}
26214
26215impl ToXml for Sheet {
26216    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26217        #[allow(unused_mut)]
26218        let mut start = start;
26219        {
26220            let val = &self.name;
26221            start.push_attribute(("name", val.as_str()));
26222        }
26223        {
26224            let val = &self.sheet_id;
26225            {
26226                let s = val.to_string();
26227                start.push_attribute(("sheetId", s.as_str()));
26228            }
26229        }
26230        #[cfg(feature = "sml-structure")]
26231        if let Some(ref val) = self.state {
26232            {
26233                let s = val.to_string();
26234                start.push_attribute(("state", s.as_str()));
26235            }
26236        }
26237        {
26238            let val = &self.id;
26239            start.push_attribute(("r:id", val.as_str()));
26240        }
26241        #[cfg(feature = "extra-attrs")]
26242        for (key, value) in &self.extra_attrs {
26243            start.push_attribute((key.as_str(), value.as_str()));
26244        }
26245        start
26246    }
26247
26248    fn is_empty_element(&self) -> bool {
26249        true
26250    }
26251}
26252
26253impl ToXml for WorkbookProperties {
26254    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26255        #[allow(unused_mut)]
26256        let mut start = start;
26257        if let Some(ref val) = self.date1904 {
26258            start.push_attribute(("date1904", if *val { "1" } else { "0" }));
26259        }
26260        if let Some(ref val) = self.show_objects {
26261            {
26262                let s = val.to_string();
26263                start.push_attribute(("showObjects", s.as_str()));
26264            }
26265        }
26266        if let Some(ref val) = self.show_border_unselected_tables {
26267            start.push_attribute(("showBorderUnselectedTables", if *val { "1" } else { "0" }));
26268        }
26269        if let Some(ref val) = self.filter_privacy {
26270            start.push_attribute(("filterPrivacy", if *val { "1" } else { "0" }));
26271        }
26272        if let Some(ref val) = self.prompted_solutions {
26273            start.push_attribute(("promptedSolutions", if *val { "1" } else { "0" }));
26274        }
26275        if let Some(ref val) = self.show_ink_annotation {
26276            start.push_attribute(("showInkAnnotation", if *val { "1" } else { "0" }));
26277        }
26278        if let Some(ref val) = self.backup_file {
26279            start.push_attribute(("backupFile", if *val { "1" } else { "0" }));
26280        }
26281        if let Some(ref val) = self.save_external_link_values {
26282            start.push_attribute(("saveExternalLinkValues", if *val { "1" } else { "0" }));
26283        }
26284        if let Some(ref val) = self.update_links {
26285            {
26286                let s = val.to_string();
26287                start.push_attribute(("updateLinks", s.as_str()));
26288            }
26289        }
26290        if let Some(ref val) = self.code_name {
26291            start.push_attribute(("codeName", val.as_str()));
26292        }
26293        if let Some(ref val) = self.hide_pivot_field_list {
26294            start.push_attribute(("hidePivotFieldList", if *val { "1" } else { "0" }));
26295        }
26296        if let Some(ref val) = self.show_pivot_chart_filter {
26297            start.push_attribute(("showPivotChartFilter", if *val { "1" } else { "0" }));
26298        }
26299        if let Some(ref val) = self.allow_refresh_query {
26300            start.push_attribute(("allowRefreshQuery", if *val { "1" } else { "0" }));
26301        }
26302        if let Some(ref val) = self.publish_items {
26303            start.push_attribute(("publishItems", if *val { "1" } else { "0" }));
26304        }
26305        if let Some(ref val) = self.check_compatibility {
26306            start.push_attribute(("checkCompatibility", if *val { "1" } else { "0" }));
26307        }
26308        if let Some(ref val) = self.auto_compress_pictures {
26309            start.push_attribute(("autoCompressPictures", if *val { "1" } else { "0" }));
26310        }
26311        if let Some(ref val) = self.refresh_all_connections {
26312            start.push_attribute(("refreshAllConnections", if *val { "1" } else { "0" }));
26313        }
26314        if let Some(ref val) = self.default_theme_version {
26315            {
26316                let s = val.to_string();
26317                start.push_attribute(("defaultThemeVersion", s.as_str()));
26318            }
26319        }
26320        #[cfg(feature = "extra-attrs")]
26321        for (key, value) in &self.extra_attrs {
26322            start.push_attribute((key.as_str(), value.as_str()));
26323        }
26324        start
26325    }
26326
26327    fn is_empty_element(&self) -> bool {
26328        true
26329    }
26330}
26331
26332impl ToXml for CTSmartTagPr {
26333    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26334        #[allow(unused_mut)]
26335        let mut start = start;
26336        if let Some(ref val) = self.embed {
26337            start.push_attribute(("embed", if *val { "1" } else { "0" }));
26338        }
26339        if let Some(ref val) = self.show {
26340            {
26341                let s = val.to_string();
26342                start.push_attribute(("show", s.as_str()));
26343            }
26344        }
26345        #[cfg(feature = "extra-attrs")]
26346        for (key, value) in &self.extra_attrs {
26347            start.push_attribute((key.as_str(), value.as_str()));
26348        }
26349        start
26350    }
26351
26352    fn is_empty_element(&self) -> bool {
26353        true
26354    }
26355}
26356
26357impl ToXml for CTSmartTagTypes {
26358    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
26359        #[cfg(feature = "extra-children")]
26360        let mut extra_iter = self.extra_children.iter().peekable();
26361        #[cfg(feature = "extra-children")]
26362        let mut emit_idx: usize = 0;
26363        for item in &self.smart_tag_type {
26364            #[cfg(feature = "extra-children")]
26365            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
26366                extra_iter
26367                    .next()
26368                    .unwrap()
26369                    .node
26370                    .write_to(writer)
26371                    .map_err(SerializeError::from)?;
26372            }
26373            item.write_element("smartTagType", writer)?;
26374            #[cfg(feature = "extra-children")]
26375            {
26376                emit_idx += 1;
26377            }
26378        }
26379        #[cfg(feature = "extra-children")]
26380        for extra in extra_iter {
26381            extra.node.write_to(writer).map_err(SerializeError::from)?;
26382        }
26383        Ok(())
26384    }
26385
26386    fn is_empty_element(&self) -> bool {
26387        if !self.smart_tag_type.is_empty() {
26388            return false;
26389        }
26390        #[cfg(feature = "extra-children")]
26391        if !self.extra_children.is_empty() {
26392            return false;
26393        }
26394        true
26395    }
26396}
26397
26398impl ToXml for CTSmartTagType {
26399    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26400        #[allow(unused_mut)]
26401        let mut start = start;
26402        if let Some(ref val) = self.namespace_uri {
26403            start.push_attribute(("namespaceUri", val.as_str()));
26404        }
26405        if let Some(ref val) = self.name {
26406            start.push_attribute(("name", val.as_str()));
26407        }
26408        if let Some(ref val) = self.url {
26409            start.push_attribute(("url", val.as_str()));
26410        }
26411        #[cfg(feature = "extra-attrs")]
26412        for (key, value) in &self.extra_attrs {
26413            start.push_attribute((key.as_str(), value.as_str()));
26414        }
26415        start
26416    }
26417
26418    fn is_empty_element(&self) -> bool {
26419        true
26420    }
26421}
26422
26423impl ToXml for FileRecoveryProperties {
26424    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26425        #[allow(unused_mut)]
26426        let mut start = start;
26427        if let Some(ref val) = self.auto_recover {
26428            start.push_attribute(("autoRecover", if *val { "1" } else { "0" }));
26429        }
26430        if let Some(ref val) = self.crash_save {
26431            start.push_attribute(("crashSave", if *val { "1" } else { "0" }));
26432        }
26433        if let Some(ref val) = self.data_extract_load {
26434            start.push_attribute(("dataExtractLoad", if *val { "1" } else { "0" }));
26435        }
26436        if let Some(ref val) = self.repair_load {
26437            start.push_attribute(("repairLoad", if *val { "1" } else { "0" }));
26438        }
26439        #[cfg(feature = "extra-attrs")]
26440        for (key, value) in &self.extra_attrs {
26441            start.push_attribute((key.as_str(), value.as_str()));
26442        }
26443        start
26444    }
26445
26446    fn is_empty_element(&self) -> bool {
26447        true
26448    }
26449}
26450
26451impl ToXml for CalculationProperties {
26452    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26453        #[allow(unused_mut)]
26454        let mut start = start;
26455        #[cfg(feature = "sml-formulas")]
26456        if let Some(ref val) = self.calc_id {
26457            {
26458                let s = val.to_string();
26459                start.push_attribute(("calcId", s.as_str()));
26460            }
26461        }
26462        #[cfg(feature = "sml-formulas")]
26463        if let Some(ref val) = self.calc_mode {
26464            {
26465                let s = val.to_string();
26466                start.push_attribute(("calcMode", s.as_str()));
26467            }
26468        }
26469        #[cfg(feature = "sml-formulas")]
26470        if let Some(ref val) = self.full_calc_on_load {
26471            start.push_attribute(("fullCalcOnLoad", if *val { "1" } else { "0" }));
26472        }
26473        #[cfg(feature = "sml-formulas")]
26474        if let Some(ref val) = self.ref_mode {
26475            {
26476                let s = val.to_string();
26477                start.push_attribute(("refMode", s.as_str()));
26478            }
26479        }
26480        #[cfg(feature = "sml-formulas-advanced")]
26481        if let Some(ref val) = self.iterate {
26482            start.push_attribute(("iterate", if *val { "1" } else { "0" }));
26483        }
26484        #[cfg(feature = "sml-formulas-advanced")]
26485        if let Some(ref val) = self.iterate_count {
26486            {
26487                let s = val.to_string();
26488                start.push_attribute(("iterateCount", s.as_str()));
26489            }
26490        }
26491        #[cfg(feature = "sml-formulas-advanced")]
26492        if let Some(ref val) = self.iterate_delta {
26493            {
26494                let s = val.to_string();
26495                start.push_attribute(("iterateDelta", s.as_str()));
26496            }
26497        }
26498        #[cfg(feature = "sml-formulas")]
26499        if let Some(ref val) = self.full_precision {
26500            start.push_attribute(("fullPrecision", if *val { "1" } else { "0" }));
26501        }
26502        #[cfg(feature = "sml-formulas")]
26503        if let Some(ref val) = self.calc_completed {
26504            start.push_attribute(("calcCompleted", if *val { "1" } else { "0" }));
26505        }
26506        #[cfg(feature = "sml-formulas")]
26507        if let Some(ref val) = self.calc_on_save {
26508            start.push_attribute(("calcOnSave", if *val { "1" } else { "0" }));
26509        }
26510        #[cfg(feature = "sml-formulas-advanced")]
26511        if let Some(ref val) = self.concurrent_calc {
26512            start.push_attribute(("concurrentCalc", if *val { "1" } else { "0" }));
26513        }
26514        #[cfg(feature = "sml-formulas-advanced")]
26515        if let Some(ref val) = self.concurrent_manual_count {
26516            {
26517                let s = val.to_string();
26518                start.push_attribute(("concurrentManualCount", s.as_str()));
26519            }
26520        }
26521        #[cfg(feature = "sml-formulas")]
26522        if let Some(ref val) = self.force_full_calc {
26523            start.push_attribute(("forceFullCalc", if *val { "1" } else { "0" }));
26524        }
26525        #[cfg(feature = "extra-attrs")]
26526        for (key, value) in &self.extra_attrs {
26527            start.push_attribute((key.as_str(), value.as_str()));
26528        }
26529        start
26530    }
26531
26532    fn is_empty_element(&self) -> bool {
26533        true
26534    }
26535}
26536
26537impl ToXml for DefinedNames {
26538    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
26539        #[cfg(feature = "extra-children")]
26540        let mut extra_iter = self.extra_children.iter().peekable();
26541        #[cfg(feature = "extra-children")]
26542        let mut emit_idx: usize = 0;
26543        for item in &self.defined_name {
26544            #[cfg(feature = "extra-children")]
26545            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
26546                extra_iter
26547                    .next()
26548                    .unwrap()
26549                    .node
26550                    .write_to(writer)
26551                    .map_err(SerializeError::from)?;
26552            }
26553            item.write_element("definedName", writer)?;
26554            #[cfg(feature = "extra-children")]
26555            {
26556                emit_idx += 1;
26557            }
26558        }
26559        #[cfg(feature = "extra-children")]
26560        for extra in extra_iter {
26561            extra.node.write_to(writer).map_err(SerializeError::from)?;
26562        }
26563        Ok(())
26564    }
26565
26566    fn is_empty_element(&self) -> bool {
26567        if !self.defined_name.is_empty() {
26568            return false;
26569        }
26570        #[cfg(feature = "extra-children")]
26571        if !self.extra_children.is_empty() {
26572            return false;
26573        }
26574        true
26575    }
26576}
26577
26578impl ToXml for DefinedName {
26579    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26580        #[allow(unused_mut)]
26581        let mut start = start;
26582        {
26583            let val = &self.name;
26584            start.push_attribute(("name", val.as_str()));
26585        }
26586        if let Some(ref val) = self.comment {
26587            start.push_attribute(("comment", val.as_str()));
26588        }
26589        #[cfg(feature = "sml-formulas-advanced")]
26590        if let Some(ref val) = self.custom_menu {
26591            start.push_attribute(("customMenu", val.as_str()));
26592        }
26593        if let Some(ref val) = self.description {
26594            start.push_attribute(("description", val.as_str()));
26595        }
26596        #[cfg(feature = "sml-formulas-advanced")]
26597        if let Some(ref val) = self.help {
26598            start.push_attribute(("help", val.as_str()));
26599        }
26600        #[cfg(feature = "sml-formulas-advanced")]
26601        if let Some(ref val) = self.status_bar {
26602            start.push_attribute(("statusBar", val.as_str()));
26603        }
26604        if let Some(ref val) = self.local_sheet_id {
26605            {
26606                let s = val.to_string();
26607                start.push_attribute(("localSheetId", s.as_str()));
26608            }
26609        }
26610        #[cfg(feature = "sml-structure")]
26611        if let Some(ref val) = self.hidden {
26612            start.push_attribute(("hidden", if *val { "1" } else { "0" }));
26613        }
26614        #[cfg(feature = "sml-formulas-advanced")]
26615        if let Some(ref val) = self.function {
26616            start.push_attribute(("function", if *val { "1" } else { "0" }));
26617        }
26618        #[cfg(feature = "sml-formulas-advanced")]
26619        if let Some(ref val) = self.vb_procedure {
26620            start.push_attribute(("vbProcedure", if *val { "1" } else { "0" }));
26621        }
26622        #[cfg(feature = "sml-formulas-advanced")]
26623        if let Some(ref val) = self.xlm {
26624            start.push_attribute(("xlm", if *val { "1" } else { "0" }));
26625        }
26626        #[cfg(feature = "sml-formulas-advanced")]
26627        if let Some(ref val) = self.function_group_id {
26628            {
26629                let s = val.to_string();
26630                start.push_attribute(("functionGroupId", s.as_str()));
26631            }
26632        }
26633        #[cfg(feature = "sml-formulas-advanced")]
26634        if let Some(ref val) = self.shortcut_key {
26635            start.push_attribute(("shortcutKey", val.as_str()));
26636        }
26637        #[cfg(feature = "sml-external")]
26638        if let Some(ref val) = self.publish_to_server {
26639            start.push_attribute(("publishToServer", if *val { "1" } else { "0" }));
26640        }
26641        #[cfg(feature = "sml-formulas-advanced")]
26642        if let Some(ref val) = self.workbook_parameter {
26643            start.push_attribute(("workbookParameter", if *val { "1" } else { "0" }));
26644        }
26645        #[cfg(feature = "extra-attrs")]
26646        for (key, value) in &self.extra_attrs {
26647            start.push_attribute((key.as_str(), value.as_str()));
26648        }
26649        start
26650    }
26651
26652    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
26653        if let Some(ref text) = self.text {
26654            writer.write_event(Event::Text(BytesText::new(text)))?;
26655        }
26656        #[cfg(feature = "extra-children")]
26657        for extra in &self.extra_children {
26658            extra.node.write_to(writer).map_err(SerializeError::from)?;
26659        }
26660        Ok(())
26661    }
26662
26663    fn is_empty_element(&self) -> bool {
26664        if self.text.is_some() {
26665            return false;
26666        }
26667        #[cfg(feature = "extra-children")]
26668        if !self.extra_children.is_empty() {
26669            return false;
26670        }
26671        true
26672    }
26673}
26674
26675impl ToXml for ExternalReferences {
26676    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
26677        #[cfg(feature = "extra-children")]
26678        let mut extra_iter = self.extra_children.iter().peekable();
26679        #[cfg(feature = "extra-children")]
26680        let mut emit_idx: usize = 0;
26681        for item in &self.external_reference {
26682            #[cfg(feature = "extra-children")]
26683            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
26684                extra_iter
26685                    .next()
26686                    .unwrap()
26687                    .node
26688                    .write_to(writer)
26689                    .map_err(SerializeError::from)?;
26690            }
26691            item.write_element("externalReference", writer)?;
26692            #[cfg(feature = "extra-children")]
26693            {
26694                emit_idx += 1;
26695            }
26696        }
26697        #[cfg(feature = "extra-children")]
26698        for extra in extra_iter {
26699            extra.node.write_to(writer).map_err(SerializeError::from)?;
26700        }
26701        Ok(())
26702    }
26703
26704    fn is_empty_element(&self) -> bool {
26705        if !self.external_reference.is_empty() {
26706            return false;
26707        }
26708        #[cfg(feature = "extra-children")]
26709        if !self.extra_children.is_empty() {
26710            return false;
26711        }
26712        true
26713    }
26714}
26715
26716impl ToXml for ExternalReference {
26717    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26718        #[allow(unused_mut)]
26719        let mut start = start;
26720        {
26721            let val = &self.id;
26722            start.push_attribute(("r:id", val.as_str()));
26723        }
26724        #[cfg(feature = "extra-attrs")]
26725        for (key, value) in &self.extra_attrs {
26726            start.push_attribute((key.as_str(), value.as_str()));
26727        }
26728        start
26729    }
26730
26731    fn is_empty_element(&self) -> bool {
26732        true
26733    }
26734}
26735
26736impl ToXml for SheetBackgroundPicture {
26737    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26738        #[allow(unused_mut)]
26739        let mut start = start;
26740        {
26741            let val = &self.id;
26742            start.push_attribute(("r:id", val.as_str()));
26743        }
26744        #[cfg(feature = "extra-attrs")]
26745        for (key, value) in &self.extra_attrs {
26746            start.push_attribute((key.as_str(), value.as_str()));
26747        }
26748        start
26749    }
26750
26751    fn is_empty_element(&self) -> bool {
26752        true
26753    }
26754}
26755
26756impl ToXml for PivotCaches {
26757    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
26758        #[cfg(feature = "extra-children")]
26759        let mut extra_iter = self.extra_children.iter().peekable();
26760        #[cfg(feature = "extra-children")]
26761        let mut emit_idx: usize = 0;
26762        for item in &self.pivot_cache {
26763            #[cfg(feature = "extra-children")]
26764            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
26765                extra_iter
26766                    .next()
26767                    .unwrap()
26768                    .node
26769                    .write_to(writer)
26770                    .map_err(SerializeError::from)?;
26771            }
26772            item.write_element("pivotCache", writer)?;
26773            #[cfg(feature = "extra-children")]
26774            {
26775                emit_idx += 1;
26776            }
26777        }
26778        #[cfg(feature = "extra-children")]
26779        for extra in extra_iter {
26780            extra.node.write_to(writer).map_err(SerializeError::from)?;
26781        }
26782        Ok(())
26783    }
26784
26785    fn is_empty_element(&self) -> bool {
26786        if !self.pivot_cache.is_empty() {
26787            return false;
26788        }
26789        #[cfg(feature = "extra-children")]
26790        if !self.extra_children.is_empty() {
26791            return false;
26792        }
26793        true
26794    }
26795}
26796
26797impl ToXml for CTPivotCache {
26798    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26799        #[allow(unused_mut)]
26800        let mut start = start;
26801        {
26802            let val = &self.cache_id;
26803            {
26804                let s = val.to_string();
26805                start.push_attribute(("cacheId", s.as_str()));
26806            }
26807        }
26808        {
26809            let val = &self.id;
26810            start.push_attribute(("r:id", val.as_str()));
26811        }
26812        #[cfg(feature = "extra-attrs")]
26813        for (key, value) in &self.extra_attrs {
26814            start.push_attribute((key.as_str(), value.as_str()));
26815        }
26816        start
26817    }
26818
26819    fn is_empty_element(&self) -> bool {
26820        true
26821    }
26822}
26823
26824impl ToXml for FileSharing {
26825    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26826        #[allow(unused_mut)]
26827        let mut start = start;
26828        if let Some(ref val) = self.read_only_recommended {
26829            start.push_attribute(("readOnlyRecommended", if *val { "1" } else { "0" }));
26830        }
26831        if let Some(ref val) = self.user_name {
26832            start.push_attribute(("userName", val.as_str()));
26833        }
26834        if let Some(ref val) = self.reservation_password {
26835            {
26836                let hex = encode_hex(val);
26837                start.push_attribute(("reservationPassword", hex.as_str()));
26838            }
26839        }
26840        if let Some(ref val) = self.algorithm_name {
26841            start.push_attribute(("algorithmName", val.as_str()));
26842        }
26843        if let Some(ref val) = self.hash_value {
26844            {
26845                let b64 = encode_base64(val);
26846                start.push_attribute(("hashValue", b64.as_str()));
26847            }
26848        }
26849        if let Some(ref val) = self.salt_value {
26850            {
26851                let b64 = encode_base64(val);
26852                start.push_attribute(("saltValue", b64.as_str()));
26853            }
26854        }
26855        if let Some(ref val) = self.spin_count {
26856            {
26857                let s = val.to_string();
26858                start.push_attribute(("spinCount", s.as_str()));
26859            }
26860        }
26861        #[cfg(feature = "extra-attrs")]
26862        for (key, value) in &self.extra_attrs {
26863            start.push_attribute((key.as_str(), value.as_str()));
26864        }
26865        start
26866    }
26867
26868    fn is_empty_element(&self) -> bool {
26869        true
26870    }
26871}
26872
26873impl ToXml for CTOleSize {
26874    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26875        #[allow(unused_mut)]
26876        let mut start = start;
26877        {
26878            let val = &self.reference;
26879            start.push_attribute(("ref", val.as_str()));
26880        }
26881        #[cfg(feature = "extra-attrs")]
26882        for (key, value) in &self.extra_attrs {
26883            start.push_attribute((key.as_str(), value.as_str()));
26884        }
26885        start
26886    }
26887
26888    fn is_empty_element(&self) -> bool {
26889        true
26890    }
26891}
26892
26893impl ToXml for WorkbookProtection {
26894    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26895        #[allow(unused_mut)]
26896        let mut start = start;
26897        if let Some(ref val) = self.workbook_password {
26898            {
26899                let hex = encode_hex(val);
26900                start.push_attribute(("workbookPassword", hex.as_str()));
26901            }
26902        }
26903        if let Some(ref val) = self.workbook_password_character_set {
26904            start.push_attribute(("workbookPasswordCharacterSet", val.as_str()));
26905        }
26906        if let Some(ref val) = self.revisions_password {
26907            {
26908                let hex = encode_hex(val);
26909                start.push_attribute(("revisionsPassword", hex.as_str()));
26910            }
26911        }
26912        if let Some(ref val) = self.revisions_password_character_set {
26913            start.push_attribute(("revisionsPasswordCharacterSet", val.as_str()));
26914        }
26915        if let Some(ref val) = self.lock_structure {
26916            start.push_attribute(("lockStructure", if *val { "1" } else { "0" }));
26917        }
26918        if let Some(ref val) = self.lock_windows {
26919            start.push_attribute(("lockWindows", if *val { "1" } else { "0" }));
26920        }
26921        if let Some(ref val) = self.lock_revision {
26922            start.push_attribute(("lockRevision", if *val { "1" } else { "0" }));
26923        }
26924        if let Some(ref val) = self.revisions_algorithm_name {
26925            start.push_attribute(("revisionsAlgorithmName", val.as_str()));
26926        }
26927        if let Some(ref val) = self.revisions_hash_value {
26928            {
26929                let b64 = encode_base64(val);
26930                start.push_attribute(("revisionsHashValue", b64.as_str()));
26931            }
26932        }
26933        if let Some(ref val) = self.revisions_salt_value {
26934            {
26935                let b64 = encode_base64(val);
26936                start.push_attribute(("revisionsSaltValue", b64.as_str()));
26937            }
26938        }
26939        if let Some(ref val) = self.revisions_spin_count {
26940            {
26941                let s = val.to_string();
26942                start.push_attribute(("revisionsSpinCount", s.as_str()));
26943            }
26944        }
26945        if let Some(ref val) = self.workbook_algorithm_name {
26946            start.push_attribute(("workbookAlgorithmName", val.as_str()));
26947        }
26948        if let Some(ref val) = self.workbook_hash_value {
26949            {
26950                let b64 = encode_base64(val);
26951                start.push_attribute(("workbookHashValue", b64.as_str()));
26952            }
26953        }
26954        if let Some(ref val) = self.workbook_salt_value {
26955            {
26956                let b64 = encode_base64(val);
26957                start.push_attribute(("workbookSaltValue", b64.as_str()));
26958            }
26959        }
26960        if let Some(ref val) = self.workbook_spin_count {
26961            {
26962                let s = val.to_string();
26963                start.push_attribute(("workbookSpinCount", s.as_str()));
26964            }
26965        }
26966        #[cfg(feature = "extra-attrs")]
26967        for (key, value) in &self.extra_attrs {
26968            start.push_attribute((key.as_str(), value.as_str()));
26969        }
26970        start
26971    }
26972
26973    fn is_empty_element(&self) -> bool {
26974        true
26975    }
26976}
26977
26978impl ToXml for WebPublishing {
26979    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
26980        #[allow(unused_mut)]
26981        let mut start = start;
26982        if let Some(ref val) = self.css {
26983            start.push_attribute(("css", if *val { "1" } else { "0" }));
26984        }
26985        if let Some(ref val) = self.thicket {
26986            start.push_attribute(("thicket", if *val { "1" } else { "0" }));
26987        }
26988        if let Some(ref val) = self.long_file_names {
26989            start.push_attribute(("longFileNames", if *val { "1" } else { "0" }));
26990        }
26991        if let Some(ref val) = self.vml {
26992            start.push_attribute(("vml", if *val { "1" } else { "0" }));
26993        }
26994        if let Some(ref val) = self.allow_png {
26995            start.push_attribute(("allowPng", if *val { "1" } else { "0" }));
26996        }
26997        if let Some(ref val) = self.target_screen_size {
26998            {
26999                let s = val.to_string();
27000                start.push_attribute(("targetScreenSize", s.as_str()));
27001            }
27002        }
27003        if let Some(ref val) = self.dpi {
27004            {
27005                let s = val.to_string();
27006                start.push_attribute(("dpi", s.as_str()));
27007            }
27008        }
27009        if let Some(ref val) = self.code_page {
27010            {
27011                let s = val.to_string();
27012                start.push_attribute(("codePage", s.as_str()));
27013            }
27014        }
27015        if let Some(ref val) = self.character_set {
27016            start.push_attribute(("characterSet", val.as_str()));
27017        }
27018        #[cfg(feature = "extra-attrs")]
27019        for (key, value) in &self.extra_attrs {
27020            start.push_attribute((key.as_str(), value.as_str()));
27021        }
27022        start
27023    }
27024
27025    fn is_empty_element(&self) -> bool {
27026        true
27027    }
27028}
27029
27030impl ToXml for CTFunctionGroups {
27031    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
27032        #[allow(unused_mut)]
27033        let mut start = start;
27034        if let Some(ref val) = self.built_in_group_count {
27035            {
27036                let s = val.to_string();
27037                start.push_attribute(("builtInGroupCount", s.as_str()));
27038            }
27039        }
27040        #[cfg(feature = "extra-attrs")]
27041        for (key, value) in &self.extra_attrs {
27042            start.push_attribute((key.as_str(), value.as_str()));
27043        }
27044        start
27045    }
27046
27047    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
27048        #[cfg(feature = "extra-children")]
27049        let mut extra_iter = self.extra_children.iter().peekable();
27050        #[cfg(feature = "extra-children")]
27051        let mut emit_idx: usize = 0;
27052        for item in &self.function_group {
27053            #[cfg(feature = "extra-children")]
27054            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
27055                extra_iter
27056                    .next()
27057                    .unwrap()
27058                    .node
27059                    .write_to(writer)
27060                    .map_err(SerializeError::from)?;
27061            }
27062            item.write_element("functionGroup", writer)?;
27063            #[cfg(feature = "extra-children")]
27064            {
27065                emit_idx += 1;
27066            }
27067        }
27068        #[cfg(feature = "extra-children")]
27069        for extra in extra_iter {
27070            extra.node.write_to(writer).map_err(SerializeError::from)?;
27071        }
27072        Ok(())
27073    }
27074
27075    fn is_empty_element(&self) -> bool {
27076        if !self.function_group.is_empty() {
27077            return false;
27078        }
27079        #[cfg(feature = "extra-children")]
27080        if !self.extra_children.is_empty() {
27081            return false;
27082        }
27083        true
27084    }
27085}
27086
27087impl ToXml for CTFunctionGroup {
27088    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
27089        #[allow(unused_mut)]
27090        let mut start = start;
27091        if let Some(ref val) = self.name {
27092            start.push_attribute(("name", val.as_str()));
27093        }
27094        #[cfg(feature = "extra-attrs")]
27095        for (key, value) in &self.extra_attrs {
27096            start.push_attribute((key.as_str(), value.as_str()));
27097        }
27098        start
27099    }
27100
27101    fn is_empty_element(&self) -> bool {
27102        true
27103    }
27104}
27105
27106impl ToXml for CTWebPublishObjects {
27107    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
27108        #[allow(unused_mut)]
27109        let mut start = start;
27110        if let Some(ref val) = self.count {
27111            {
27112                let s = val.to_string();
27113                start.push_attribute(("count", s.as_str()));
27114            }
27115        }
27116        #[cfg(feature = "extra-attrs")]
27117        for (key, value) in &self.extra_attrs {
27118            start.push_attribute((key.as_str(), value.as_str()));
27119        }
27120        start
27121    }
27122
27123    fn write_children<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), SerializeError> {
27124        #[cfg(feature = "extra-children")]
27125        let mut extra_iter = self.extra_children.iter().peekable();
27126        #[cfg(feature = "extra-children")]
27127        let mut emit_idx: usize = 0;
27128        for item in &self.web_publish_object {
27129            #[cfg(feature = "extra-children")]
27130            while extra_iter.peek().is_some_and(|e| e.position <= emit_idx) {
27131                extra_iter
27132                    .next()
27133                    .unwrap()
27134                    .node
27135                    .write_to(writer)
27136                    .map_err(SerializeError::from)?;
27137            }
27138            item.write_element("webPublishObject", writer)?;
27139            #[cfg(feature = "extra-children")]
27140            {
27141                emit_idx += 1;
27142            }
27143        }
27144        #[cfg(feature = "extra-children")]
27145        for extra in extra_iter {
27146            extra.node.write_to(writer).map_err(SerializeError::from)?;
27147        }
27148        Ok(())
27149    }
27150
27151    fn is_empty_element(&self) -> bool {
27152        if !self.web_publish_object.is_empty() {
27153            return false;
27154        }
27155        #[cfg(feature = "extra-children")]
27156        if !self.extra_children.is_empty() {
27157            return false;
27158        }
27159        true
27160    }
27161}
27162
27163impl ToXml for CTWebPublishObject {
27164    fn write_attrs<'a>(&self, start: BytesStart<'a>) -> BytesStart<'a> {
27165        #[allow(unused_mut)]
27166        let mut start = start;
27167        {
27168            let val = &self.id;
27169            {
27170                let s = val.to_string();
27171                start.push_attribute(("id", s.as_str()));
27172            }
27173        }
27174        {
27175            let val = &self.div_id;
27176            start.push_attribute(("divId", val.as_str()));
27177        }
27178        if let Some(ref val) = self.source_object {
27179            start.push_attribute(("sourceObject", val.as_str()));
27180        }
27181        {
27182            let val = &self.destination_file;
27183            start.push_attribute(("destinationFile", val.as_str()));
27184        }
27185        if let Some(ref val) = self.title {
27186            start.push_attribute(("title", val.as_str()));
27187        }
27188        if let Some(ref val) = self.auto_republish {
27189            start.push_attribute(("autoRepublish", if *val { "1" } else { "0" }));
27190        }
27191        #[cfg(feature = "extra-attrs")]
27192        for (key, value) in &self.extra_attrs {
27193            start.push_attribute((key.as_str(), value.as_str()));
27194        }
27195        start
27196    }
27197
27198    fn is_empty_element(&self) -> bool {
27199        true
27200    }
27201}