Files
renovate[bot] 097a915f35
All checks were successful
Test / Lint (pull_request) Successful in 1m3s
Test / Test (pull_request) Successful in 50s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 1m10s
Test / Lint (push) Successful in 1m0s
Test / Test (push) Successful in 58s
fix(deps): update all digest updates
2026-02-12 00:01:28 +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