diff options
| author | Valentin Popov <valentin@popov.link> | 2026-02-12 00:43:40 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-02-12 00:43:40 +0300 |
| commit | 662b292b5b47d0f7df3b19808db746bbc2ecc48c (patch) | |
| tree | df80622739c975eda645acf8754f3331cbdd1c82 /crates/rsli/src/lib.rs | |
| parent | 3410b54793c3a1808e58d0fae94fb2ebd5f81015 (diff) | |
| download | fparkan-662b292b5b47d0f7df3b19808db746bbc2ecc48c.tar.xz fparkan-662b292b5b47d0f7df3b19808db746bbc2ecc48c.zip | |
feat: обновить методы обработки данных и улучшить обработку ошибок в библиотеке
Diffstat (limited to 'crates/rsli/src/lib.rs')
| -rw-r--r-- | crates/rsli/src/lib.rs | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/crates/rsli/src/lib.rs b/crates/rsli/src/lib.rs index 1573898..ef29f41 100644 --- a/crates/rsli/src/lib.rs +++ b/crates/rsli/src/lib.rs @@ -191,7 +191,7 @@ impl Library { pub fn load(&self, id: EntryId) -> Result<Vec<u8>> { let entry = self.entry_by_id(id)?; - let packed = self.packed_slice(entry)?; + let packed = self.packed_slice(id, entry)?; decode_payload( packed, entry.meta.method, @@ -208,7 +208,7 @@ impl Library { pub fn load_packed(&self, id: EntryId) -> Result<PackedResource> { let entry = self.entry_by_id(id)?; - let packed = self.packed_slice(entry)?.to_vec(); + let packed = self.packed_slice(id, entry)?.to_vec(); Ok(PackedResource { meta: entry.meta.clone(), packed, @@ -231,7 +231,7 @@ impl Library { pub fn load_fast(&self, id: EntryId) -> Result<ResourceData<'_>> { let entry = self.entry_by_id(id)?; if entry.meta.method == PackMethod::None { - let packed = self.packed_slice(entry)?; + let packed = self.packed_slice(id, entry)?; let size = usize::try_from(entry.meta.unpacked_size).map_err(|_| Error::IntegerOverflow)?; if packed.len() < size { @@ -255,7 +255,7 @@ impl Library { }) } - fn packed_slice<'a>(&'a self, entry: &EntryRecord) -> Result<&'a [u8]> { + fn packed_slice<'a>(&'a self, id: EntryId, entry: &EntryRecord) -> Result<&'a [u8]> { let start = entry.effective_offset; let end = start .checked_add(entry.packed_size_available) @@ -263,7 +263,7 @@ impl Library { self.bytes .get(start..end) .ok_or(Error::EntryDataOutOfBounds { - id: 0, + id: id.0, offset: u64::try_from(start).unwrap_or(u64::MAX), size: entry.packed_size_declared, file_len: u64::try_from(self.bytes.len()).unwrap_or(u64::MAX), |
