Skip to main content

excelize_rs/xml/
shared_strings.rs

1//! Shared string table part (`xl/sharedStrings.xml`).
2//!
3//! Ported from Go `xmlSharedStrings.go`.
4
5use serde::{Deserialize, Serialize};
6
7use super::common::{XlsxPhoneticPr, XlsxPhoneticRun, XlsxR, XlsxT};
8
9fn default_xmlns() -> String {
10    crate::constants::NAMESPACE_SPREADSHEET.to_string()
11}
12
13/// Directly maps the `sst` element.
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15#[serde(rename = "sst", rename_all = "PascalCase")]
16pub struct XlsxSst {
17    #[serde(rename = "@xmlns", default = "default_xmlns")]
18    pub xmlns: String,
19    #[serde(rename = "@count", default)]
20    pub count: i64,
21    #[serde(rename = "@uniqueCount", default)]
22    pub unique_count: i64,
23    #[serde(rename = "si", default)]
24    pub si: Vec<XlsxSi>,
25}
26
27impl Default for XlsxSst {
28    fn default() -> Self {
29        Self {
30            xmlns: default_xmlns(),
31            count: 0,
32            unique_count: 0,
33            si: Vec::new(),
34        }
35    }
36}
37
38/// String item in the shared string table.
39#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
40pub struct XlsxSi {
41    #[serde(rename = "t", default, skip_serializing_if = "Option::is_none")]
42    pub t: Option<XlsxT>,
43    #[serde(rename = "r", default)]
44    pub r: Vec<XlsxR>,
45    #[serde(rename = "rPh", default)]
46    pub r_ph: Vec<XlsxPhoneticRun>,
47    #[serde(rename = "phoneticPr", default, skip_serializing_if = "Option::is_none")]
48    pub phonetic_pr: Option<XlsxPhoneticPr>,
49}