umya_spreadsheet/reader/xlsx/
content_types.rs

1use super::driver::*;
2use super::XlsxError;
3use crate::helper::const_str::*;
4use crate::structs::Spreadsheet;
5use quick_xml::events::Event;
6use quick_xml::Reader;
7use std::{io, result};
8
9pub(crate) fn read<R: io::Read + io::Seek>(
10    arv: &mut zip::ZipArchive<R>,
11    spreadsheet: &mut Spreadsheet,
12) -> result::Result<(), XlsxError> {
13    let r = io::BufReader::new(arv.by_name(CONTENT_TYPES)?);
14    let mut reader = Reader::from_reader(r);
15    reader.config_mut().trim_text(true);
16    let mut list: Vec<(String, String)> = Vec::new();
17
18    xml_read_loop!(
19        reader,
20        Event::Empty(ref e) => {
21            if e.name().into_inner() == b"Override" {
22                let part_name = get_attribute(e, b"PartName").unwrap();
23                let content_type = get_attribute(e, b"ContentType").unwrap();
24                list.push((part_name, content_type));
25            }
26        },
27        Event::Eof => break,
28    );
29
30    spreadsheet.set_backup_context_types(list);
31    Ok(())
32}