xeno_rs/archive/dmg.rs
1// use std::io::{BufReader, Read, Seek};
2// use std::path::PathBuf;
3// use std::sync::Arc;
4// use apple_dmg::DmgReader;
5
6// pub struct DmgArchive<R: Read + Seek> {
7// inner: DmgReader<R>,
8// password: Option<String>
9// }
10
11
12// pub struct DmgEntries<'a, R: Read + Seek> {
13// dmg_inner: Arc<&'a mut DmgReader<R>>,
14// current_partition: usize,
15// }
16
17// impl<'a, R: Read + Seek> Iterator for DmgEntries<'a, R> {
18// type Item = zip::result::ZipResult<ZipEntry<'a, R>>;
19
20// fn next(&mut self) -> Option<zip::result::ZipResult<ZipEntry<'a, R>>> {
21// if self.current >= self.total {
22// return None;
23// }
24
25// self.dmg_inner.plist().partitions().len();
26// let partition = self.dmg_inner.plist().partitions().get(self.current_partition);
27// if let Some(partition) = partition {
28
29// }
30
31// let entry = self.inner.by_index(self.current)
32// .map(|result| ZipEntry {
33// index: self.current,
34// is_dir: result.is_dir(),
35// is_file: result.is_file(),
36// size: result.size(),
37// path: PathBuf::from(result.name()),
38// zip_inner: self.inner.clone(),
39// _mark: std::marker::PhantomData::<&'a R> } );
40
41// self.current += 1;
42// Some(entry)
43// }
44// }
45
46
47// impl<R> DmgArchive<R>
48// where
49// R: Read + Seek
50// {
51// pub fn entries(&mut self) -> std::io::Result<ZipEntries<R>> {
52// let total = self.inner.len();
53// Ok(ZipEntries {
54// inner: Arc::new(Mutex::new(&mut self.inner)),
55// current: 0,
56// total,
57// password: self.password.clone(),
58// _mark: std::marker::PhantomData::<&R>
59// })
60// }
61// }
62
63