logisheets_workbook/ooxml/
external_links.rs1use super::{
2 complex_types::PlainTextString,
3 defaults::*,
4 simple_types::{StCellRef, StCellType},
5};
6use xmlserde_derives::{XmlDeserialize, XmlSerialize};
7
8#[derive(Debug, XmlSerialize, XmlDeserialize)]
9#[xmlserde(root = b"externalLink")]
10#[xmlserde(with_ns = b"http://schemas.openxmlformats.org/spreadsheetml/2006/main")]
11pub struct ExternalLinkPart {
12 #[xmlserde(name = b"externalBook", ty = "child")]
13 pub external_book: Option<CtExternalBook>,
14 }
17
18#[derive(Debug, XmlSerialize, XmlDeserialize)]
19pub struct CtExternalBook {
20 #[xmlserde(name = b"sheetNames", ty = "child")]
21 pub sheet_names: Option<CtExternalSheetNames>,
22 #[xmlserde(name = b"definedNames", ty = "child")]
23 pub defined_names: Option<CtExternalDefinedNames>,
24 #[xmlserde(name = b"sheetDataSet", ty = "child")]
25 pub sheet_data_set: Option<CtExternalSheetDataSet>,
26 #[xmlserde(name = b"r:id", ty = "attr")]
27 pub id: String,
28}
29
30#[derive(Debug, XmlSerialize, XmlDeserialize)]
31pub struct CtExternalSheetNames {
32 #[xmlserde(name = b"sheetName", ty = "child")]
33 pub names: Vec<CtExternalSheetName>,
34}
35
36#[derive(Debug, XmlSerialize, XmlDeserialize)]
37pub struct CtExternalSheetName {
38 #[xmlserde(name = b"val", ty = "attr")]
39 pub val: String,
40}
41
42#[derive(Debug, XmlSerialize, XmlDeserialize)]
43pub struct CtExternalDefinedNames {
44 #[xmlserde(name = b"definedName", ty = "child")]
45 pub names: Vec<CtExternalDefinedName>,
46}
47
48#[derive(Debug, XmlSerialize, XmlDeserialize)]
49pub struct CtExternalDefinedName {
50 #[xmlserde(name = b"name", ty = "attr")]
51 pub name: String,
52 #[xmlserde(name = b"refersTo", ty = "attr")]
53 pub refers_to: Option<String>,
54 #[xmlserde(name = b"sheetId", ty = "attr")]
55 pub sheet_id: Option<u32>,
56}
57
58#[derive(Debug, XmlSerialize, XmlDeserialize)]
59pub struct CtExternalSheetDataSet {
60 #[xmlserde(name = b"sheetData", ty = "child")]
61 pub data: Vec<CtExternalSheetData>,
62}
63
64#[derive(Debug, XmlSerialize, XmlDeserialize)]
65pub struct CtExternalSheetData {
66 #[xmlserde(name = b"row", ty = "child")]
67 pub rows: Vec<CtExternalRow>,
68 #[xmlserde(name = b"sheetId", ty = "attr")]
69 pub sheet_id: u32,
70 #[xmlserde(name = b"refreshError", ty = "attr", default = "default_false")]
71 pub refresh_error: bool,
72}
73
74#[derive(Debug, XmlSerialize, XmlDeserialize)]
75pub struct CtExternalRow {
76 #[xmlserde(name = b"cell", ty = "child")]
77 pub cells: Vec<CtExternalCell>,
78 #[xmlserde(name = b"r", ty = "attr")]
79 pub r: u32,
80}
81
82#[derive(Debug, XmlSerialize, XmlDeserialize)]
83pub struct CtExternalCell {
84 #[xmlserde(name = b"v", ty = "child")]
85 pub v: Option<PlainTextString>,
86 #[xmlserde(name = b"r", ty = "attr")]
87 pub r: Option<StCellRef>,
88 #[xmlserde(name = b"t", ty = "attr", default = "st_cell_type_n")]
89 pub t: StCellType,
90 #[xmlserde(name = b"vm", ty = "attr", default = "default_zero_u32")]
91 pub vm: u32,
92}
93
94#[cfg(test)]
95mod tests {
96 use super::ExternalLinkPart;
97 use crate::xml_deserialize_from_str;
98 #[test]
99 fn test1() {
100 let xml = include_str!("../../examples/external_link.xml");
101 let r = xml_deserialize_from_str::<ExternalLinkPart>(xml);
102 match r {
103 Ok(external_link) => {
104 let book = external_link.external_book.unwrap();
105 assert_eq!(book.sheet_names.unwrap().names.len(), 12);
106 }
122 Err(e) => panic!("{:?}", e),
123 }
124 }
125}