diff options
| author | Igor Tolmachev <me@igorek.dev> | 2024-06-27 16:15:00 +0900 |
|---|---|---|
| committer | Igor Tolmachev <me@igorek.dev> | 2024-06-29 21:18:46 +0900 |
| commit | 51694e1f0b2730915e0a57ec6d8de503cf06ef9a (patch) | |
| tree | 165f3adbc29f96814b57aeba394fb4045af7c5f0 /src/driver/driver.rs | |
| parent | a867677218c1d55dadfcac1ca5b8cd32a78a3c28 (diff) | |
| download | archivator-51694e1f0b2730915e0a57ec6d8de503cf06ef9a.tar.gz archivator-51694e1f0b2730915e0a57ec6d8de503cf06ef9a.zip | |
Create file driver and implement file reader
Diffstat (limited to 'src/driver/driver.rs')
| -rw-r--r-- | src/driver/driver.rs | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/driver/driver.rs b/src/driver/driver.rs index 9c18e1f..5bd2319 100644 --- a/src/driver/driver.rs +++ b/src/driver/driver.rs | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | use crate::driver::ArchiveFile; | 1 | use crate::driver::{ArchiveFileInfo, FileDriver}; |
| 2 | use crate::ArchiveResult; | 2 | use crate::ArchiveResult; |
| 3 | use std::error::Error; | 3 | use std::error::Error; |
| 4 | use std::io::{Read, Write}; | 4 | use std::io::{Read, Write}; |
| @@ -6,26 +6,33 @@ use std::io::{Read, Write}; | |||
| 6 | pub trait Driver: Sized { | 6 | pub trait Driver: Sized { |
| 7 | type Error: Error; | 7 | type Error: Error; |
| 8 | 8 | ||
| 9 | type IO; | 9 | type Io; |
| 10 | type File: ArchiveFile; | 10 | type FileInfo: ArchiveFileInfo; |
| 11 | type FileDriver<'d>: FileDriver | ||
| 12 | where | ||
| 13 | Self::FileInfo: 'd, | ||
| 14 | Self::Io: 'd; | ||
| 11 | } | 15 | } |
| 12 | 16 | ||
| 13 | pub trait ArchiveRead: Driver | 17 | pub trait ArchiveRead: Driver |
| 14 | where | 18 | where |
| 15 | Self::IO: Read, | 19 | Self::Io: Read, |
| 16 | { | 20 | { |
| 17 | // Create driver instance | 21 | // Create driver instance |
| 18 | fn read(io: Self::IO) -> ArchiveResult<Self, Self::Error>; | 22 | fn read(io: Self::Io) -> ArchiveResult<Self, Self::Error>; |
| 19 | 23 | ||
| 20 | // Return vec of files (sorted by name) | 24 | // Return vec of files (sorted by name) |
| 21 | fn files(&self) -> Vec<&Self::File>; | 25 | fn files(&self) -> Vec<&Self::FileInfo>; |
| 22 | 26 | ||
| 23 | // Return file by name | 27 | // Return file info by name |
| 24 | fn get_file(&self, name: &str) -> Option<&Self::File>; | 28 | fn get_file_info(&self, name: &str) -> Option<&Self::FileInfo>; |
| 29 | |||
| 30 | // Return file reader by name | ||
| 31 | fn get_file_reader<'d>(&'d mut self, name: &str) -> Option<Self::FileDriver<'d>>; | ||
| 25 | } | 32 | } |
| 26 | 33 | ||
| 27 | pub trait ArchiveWrite: ArchiveRead | 34 | pub trait ArchiveWrite: Driver |
| 28 | where | 35 | where |
| 29 | Self::IO: Read + Write, | 36 | Self::Io: Read + Write, |
| 30 | { | 37 | { |
| 31 | } | 38 | } |
