Impl better to_data for some archive entry

This commit is contained in:
2026-04-13 16:36:39 +08:00
parent 4f7d696dbe
commit 21d026731b
13 changed files with 102 additions and 31 deletions

View File

@@ -138,7 +138,8 @@ struct BgiFileHeader {
_padding: Vec<u8>,
}
struct Entry<T: Read + Seek> {
#[derive(Debug)]
struct Entry<T: Read + Seek + std::fmt::Debug> {
header: BgiFileHeader,
reader: Arc<Mutex<T>>,
pos: usize,
@@ -146,7 +147,7 @@ struct Entry<T: Read + Seek> {
script_type: Option<ScriptType>,
}
impl<T: Read + Seek> ArchiveContent for Entry<T> {
impl<T: Read + Seek + std::fmt::Debug + Send + Sync> ArchiveContent for Entry<T> {
fn name(&self) -> &str {
&self.header.filename
}
@@ -154,9 +155,13 @@ impl<T: Read + Seek> ArchiveContent for Entry<T> {
fn script_type(&self) -> Option<&ScriptType> {
self.script_type.as_ref()
}
fn to_data<'a>(&'a mut self) -> Result<Box<dyn ReadSeek + Send + Sync + 'a>> {
Ok(Box::new(self))
}
}
impl<T: Read + Seek> Read for Entry<T> {
impl<T: Read + Seek + std::fmt::Debug> Read for Entry<T> {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
let mut reader = self.reader.lock().map_err(|e| {
std::io::Error::new(
@@ -177,7 +182,7 @@ impl<T: Read + Seek> Read for Entry<T> {
}
}
impl<T: Read + Seek> Seek for Entry<T> {
impl<T: Read + Seek + std::fmt::Debug> Seek for Entry<T> {
fn seek(&mut self, pos: SeekFrom) -> std::io::Result<u64> {
let new_pos = match pos {
SeekFrom::Start(offset) => offset as usize,

View File

@@ -140,7 +140,8 @@ struct BgiFileHeader {
_padding: Vec<u8>,
}
struct Entry<T: Read + Seek> {
#[derive(Debug)]
struct Entry<T: Read + Seek + std::fmt::Debug> {
header: BgiFileHeader,
reader: Arc<Mutex<T>>,
pos: usize,
@@ -148,7 +149,7 @@ struct Entry<T: Read + Seek> {
script_type: Option<ScriptType>,
}
impl<T: Read + Seek> ArchiveContent for Entry<T> {
impl<T: Read + Seek + std::fmt::Debug + Send + Sync> ArchiveContent for Entry<T> {
fn name(&self) -> &str {
&self.header.filename
}
@@ -156,9 +157,13 @@ impl<T: Read + Seek> ArchiveContent for Entry<T> {
fn script_type(&self) -> Option<&ScriptType> {
self.script_type.as_ref()
}
fn to_data<'a>(&'a mut self) -> Result<Box<dyn ReadSeek + Send + Sync + 'a>> {
Ok(Box::new(self))
}
}
impl<T: Read + Seek> Read for Entry<T> {
impl<T: Read + Seek + std::fmt::Debug> Read for Entry<T> {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
let mut reader = self.reader.lock().map_err(|e| {
std::io::Error::new(
@@ -179,7 +184,7 @@ impl<T: Read + Seek> Read for Entry<T> {
}
}
impl<T: Read + Seek> Seek for Entry<T> {
impl<T: Read + Seek + std::fmt::Debug> Seek for Entry<T> {
fn seek(&mut self, pos: SeekFrom) -> std::io::Result<u64> {
let new_pos = match pos {
SeekFrom::Start(offset) => offset as usize,