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/archive.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/archive.rs') diff --git a/src/archive.rs b/src/archive.rs index e635007..4a70867 100644 --- a/src/archive.rs +++ b/src/archive.rs @@ -1,5 +1,5 @@ use crate::driver::{ArchiveRead, ArchiveWrite, Driver}; -use crate::ArchiveResult; +use crate::{ArchiveFile, ArchiveResult}; use std::fs::File; use std::io::{Read, Write}; use std::path::Path; @@ -10,9 +10,9 @@ pub struct Archive { impl Archive where - D::IO: std::io::Read, + D::Io: std::io::Read, { - pub fn read(io: D::IO) -> ArchiveResult { + pub fn read(io: D::Io) -> ArchiveResult { Ok(Self { driver: D::read(io)?, }) @@ -20,18 +20,22 @@ where pub fn read_from_file(path: impl AsRef) -> ArchiveResult where - D: ArchiveRead, + D: ArchiveRead, { Self::read(File::open(path)?) } - pub fn files(&self) -> Vec<&D::File> { + pub fn files(&self) -> Vec<&D::FileInfo> { self.driver.files() } - pub fn get_file(&self, name: &str) -> Option<&D::File> { - self.driver.get_file(name) + pub fn get_file_info(&self, name: &str) -> Option<&D::FileInfo> { + self.driver.get_file_info(name) + } + + pub fn get_file_reader<'d>(&'d mut self, name: &str) -> Option>> { + Some(ArchiveFile::new(self.driver.get_file_reader(name)?)) } } -impl Archive where D::IO: Read + Write {} +impl Archive where D::Io: Read + Write {} -- cgit v1.2.3