diff options
| -rw-r--r-- | crates/nres/README.md | 42 | ||||
| -rw-r--r-- | crates/rsli/README.md | 58 |
2 files changed, 100 insertions, 0 deletions
diff --git a/crates/nres/README.md b/crates/nres/README.md new file mode 100644 index 0000000..8b9dfb5 --- /dev/null +++ b/crates/nres/README.md @@ -0,0 +1,42 @@ +# 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 +``` diff --git a/crates/rsli/README.md b/crates/rsli/README.md new file mode 100644 index 0000000..27816d6 --- /dev/null +++ b/crates/rsli/README.md @@ -0,0 +1,58 @@ +# rsli + +Rust-библиотека для чтения архивов формата **RsLi**. + +## Что умеет + +- Открытие библиотеки из файла (`open_path`, `open_path_with`). +- Дешифрование таблицы записей (XOR stream cipher). +- Поддержка AO-трейлера и media overlay (`allow_ao_trailer`). +- Поддержка quirk для Deflate `EOF+1` (`allow_deflate_eof_plus_one`). +- Поиск по имени (`find`, c приведением запроса к uppercase). +- Загрузка данных: +- `load`, `load_into`, `load_packed`, `unpack`, `load_fast`. + +## Поддерживаемые методы упаковки + +- `0x000` None +- `0x020` XorOnly +- `0x040` Lzss +- `0x060` XorLzss +- `0x080` LzssHuffman +- `0x0A0` XorLzssHuffman +- `0x100` Deflate + +## Модель ошибок + +Типизированные ошибки без паник в production-коде (`InvalidMagic`, `UnsupportedVersion`, `EntryTableOutOfBounds`, `PackedSizePastEof`, `DeflateEofPlusOneQuirkRejected`, `UnsupportedMethod`, и др.). + +## Покрытие тестами + +### Реальные файлы + +- Рекурсивный прогон по `testdata/rsli/**`. +- Сейчас в наборе: **2 архива**. +- На реальных данных подтверждены и проходят byte-to-byte проверки методы: +- `0x040` (LZSS) +- `0x100` (Deflate) +- Для каждого архива проверяется: +- `load`/`load_into`/`load_packed`/`unpack`/`load_fast`; +- `find`; +- пересборка и сравнение **byte-to-byte**. + +### Синтетические тесты + +Из-за отсутствия реальных файлов для части методов добавлены синтетические архивы и тесты: + +- Методы: +- `0x000`, `0x020`, `0x060`, `0x080`, `0x0A0`. +- Спецкейсы формата: + - AO trailer + overlay; + - Deflate `EOF+1` (оба режима: accepted/rejected); +- некорректные заголовки/таблицы/смещения/методы. + +## Быстрый запуск тестов + +```bash +cargo test -p rsli -- --nocapture +``` |
