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/file.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/file.rs (limited to 'src/file.rs') diff --git a/src/file.rs b/src/file.rs new file mode 100644 index 0000000..f284b98 --- /dev/null +++ b/src/file.rs @@ -0,0 +1,38 @@ +use crate::driver::FileDriver; +use std::io::{Read, Result as IoResult, Seek, Write}; + +pub struct ArchiveFile { + pub(crate) driver: D, +} + +impl ArchiveFile { + pub fn new(driver: D) -> Self { + Self { driver } + } + + pub fn info(&self) -> &D::FileInfo { + self.driver.info() + } +} + +impl Read for ArchiveFile { + fn read(&mut self, buf: &mut [u8]) -> IoResult { + self.driver.read(buf) + } +} + +impl Write for ArchiveFile { + fn write(&mut self, buf: &[u8]) -> IoResult { + self.driver.write(buf) + } + + fn flush(&mut self) -> IoResult<()> { + self.driver.flush() + } +} + +impl Seek for ArchiveFile { + fn seek(&mut self, pos: std::io::SeekFrom) -> IoResult { + self.driver.seek(pos) + } +} -- cgit v1.2.3