43 lines
1.9 KiB
Markdown
43 lines
1.9 KiB
Markdown
|
|
# 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`.
|
|||
|
|
|
|||
|
|
## Быстрый запуск тестов
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cargo test -p nres -- --nocapture
|
|||
|
|
```
|