@@ -4,7 +4,7 @@ use lru::LruCache;
4
4
use regex:: bytes:: Regex ;
5
5
use serde:: Deserialize ;
6
6
use simple_error:: bail;
7
- use zip:: ZipArchive ;
7
+ use zip:: { ZipArchive , read :: ZipFile } ;
8
8
use std:: { path:: { Path , PathBuf } , os:: { unix:: prelude:: OsStrExt , macos:: fs:: MetadataExt } , fs, io:: { BufReader } , collections:: { HashSet , HashMap } } ;
9
9
10
10
use crate :: util;
@@ -34,14 +34,14 @@ pub fn mode_to_file_type(mode: u32) -> FileType {
34
34
}
35
35
36
36
37
- pub struct Zip {
37
+ pub struct Zip < ' a > {
38
38
archive : ZipArchive < BufReader < fs:: File > > ,
39
- files : HashMap < String , ( ) > ,
39
+ files : HashMap < String , ZipFile < ' a > > ,
40
40
dirs : HashSet < String > ,
41
41
}
42
42
43
- impl Zip {
44
- fn new ( archive : ZipArchive < BufReader < fs:: File > > ) -> Result < Zip , Error > {
43
+ impl < ' a > Zip < ' a > {
44
+ fn new ( archive : ZipArchive < BufReader < fs:: File > > ) -> Result < Zip < ' a > , Error > {
45
45
let mut zip = Zip {
46
46
archive,
47
47
files : Default :: default ( ) ,
@@ -71,7 +71,7 @@ impl Zip {
71
71
if entry. is_dir ( ) {
72
72
zip. dirs . insert ( name) ;
73
73
} else if entry. is_file ( ) {
74
- zip. files . insert ( name, { } ) ;
74
+ zip. files . insert ( name, entry ) ;
75
75
}
76
76
}
77
77
@@ -91,8 +91,8 @@ pub trait ZipCache {
91
91
fn act < T , F : FnOnce ( & Zip ) -> T > ( & mut self , p : & Path , cb : F ) -> Result < T , & Error > ;
92
92
}
93
93
94
- pub struct LruZipCache {
95
- lru : LruCache < PathBuf , Result < Zip , Error > > ,
94
+ pub struct LruZipCache < ' a > {
95
+ lru : LruCache < PathBuf , Result < Zip < ' a > , Error > > ,
96
96
}
97
97
98
98
pub fn open_zip ( p : & Path ) -> Result < Zip , Error > {
@@ -105,7 +105,7 @@ pub fn open_zip(p: &Path) -> Result<Zip, Error> {
105
105
Ok ( zip)
106
106
}
107
107
108
- impl ZipCache for LruZipCache {
108
+ impl < ' a > ZipCache for LruZipCache < ' a > {
109
109
fn act < T , F : FnOnce ( & Zip ) -> T > ( & mut self , p : & Path , cb : F ) -> Result < T , & Error > {
110
110
let res = self . lru . get_or_insert ( p. to_owned ( ) , || {
111
111
open_zip ( p)
0 commit comments