From cbc0f4246d411060519556f41191fb9b202eb6cf Mon Sep 17 00:00:00 2001 From: Anna Date: Fri, 27 Jan 2023 16:14:32 -0500 Subject: [PATCH] feat: allow adding file info --- src/mpd_encoder.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/mpd_encoder.rs b/src/mpd_encoder.rs index ae429fe..aa41d66 100644 --- a/src/mpd_encoder.rs +++ b/src/mpd_encoder.rs @@ -110,7 +110,14 @@ impl MpdEncoder { Ok(()) } - pub fn add_texture_file(&mut self, file_info: FileInfo, size: usize, mut data: impl Read) -> Result<()> { + pub fn add_file_info(&mut self, hash: &[u8], file_info: FileInfo) { + self.hashes.entry(hash.to_vec()) + .and_modify(|info| { + info.files.insert(file_info); + }); + } + + pub fn add_texture_file(&mut self, file_info: FileInfo, size: usize, mut data: impl Read) -> Result> { #[derive(binrw::BinRead)] #[br(little)] struct RawTextureHeader { @@ -235,7 +242,7 @@ impl MpdEncoder { .insert(file_info); if contained { - return Ok(()); + return Ok(hash.to_vec()); } // write the headers @@ -263,14 +270,14 @@ impl MpdEncoder { // seek past the data self.writer.seek(SeekFrom::Start(after_data)).map_err(Error::Io)?; - Ok(()) + Ok(hash.to_vec()) } fn alignment_necessary(size: usize) -> usize { ALIGN - (size % ALIGN) } - pub fn add_model_file(&mut self, file_info: FileInfo, size: usize, mut data: impl Read) -> Result<()> { + pub fn add_model_file(&mut self, file_info: FileInfo, size: usize, mut data: impl Read) -> Result> { #[derive(binrw::BinRead)] #[br(little)] struct RawModelHeader { @@ -431,7 +438,7 @@ impl MpdEncoder { .insert(file_info); if contained { - return Ok(()); + return Ok(hash.to_vec()); } // write the file header @@ -452,7 +459,7 @@ impl MpdEncoder { // now seek past the data self.writer.seek(SeekFrom::Start(after_data)).map_err(Error::Io)?; - Ok(()) + Ok(hash.to_vec()) } fn write_lod(&mut self, lod: usize, lod_count: u8, offsets: &[u32], sizes: &[u32], mut data: impl Read, hasher: &mut impl Digest) -> Result> { @@ -486,7 +493,7 @@ impl MpdEncoder { num_blocks } - pub fn add_standard_file(&mut self, file_info: FileInfo, size: usize, data: impl Read) -> Result<()> { + pub fn add_standard_file(&mut self, file_info: FileInfo, size: usize, data: impl Read) -> Result> { // store position before doing anything let pos = self.writer.stream_position().map_err(Error::Io)?; @@ -524,7 +531,7 @@ impl MpdEncoder { self.writer.seek(SeekFrom::Start(pos)).map_err(Error::Io)?; if contained { - return Ok(()); + return Ok(hash.to_vec()); } // add headers @@ -546,7 +553,7 @@ impl MpdEncoder { // seek past data self.writer.seek(SeekFrom::Start(after_blocks)).map_err(Error::Io)?; - Ok(()) + Ok(hash.to_vec()) } fn align_to(&mut self, n: usize) -> Result {