From 51694e1f0b2730915e0a57ec6d8de503cf06ef9a Mon Sep 17 00:00:00 2001 From: Igor Tolmachev Date: Thu, 27 Jun 2024 16:15:00 +0900 Subject: Create file driver and implement file reader --- src/driver/driver.rs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'src/driver/driver.rs') 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 @@ -use crate::driver::ArchiveFile; +use crate::driver::{ArchiveFileInfo, FileDriver}; use crate::ArchiveResult; use std::error::Error; use std::io::{Read, Write}; @@ -6,26 +6,33 @@ use std::io::{Read, Write}; pub trait Driver: Sized { type Error: Error; - type IO; - type File: ArchiveFile; + type Io; + type FileInfo: ArchiveFileInfo; + type FileDriver<'d>: FileDriver + where + Self::FileInfo: 'd, + Self::Io: 'd; } pub trait ArchiveRead: Driver where - Self::IO: Read, + Self::Io: Read, { // Create driver instance - fn read(io: Self::IO) -> ArchiveResult; + fn read(io: Self::Io) -> ArchiveResult; // Return vec of files (sorted by name) - fn files(&self) -> Vec<&Self::File>; + fn files(&self) -> Vec<&Self::FileInfo>; - // Return file by name - fn get_file(&self, name: &str) -> Option<&Self::File>; + // Return file info by name + fn get_file_info(&self, name: &str) -> Option<&Self::FileInfo>; + + // Return file reader by name + fn get_file_reader<'d>(&'d mut self, name: &str) -> Option>; } -pub trait ArchiveWrite: ArchiveRead +pub trait ArchiveWrite: Driver where - Self::IO: Read + Write, + Self::Io: Read + Write, { } -- cgit v1.2.3