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