umya_spreadsheet/structs/
from_marker.rs

1// from
2use crate::reader::driver::*;
3use crate::writer::driver::*;
4use quick_xml::events::{BytesStart, Event};
5use quick_xml::Reader;
6use quick_xml::Writer;
7use std::io::Cursor;
8
9#[derive(Clone, Default, Debug)]
10pub struct FromMarker {
11    col: usize,
12    col_off: usize,
13    row: usize,
14    row_off: usize,
15}
16
17impl FromMarker {
18    #[inline]
19    pub fn get_col(&self) -> &usize {
20        &self.col
21    }
22
23    #[inline]
24    pub fn set_col(&mut self, value: usize) -> &mut FromMarker {
25        self.col = value;
26        self
27    }
28
29    #[inline]
30    pub fn get_col_off(&self) -> &usize {
31        &self.col_off
32    }
33
34    #[inline]
35    pub fn set_col_off(&mut self, value: usize) -> &mut FromMarker {
36        self.col_off = value;
37        self
38    }
39
40    #[inline]
41    pub fn get_row(&self) -> &usize {
42        &self.row
43    }
44
45    #[inline]
46    pub fn set_row(&mut self, value: usize) -> &mut FromMarker {
47        self.row = value;
48        self
49    }
50
51    #[inline]
52    pub fn get_row_off(&self) -> &usize {
53        &self.row_off
54    }
55
56    #[inline]
57    pub fn set_row_off(&mut self, value: usize) -> &mut FromMarker {
58        self.row_off = value;
59        self
60    }
61
62    #[inline]
63    pub(crate) fn _adjustment_insert_row(&mut self, num_rows: &usize) {
64        self.row += num_rows;
65    }
66
67    #[inline]
68    pub(crate) fn _adjustment_insert_column(&mut self, num_cols: &usize) {
69        self.col += num_cols;
70    }
71
72    #[inline]
73    pub(crate) fn _adjustment_remove_row(&mut self, num_rows: &usize) {
74        self.row = if &self.row > num_rows {
75            self.row - num_rows
76        } else {
77            1
78        };
79    }
80
81    #[inline]
82    pub(crate) fn _adjustment_remove_column(&mut self, num_cols: &usize) {
83        self.col = if &self.col > num_cols {
84            self.col - num_cols
85        } else {
86            1
87        };
88    }
89
90    pub(crate) fn set_attributes<R: std::io::BufRead>(
91        &mut self,
92        reader: &mut Reader<R>,
93        _e: &BytesStart,
94    ) {
95        let mut string_value: String = String::new();
96        xml_read_loop!(
97            reader,
98            Event::Text(e) => string_value = e.unescape().unwrap().to_string(),
99            Event::End(ref e) => match e.name().into_inner() {
100                b"xdr:col" => {
101                    self.col = string_value.parse::<usize>().unwrap();
102                }
103                b"xdr:colOff" => {
104                    self.col_off = string_value.parse::<usize>().unwrap();
105                }
106                b"xdr:row" => {
107                    self.row = string_value.parse::<usize>().unwrap();
108                }
109                b"xdr:rowOff" => {
110                    self.row_off = string_value.parse::<usize>().unwrap();
111                }
112                b"from" => return,
113                _ => (),
114            },
115            Event::Eof => panic!("Error: Could not find {} end element", "from")
116        );
117    }
118
119    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
120        // from
121        write_start_tag(writer, "from", vec![], false);
122
123        // xdr:col
124        write_start_tag(writer, "xdr:col", vec![], false);
125        write_text_node(writer, &self.col.to_string());
126        write_end_tag(writer, "xdr:col");
127
128        // xdr:colOff
129        write_start_tag(writer, "xdr:colOff", vec![], false);
130        write_text_node(writer, &self.col_off.to_string());
131        write_end_tag(writer, "xdr:colOff");
132
133        // xdr:row
134        write_start_tag(writer, "xdr:row", vec![], false);
135        write_text_node(writer, &self.row.to_string());
136        write_end_tag(writer, "xdr:row");
137
138        // xdr:rowOff
139        write_start_tag(writer, "xdr:rowOff", vec![], false);
140        write_text_node(writer, &self.row_off.to_string());
141        write_end_tag(writer, "xdr:rowOff");
142
143        write_end_tag(writer, "from");
144    }
145}