Files
fparkan/crates/nres
Valentin Popov 842f4a8569 Implement LZSS decompression with optional XOR decryption
- Added `lzss_decompress_simple` function for LZSS decompression in `lzss.rs`.
- Introduced `XorState` struct and `xor_stream` function for XOR decryption in `xor.rs`.
- Updated `mod.rs` to include new LZSS and XOR modules.
- Refactored `parse_library` function in `parse.rs` to utilize the new XOR decryption functionality.
- Cleaned up and organized code in `lib.rs` by removing redundant functions and structures.
- Added tests for new functionality in `tests.rs`.
2026-02-10 08:38:58 +00:00
..

nres

Rust-библиотека для работы с архивами формата NRes.

Что умеет

  • Открытие архива из файла (open_path) и из памяти (open_bytes).
  • Поддержка raw_mode (весь файл как единый ресурс).
  • Чтение метаданных и итерация по записям.
  • Поиск по имени без учёта регистра (find).
  • Чтение данных ресурса (read, read_into, raw_slice).
  • Редактирование архива через Editor:
  • add, replace_data, remove.
  • commit с пересчётом sort_index, выравниванием по 8 байт и атомарной записью файла.

Модель ошибок

Библиотека возвращает типизированные ошибки (InvalidMagic, UnsupportedVersion, TotalSizeMismatch, DirectoryOutOfBounds, EntryDataOutOfBounds, и др.) без паник в production-коде.

Покрытие тестами

Реальные файлы

  • Рекурсивный прогон по testdata/nres/**.
  • Сейчас в наборе: 120 архивов.
  • Для каждого архива проверяется:
  • чтение всех записей;
  • read/read_into/raw_slice;
  • find;
  • unpack -> repack (Editor::commit) с проверкой byte-to-byte.

Синтетические тесты

  • Проверка основных сценариев редактирования (add/replace/remove/commit).
  • Проверка валидации и ошибок:
  • InvalidMagic, UnsupportedVersion, TotalSizeMismatch, InvalidEntryCount, DirectoryOutOfBounds, NameTooLong, EntryDataOutOfBounds, EntryIdOutOfRange, NameContainsNul.

Быстрый запуск тестов

cargo test -p nres -- --nocapture