use super::{
complex_types::PlainTextString,
defaults::*,
simple_types::{StCellRef, StCellType},
};
use xmlserde_derives::{XmlDeserialize, XmlSerialize};
#[derive(Debug, XmlSerialize, XmlDeserialize)]
#[xmlserde(root = b"externalLink")]
#[xmlserde(with_ns = b"http://schemas.openxmlformats.org/spreadsheetml/2006/main")]
pub struct ExternalLinkPart {
#[xmlserde(name = b"externalBook", ty = "child")]
pub external_book: Option<CtExternalBook>,
}
#[derive(Debug, XmlSerialize, XmlDeserialize)]
pub struct CtExternalBook {
#[xmlserde(name = b"sheetNames", ty = "child")]
pub sheet_names: Option<CtExternalSheetNames>,
#[xmlserde(name = b"definedNames", ty = "child")]
pub defined_names: Option<CtExternalDefinedNames>,
#[xmlserde(name = b"sheetDataSet", ty = "child")]
pub sheet_data_set: Option<CtExternalSheetDataSet>,
#[xmlserde(name = b"r:id", ty = "attr")]
pub id: String,
}
#[derive(Debug, XmlSerialize, XmlDeserialize)]
pub struct CtExternalSheetNames {
#[xmlserde(name = b"sheetName", ty = "child")]
pub names: Vec<CtExternalSheetName>,
}
#[derive(Debug, XmlSerialize, XmlDeserialize)]
pub struct CtExternalSheetName {
#[xmlserde(name = b"val", ty = "attr")]
pub val: String,
}
#[derive(Debug, XmlSerialize, XmlDeserialize)]
pub struct CtExternalDefinedNames {
#[xmlserde(name = b"definedName", ty = "child")]
pub names: Vec<CtExternalDefinedName>,
}
#[derive(Debug, XmlSerialize, XmlDeserialize)]
pub struct CtExternalDefinedName {
#[xmlserde(name = b"name", ty = "attr")]
pub name: String,
#[xmlserde(name = b"refersTo", ty = "attr")]
pub refers_to: Option<String>,
#[xmlserde(name = b"sheetId", ty = "attr")]
pub sheet_id: Option<u32>,
}
#[derive(Debug, XmlSerialize, XmlDeserialize)]
pub struct CtExternalSheetDataSet {
#[xmlserde(name = b"sheetData", ty = "child")]
pub data: Vec<CtExternalSheetData>,
}
#[derive(Debug, XmlSerialize, XmlDeserialize)]
pub struct CtExternalSheetData {
#[xmlserde(name = b"row", ty = "child")]
pub rows: Vec<CtExternalRow>,
#[xmlserde(name = b"sheetId", ty = "attr")]
pub sheet_id: u32,
#[xmlserde(name = b"refreshError", ty = "attr", default = "default_false")]
pub refresh_error: bool,
}
#[derive(Debug, XmlSerialize, XmlDeserialize)]
pub struct CtExternalRow {
#[xmlserde(name = b"cell", ty = "child")]
pub cells: Vec<CtExternalCell>,
#[xmlserde(name = b"r", ty = "attr")]
pub r: u32,
}
#[derive(Debug, XmlSerialize, XmlDeserialize)]
pub struct CtExternalCell {
#[xmlserde(name = b"v", ty = "child")]
pub v: Option<PlainTextString>,
#[xmlserde(name = b"r", ty = "attr")]
pub r: Option<StCellRef>,
#[xmlserde(name = b"t", ty = "attr", default = "st_cell_type_n")]
pub t: StCellType,
#[xmlserde(name = b"vm", ty = "attr", default = "default_zero_u32")]
pub vm: u32,
}
#[cfg(test)]
mod tests {
use super::ExternalLinkPart;
use crate::xml_deserialize_from_str;
#[test]
fn test1() {
let xml = include_str!("../../examples/external_link.xml");
let r = xml_deserialize_from_str::<ExternalLinkPart>(xml);
match r {
Ok(external_link) => {
let book = external_link.external_book.unwrap();
assert_eq!(book.sheet_names.unwrap().names.len(), 12);
}
Err(e) => panic!("{:?}", e),
}
}
}