1use std::io::{self, Read, Seek};
2use zip::ZipArchive;
3
4pub struct ZipDocumentReader<R: Read + Seek> {
6 pub(crate) zip: ZipArchive<R>,
7}
8
9impl<R: Read + Seek> ZipDocumentReader<R> {
10 pub fn new(r: R) -> io::Result<Self> {
12 Ok(Self { zip: ZipArchive::new(r)? })
13 }
14 pub fn read_all(
16 &mut self,
17 name: &str,
18 ) -> io::Result<Vec<u8>> {
19 let mut f = self.zip.by_name(name)?;
20 let mut buf = Vec::with_capacity(f.size() as usize);
21 std::io::copy(&mut f, &mut buf)?;
22 Ok(buf)
23 }
24}