umya_spreadsheet/structs/drawing/
rotation.rs1use super::super::Int32Value;
3use crate::reader::driver::*;
4use crate::writer::driver::*;
5use quick_xml::events::BytesStart;
6use quick_xml::Reader;
7use quick_xml::Writer;
8use std::io::Cursor;
9
10#[derive(Clone, Default, Debug, Eq, Ord, PartialEq, PartialOrd)]
11pub struct Rotation {
12 latitude: Int32Value,
13 longitude: Int32Value,
14 revolution: Int32Value,
15}
16
17impl Rotation {
18 #[inline]
19 pub fn get_latitude(&self) -> &i32 {
20 self.latitude.get_value()
21 }
22
23 #[inline]
24 pub fn set_latitude(&mut self, value: i32) -> &mut Self {
25 self.latitude.set_value(value);
26 self
27 }
28
29 #[inline]
30 pub fn get_longitude(&self) -> &i32 {
31 self.longitude.get_value()
32 }
33
34 #[inline]
35 pub fn set_longitude(&mut self, value: i32) -> &mut Self {
36 self.longitude.set_value(value);
37 self
38 }
39
40 #[inline]
41 pub fn get_revolution(&self) -> &i32 {
42 self.revolution.get_value()
43 }
44
45 #[inline]
46 pub fn set_revolution(&mut self, value: i32) -> &mut Self {
47 self.revolution.set_value(value);
48 self
49 }
50
51 #[inline]
52 pub(crate) fn set_attributes<R: std::io::BufRead>(
53 &mut self,
54 _reader: &mut Reader<R>,
55 e: &BytesStart,
56 ) {
57 set_string_from_xml!(self, e, latitude, "lat");
58 set_string_from_xml!(self, e, longitude, "lon");
59 set_string_from_xml!(self, e, revolution, "rev");
60 }
61
62 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
63 let mut attributes: Vec<(&str, &str)> = Vec::new();
64 let latitude = self.latitude.get_value_string();
65 if self.latitude.has_value() {
66 attributes.push(("lat", &latitude));
67 }
68 let longitude = self.longitude.get_value_string();
69 if self.longitude.has_value() {
70 attributes.push(("lon", &longitude));
71 }
72 let revolution = self.revolution.get_value_string();
73 if self.latitude.has_value() {
74 attributes.push(("rev", &revolution));
75 }
76 write_start_tag(writer, "a:rot", attributes, true);
77 }
78}