From a867677218c1d55dadfcac1ca5b8cd32a78a3c28 Mon Sep 17 00:00:00 2001 From: Igor Tolmachev Date: Thu, 27 Jun 2024 00:22:52 +0900 Subject: Implement file getter in archive --- src/zip/archive.rs | 10 ++++++++++ src/zip/driver.rs | 21 +++++++++++++++++---- src/zip/file.rs | 2 +- src/zip/mod.rs | 3 ++- 4 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 src/zip/archive.rs (limited to 'src/zip') diff --git a/src/zip/archive.rs b/src/zip/archive.rs new file mode 100644 index 0000000..9a244fc --- /dev/null +++ b/src/zip/archive.rs @@ -0,0 +1,10 @@ +use crate::{Archive, Zip}; +use std::io::{Read, Seek, Write}; + +impl Archive> { + pub fn comment(&self) -> &String { + self.driver.comment() + } +} + +impl Archive> {} diff --git a/src/zip/driver.rs b/src/zip/driver.rs index 8662623..650344e 100644 --- a/src/zip/driver.rs +++ b/src/zip/driver.rs @@ -4,10 +4,9 @@ use crate::zip::structs::{deserialize, EOCDR64Locator, ExtraHeader, CDR, EOCDR, use crate::zip::{ZipError, ZipFile, ZipResult}; use chrono::{Local, NaiveDate, NaiveDateTime, NaiveTime}; use std::collections::HashMap as Map; -use std::fs::File; use std::io::{Read, Seek, SeekFrom, Write}; -pub struct Zip { +pub struct Zip { io: IO, files: Map, @@ -169,10 +168,24 @@ impl ArchiveRead for Zip { Ok(Self { io, files, comment }) } + + fn files(&self) -> Vec<&Self::File> { + let mut files: Vec<&Self::File> = self.files.values().collect(); + files.sort_by_key(|f| &f.name); + files + } + + fn get_file(&self, name: &str) -> Option<&Self::File> { + self.files.get(name) + } } -impl Zip {} +impl Zip { + pub fn comment(&self) -> &String { + &self.comment + } +} impl ArchiveWrite for Zip {} -impl Zip {} +impl Zip {} diff --git a/src/zip/file.rs b/src/zip/file.rs index b4f2d7c..5b0723f 100644 --- a/src/zip/file.rs +++ b/src/zip/file.rs @@ -29,7 +29,7 @@ impl CompressionMethod { } pub struct BitFlag { - pub flag: u16, + flag: u16, } pub mod bit { diff --git a/src/zip/mod.rs b/src/zip/mod.rs index 23cadb9..89d748b 100644 --- a/src/zip/mod.rs +++ b/src/zip/mod.rs @@ -1,3 +1,4 @@ +mod archive; mod driver; mod error; mod file; @@ -5,7 +6,7 @@ mod structs; pub use driver::Zip; pub use error::{ZipError, ZipResult}; -pub use file::ZipFile; +pub use file::{bit, BitFlag, CompressionMethod, ZipFile}; #[cfg(test)] mod tests; -- cgit v1.2.3