umya_spreadsheet/structs/
data_validations.rs

1// dataValidations
2use super::DataValidation;
3use crate::reader::driver::*;
4use crate::writer::driver::*;
5use quick_xml::events::{BytesStart, Event};
6use quick_xml::Reader;
7use quick_xml::Writer;
8use std::io::Cursor;
9use thin_vec::ThinVec;
10
11#[derive(Default, Debug, Clone)]
12pub struct DataValidations {
13    data_validation_list: ThinVec<DataValidation>,
14}
15
16impl DataValidations {
17    #[inline]
18    pub fn get_data_validation_list(&self) -> &[DataValidation] {
19        &self.data_validation_list
20    }
21
22    #[inline]
23    pub fn get_data_validation_list_mut(&mut self) -> &mut ThinVec<DataValidation> {
24        &mut self.data_validation_list
25    }
26
27    #[inline]
28    pub fn set_data_validation_list(
29        &mut self,
30        value: impl Into<ThinVec<DataValidation>>,
31    ) -> &mut Self {
32        self.data_validation_list = value.into();
33        self
34    }
35
36    #[inline]
37    pub fn add_data_validation_list(&mut self, value: DataValidation) -> &mut Self {
38        self.data_validation_list.push(value);
39        self
40    }
41
42    pub(crate) fn set_attributes<R: std::io::BufRead>(
43        &mut self,
44        reader: &mut Reader<R>,
45        _e: &BytesStart,
46    ) {
47        xml_read_loop!(
48            reader,
49            Event::Empty(ref e) => {
50                if e.name().into_inner() == b"dataValidation" {
51                    let mut obj = DataValidation::default();
52                    obj.set_attributes(reader, e, true);
53                    self.add_data_validation_list(obj);
54                }
55            },
56            Event::Start(ref e) => {
57                if e.name().into_inner() == b"dataValidation" {
58                    let mut obj = DataValidation::default();
59                    obj.set_attributes(reader, e, false);
60                    self.add_data_validation_list(obj);
61                }
62            },
63            Event::End(ref e) => {
64                if e.name().into_inner() == b"dataValidations" {
65                    return
66                }
67            },
68            Event::Eof => panic!("Error: Could not find {} end element", "dataValidations")
69        );
70    }
71
72    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
73        // dataValidations
74        let mut attributes: Vec<(&str, &str)> = Vec::new();
75
76        let count = self.data_validation_list.len().to_string();
77        attributes.push(("count", &count));
78
79        write_start_tag(writer, "dataValidations", attributes, false);
80
81        for obj in &self.data_validation_list {
82            obj.write_to(writer);
83        }
84
85        write_end_tag(writer, "dataValidations");
86    }
87}