Files
Valentin Popov 598137ed13
Some checks failed
Test / Lint (push) Failing after 2m30s
Test / Test (push) Has been skipped
Test / Render parity (push) Has been skipped
feat(resource-viewer): добавить новый ресурсный просмотрщик с базовой функциональностью
feat(nres): улучшить структуру архива с добавлением заголовка и информации о записях
feat(rsli): добавить поддержку заголовка библиотеки и улучшить обработку записей
2026-02-19 10:51:54 +00:00
..

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);
  • некорректные заголовки/таблицы/смещения/методы.

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

cargo test -p rsli -- --nocapture