umya_spreadsheet/structs/drawing/charts/
numbering_cache.rs1use super::FormatCode;
3use crate::structs::Address;
4use crate::structs::Spreadsheet;
5use crate::writer::driver::*;
6use crate::xml_read_loop;
7use quick_xml::events::{BytesStart, Event};
8use quick_xml::Reader;
9use quick_xml::Writer;
10use std::io::Cursor;
11
12#[derive(Clone, Default, Debug)]
13pub struct NumberingCache {
14 format_code: FormatCode,
15}
16
17impl NumberingCache {
18 pub fn get_format_code(&self) -> &FormatCode {
19 &self.format_code
20 }
21
22 pub fn get_format_code_mut(&mut self) -> &mut FormatCode {
23 &mut self.format_code
24 }
25
26 pub fn set_format_code(&mut self, value: FormatCode) -> &mut NumberingCache {
27 self.format_code = value;
28 self
29 }
30
31 pub(crate) fn set_attributes<R: std::io::BufRead>(
32 &mut self,
33 reader: &mut Reader<R>,
34 _e: &BytesStart,
35 ) {
36 xml_read_loop!(
37 reader,
38 Event::Start(ref e) => {
39 if e.name().0 == b"c:formatCode" {
40 self.format_code.set_attributes(reader, e);
41 }
42 },
43 Event::End(ref e) => {
44 if e.name().0 == b"c:numCache" {
45 return;
46 }
47 },
48 Event::Eof => panic!("Error: Could not find {} end element", "c:numCache"),
49 );
50 }
51
52 pub(crate) fn write_to(
53 &self,
54 writer: &mut Writer<Cursor<Vec<u8>>>,
55 address: &Address,
56 spreadsheet: &Spreadsheet,
57 ) {
58 let cell_value_list = spreadsheet.get_cell_value_by_address_crate(address);
59 let coll_value_count = cell_value_list.len().to_string();
60 write_start_tag(writer, "c:numCache", vec![], false);
62
63 self.format_code.write_to(writer);
65
66 write_start_tag(writer, "c:ptCount", vec![("val", &coll_value_count)], true);
68
69 for (idx, cell_value) in cell_value_list.into_iter().enumerate() {
70 write_start_tag(writer, "c:pt", vec![("idx", &idx.to_string())], false);
72
73 write_start_tag(writer, "c:v", vec![], false);
75 write_text_node(writer, cell_value.get_value());
76 write_end_tag(writer, "c:v");
77
78 write_end_tag(writer, "c:pt");
79 }
80
81 write_end_tag(writer, "c:numCache");
82 }
83}