Парсер для rxdata, rvdata, rvdata2 файлов сохранений

15 000 руб. за проект
18 января 2022, 00:37 • 1 отклик • 72 просмотра
Необходимо доработать библиотеку ruby marshal https://github.com/d9pouces/RubyMarshal
чтобы получить возможность распаковывать/запаковывать .rxdata, rvdata и rvdata2 файлы, которые предоставляют собой дамп маршалинга языка руби.

Важно - в проекте есть ряд явных проблем (в руби хешом может выступать любой объект, в питоне только хешируемые => питонячьи дикты иногда разламываются), так и неявных как
- точность флоата для питона и руби разнятся (поправить мантиссу несложно, но важно делать это всегда консистентно)
- для пользовательских или других классов, а также линок (указатель на саму себя) нужно делать бектрекинг, иначе при запаковке файл ломается
- поддерживаются все типы и нет никаких заглушек

Примеры файлов https://disk.yandex.by/d/Gsm8lxGzw7ngFw.

Требования к решению:
- файл подается в виде открытого стрима (BytesIO), во время всех процедур никаких кеши/файлы не пишутся, результат операции - собранные питонячьи структуры
- Полученные структуры отправляются на запаковку и получаем результат опять в виде BytesIO и его содержимое полностью идентично исходному (не допускается отклонений в точности, ссылок или типах записанных данных).
- Конечное решение это поправленная или переделанная библиотека, с полезными комментариями и тестами, доказывающие работоспособность и возможность найти ошибки/неточности
- Язык решения - предпочтительно питон, допустим руби но тогда придется запилить решение в виде лямбда-функции, которая принимает ссылку на с3 (залитый файл), процессит, заливает результат в виде файла на другой бакет с3 и отдает на него ссылку в ответе. Для питона достаточно готовой библиотеки с интерфейсом

Очень желателен - опыт или желание разобраться в работе опкодов, руби и умение выстраивать конечное решение.

Полезные ссылки:
- float prec ⇒ mant dig https://docs.python.org/3/library/sys.html
- реализация маршалинга в руби https://github.com/ruby/ruby/blob/master/marshal.c
- реализация маршалинга в опале https://github.com/opal/opal/blob/f79df3a6a4a751839f7dc353699a72a2b49c2530/opal/corelib/marshal/read_buffer.rb
- а так же ссылка на игровой фреймворк, который генерит эти файлы https://www.rpgmakerweb.com/products/rpg-maker-vx

В процессе выполнения окажу всю посильную помощь, снабжу дополнительными файлами для более точечного тестирования.
Кандидату необходимо ознакомиться с файлами, его содержимым и рассказать мне закономерность необходимая для распаковки, которая существуют в этих файлах но практически никогда не встретишь в руби дампе.