umya_spreadsheet/structs/
data_validations.rs1use 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 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}