umya_spreadsheet/structs/
protection.rs1use super::BooleanValue;
3use crate::reader::driver::*;
4use crate::writer::driver::*;
5use md5::Digest;
6use quick_xml::events::BytesStart;
7use quick_xml::Reader;
8use quick_xml::Writer;
9use std::io::Cursor;
10
11#[derive(Default, Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
12pub struct Protection {
13 locked: BooleanValue,
14 hidden: BooleanValue,
15}
16
17impl Protection {
18 #[inline]
19 pub fn get_locked(&self) -> &bool {
20 self.locked.get_value()
21 }
22
23 #[inline]
24 pub fn set_locked(&mut self, value: bool) {
25 self.locked.set_value(value);
26 }
27
28 #[inline]
29 pub fn get_hidden(&mut self) -> &bool {
30 self.hidden.get_value()
31 }
32
33 #[inline]
34 pub fn set_hidden(&mut self, value: bool) {
35 self.hidden.set_value(value);
36 }
37
38 #[inline]
39 pub(crate) fn get_hash_code(&self) -> String {
40 format!(
41 "{:x}",
42 md5::Md5::digest(format!(
43 "{}{}",
44 &self.locked.get_hash_string(),
45 &self.hidden.get_hash_string()
46 ))
47 )
48 }
49
50 #[inline]
51 pub(crate) fn set_attributes<R: std::io::BufRead>(
52 &mut self,
53 _reader: &mut Reader<R>,
54 e: &BytesStart,
55 ) {
56 set_string_from_xml!(self, e, locked, "locked");
57 set_string_from_xml!(self, e, hidden, "hidden");
58 }
59
60 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
61 let mut attributes: Vec<(&str, &str)> = Vec::new();
63 if self.locked.has_value() {
64 attributes.push(("locked", self.locked.get_value_string()));
65 }
66 if self.hidden.has_value() {
67 attributes.push(("hidden", self.hidden.get_value_string()));
68 }
69 write_start_tag(writer, "protection", attributes, true);
70 }
71}