use std::io::Write;
use xlsbye_core::types::ParsedChartsheet;
use xlsbye_core::xml_names::{RELATIONSHIPS_NS, SPREADSHEET_NS};
use crate::writer::{Result, XmlWriter};
pub fn write_chartsheet(writer: impl Write, chartsheet: &ParsedChartsheet) -> Result<()> {
let mut writer = XmlWriter::new(writer);
writer.write_xml_declaration()?;
writer.write_start_element_with_ns(
"chartsheet",
[("", SPREADSHEET_NS), ("r", RELATIONSHIPS_NS)],
std::iter::empty::<(&str, &str)>(),
)?;
writer.write_start_element("sheetViews", std::iter::empty::<(&str, &str)>())?;
writer.write_empty_element("sheetView", [("workbookViewId", "0")])?;
writer.write_end_element("sheetViews")?;
if let Some(rel_id) = chartsheet.drawing_rel_id.as_deref() {
writer.write_empty_element("drawing", [("r:id", rel_id)])?;
}
writer.write_end_element("chartsheet")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn writes_chartsheet_xml() {
let parsed = ParsedChartsheet {
drawing_rel_id: Some("rId1".to_string()),
};
let mut out = Vec::new();
write_chartsheet(&mut out, &parsed).expect("chartsheet xml should be written");
let xml = String::from_utf8(out).expect("utf-8 xml");
assert!(xml.contains("<chartsheet "));
assert!(xml.contains("<sheetView workbookViewId=\"0\"/>"));
assert!(xml.contains("<drawing r:id=\"rId1\"/>"));
}
}