umya_spreadsheet/reader/xlsx/
content_types.rs1use 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}