umya_spreadsheet/structs/drawing/charts/
numbering_cache.rs

1// c:numCache
2use 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        // c:numCache
61        write_start_tag(writer, "c:numCache", vec![], false);
62
63        // c:formatCode
64        self.format_code.write_to(writer);
65
66        // c:ptCount
67        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            // c:pt
71            write_start_tag(writer, "c:pt", vec![("idx", &idx.to_string())], false);
72
73            // c:v
74            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}