diff options
Diffstat (limited to 'src/driver')
| -rw-r--r-- | src/driver/driver.rs | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/driver/driver.rs b/src/driver/driver.rs index 4c6baad..f7f1f24 100644 --- a/src/driver/driver.rs +++ b/src/driver/driver.rs | |||
| @@ -8,34 +8,37 @@ pub trait Driver: Sized { | |||
| 8 | 8 | ||
| 9 | type Io; | 9 | type Io; |
| 10 | type FileInfo: ArchiveFileInfo; | 10 | type FileInfo: ArchiveFileInfo; |
| 11 | type FileDriver<'d>: FileDriver | ||
| 12 | where | ||
| 13 | Self::FileInfo: 'd, | ||
| 14 | Self::Io: 'd; | ||
| 15 | } | 11 | } |
| 16 | 12 | ||
| 17 | pub trait ArchiveRead: Driver | 13 | pub trait ArchiveRead: Driver |
| 18 | where | 14 | where |
| 19 | Self::Io: Read, | 15 | Self::Io: Read, |
| 20 | { | 16 | { |
| 17 | type FileReader<'d>: FileDriver | ||
| 18 | where | ||
| 19 | Self: 'd; | ||
| 20 | |||
| 21 | // Create driver instance | 21 | // Create driver instance |
| 22 | fn read(io: Self::Io) -> ArchiveResult<Self, Self::Error>; | 22 | fn read(io: Self::Io) -> ArchiveResult<Self, Self::Error>; |
| 23 | 23 | ||
| 24 | // Return vec of file info | 24 | // Return vec of file info |
| 25 | fn files(&self) -> &Vec<Self::FileInfo>; | 25 | fn files(&self) -> Vec<&Self::FileInfo>; |
| 26 | 26 | ||
| 27 | // Return file info by index | 27 | // Return file info by index |
| 28 | fn get_file_info(&self, index: usize) -> ArchiveResult<&Self::FileInfo, Self::Error>; | 28 | fn get_file_info(&self, name: &str) -> ArchiveResult<&Self::FileInfo, Self::Error>; |
| 29 | 29 | ||
| 30 | // Return file reader by index | 30 | // Return file reader by index |
| 31 | fn get_file_reader<'d>( | 31 | fn get_file_reader<'d>( |
| 32 | &'d mut self, | 32 | &'d mut self, |
| 33 | index: usize, | 33 | name: &str, |
| 34 | ) -> ArchiveResult<Self::FileDriver<'d>, Self::Error>; | 34 | ) -> ArchiveResult<Self::FileReader<'d>, Self::Error>; |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | pub trait ArchiveWrite: Driver | 37 | pub trait ArchiveWrite: Driver |
| 38 | where | 38 | where |
| 39 | Self::Io: Read + Write, | 39 | Self::Io: Read + Write, |
| 40 | { | 40 | { |
| 41 | type FileWriter<'d>: FileDriver | ||
| 42 | where | ||
| 43 | Self: 'd; | ||
| 41 | } | 44 | } |
