1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use std::io::Read; use crate::imp::structs::metadata::Metadata; use crate::ArcResult; use std::collections::{BTreeMap}; use crate::imp::structs::archive_data::ArchiveData; pub fn read_archive_data(read : &mut impl Read) -> ArcResult<ArchiveData>{ let (meta, _size) = Metadata::from_bytes(read)?; let mut map : BTreeMap<String, String> = BTreeMap::new(); let mut decoder = snap::read::FrameDecoder::new(read); for item in meta.items(){ let mut buf = Vec::with_capacity(item.len() as usize); unsafe{ buf.set_len(item.len() as usize); } decoder.read_exact(&mut buf)?; let txt = String::from_utf8(buf)?; map.insert(item.file_stem().to_string(), txt); } Ok(ArchiveData::new(meta, map)) }