1use serde::Deserialize;
2use std::io::{self, BufReader, Read};
3
4use quick_xml::de::Deserializer;
5use zip::ZipArchive;
6
7use crate::model::Model;
8use crate::Error;
9
10pub fn read<R: Read + io::Seek>(reader: R) -> Result<Vec<Model>, Error> {
12 let mut zip = ZipArchive::new(reader)?;
13 let mut models = Vec::new();
14
15 for i in 0..zip.len() {
16 let file = zip.by_index(i)?;
17 if file.name().ends_with(".model") {
18 let mut de = Deserializer::from_reader(BufReader::new(file));
19 models.push(Model::deserialize(&mut de)?);
20 }
21 }
22
23 Ok(models)
24}