Skip to main content

umya_spreadsheet/structs/drawing/
rotation.rs

1// a:rot
2use std::io::Cursor;
3
4use quick_xml::{
5    Reader,
6    Writer,
7    events::BytesStart,
8};
9
10use super::super::Int32Value;
11use crate::{
12    reader::driver::{
13        get_attribute,
14        set_string_from_xml,
15    },
16    writer::driver::write_start_tag,
17};
18
19#[derive(Clone, Default, Debug, Eq, Ord, PartialEq, PartialOrd)]
20pub struct Rotation {
21    latitude:   Int32Value,
22    longitude:  Int32Value,
23    revolution: Int32Value,
24}
25
26impl Rotation {
27    #[inline]
28    #[must_use]
29    pub fn latitude(&self) -> i32 {
30        self.latitude.value()
31    }
32
33    #[inline]
34    #[must_use]
35    #[deprecated(since = "3.0.0", note = "Use latitude()")]
36    pub fn get_latitude(&self) -> i32 {
37        self.latitude()
38    }
39
40    #[inline]
41    pub fn set_latitude(&mut self, value: i32) -> &mut Self {
42        self.latitude.set_value(value);
43        self
44    }
45
46    #[inline]
47    #[must_use]
48    pub fn longitude(&self) -> i32 {
49        self.longitude.value()
50    }
51
52    #[inline]
53    #[must_use]
54    #[deprecated(since = "3.0.0", note = "Use longitude()")]
55    pub fn get_longitude(&self) -> i32 {
56        self.longitude()
57    }
58
59    #[inline]
60    pub fn set_longitude(&mut self, value: i32) -> &mut Self {
61        self.longitude.set_value(value);
62        self
63    }
64
65    #[inline]
66    #[must_use]
67    pub fn revolution(&self) -> i32 {
68        self.revolution.value()
69    }
70
71    #[inline]
72    #[must_use]
73    #[deprecated(since = "3.0.0", note = "Use revolution()")]
74    pub fn get_revolution(&self) -> i32 {
75        self.revolution()
76    }
77
78    #[inline]
79    pub fn set_revolution(&mut self, value: i32) -> &mut Self {
80        self.revolution.set_value(value);
81        self
82    }
83
84    #[inline]
85    pub(crate) fn set_attributes<R: std::io::BufRead>(
86        &mut self,
87        _reader: &mut Reader<R>,
88        e: &BytesStart,
89    ) {
90        set_string_from_xml!(self, e, latitude, "lat");
91        set_string_from_xml!(self, e, longitude, "lon");
92        set_string_from_xml!(self, e, revolution, "rev");
93    }
94
95    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
96        let mut attributes: crate::structs::AttrCollection = Vec::new();
97        let latitude = self.latitude.value_string();
98        if self.latitude.has_value() {
99            attributes.push(("lat", &latitude).into());
100        }
101        let longitude = self.longitude.value_string();
102        if self.longitude.has_value() {
103            attributes.push(("lon", &longitude).into());
104        }
105        let revolution = self.revolution.value_string();
106        if self.latitude.has_value() {
107            attributes.push(("rev", &revolution).into());
108        }
109        write_start_tag(writer, "a:rot", attributes, true);
110    }
111}