Skip to main content

xlsbye_xml/
rels.rs

1use crate::writer::{Result, XmlWriter};
2use std::io::Write;
3use xlsbye_core::rels::{Relationship, TargetMode};
4use xlsbye_core::xml_names::PACKAGE_RELS_NS;
5
6pub fn write_relationships(writer: impl Write, rels: &[Relationship]) -> Result<()> {
7    let mut writer = XmlWriter::new(writer);
8    writer.write_xml_declaration()?;
9    writer.write_start_element_with_ns(
10        "Relationships",
11        [("", PACKAGE_RELS_NS)],
12        std::iter::empty::<(&str, &str)>(),
13    )?;
14
15    for rel in rels {
16        let mut attrs = vec![
17            ("Id".to_string(), rel.id.clone()),
18            ("Type".to_string(), rel.rel_type.clone()),
19            ("Target".to_string(), rel.target.clone()),
20        ];
21        if rel.target_mode == TargetMode::External {
22            attrs.push(("TargetMode".to_string(), "External".to_string()));
23        }
24        writer.write_empty_element("Relationship", attrs)?;
25    }
26
27    writer.write_end_element("Relationships")?;
28    Ok(())
29}