Денис
и ему надо пойти в хэш-мапу по этому имени и найти тип.... которого там может не быть
Cat
потому что одно из полей type'а в сериализованном виде — это просто имя типа
предлагаю тебе сериализовать один тип, а потом просто конвертить в другой
Anton
Десереиалищирует в раст тип
Anton
Который не может не сществовать
Денис
мммммм
Anton
Абстрактно, let type: HashMap<String, Rc<Type>> = deserialize_from(data)
Ты задаешь структуру вначале, все ее поля и типы известны
Денис
давай-ка я всё перефразирую, чтобы этот Type не встречался
Денис
щас
Денис
struct Stuff { name: Name, value: Value, } enum Value { Plain(String), Another(Rc<Stuff>), } и всё это хранится в словаре HashMap<Name, Rc<Stuff>>
Денис
Value::Another может ссылаться на Stuff, который ещё не десериализован
Anton
Понял твои страхи)
Cat
> "не десериализован" ты имеешь в виду рантайм-процесс, или факт того, что serde не умеет его десериализовать?
Anton
Ну тут только вопрос к десереализации Rc
Cat
🤔
Anton
Все остальное отлично укладывается в serde
Cat
рантайм конечно)
а как так может быть?
Денис
ну смотрите
Денис
я не могу напрямую такую хэшмапу сериализовать, потому что это может привести к рекурсии
Денис
поэтому во время сериализации я должен заменять все вхождения Rc<Type> на индексы хэшмапы
Денис
так что, грубо говоря, enum Value { Plain(String), Another(Rc<Stuff>), } в сериализованном виде будет заменён на enum Value { Plain(String), Another(Name), }
Cat
ну так сделай enum ValueForSerde а потом конверти из него в Value
Cat
или я совсем чушь несу уже?
Денис
ну так сделай enum ValueForSerde а потом конверти из него в Value
я пока только такое решение и вижу, честно говоря
Денис
какие два процесса?
Anton
Создание карты типов и сереальзацию
Денис
ненене
Денис
карта HashMap<Name, Stuff> уже есть в памяти
Денис
мне нужно её сериализовать, а потом десериализовать в другогом приложении
Anton
карта HashMap<Name, Stuff> уже есть в памяти
Но серде ты ее не подпихнешь
Cat
(или как там его?)
Cat
чтоб прям куском памяти записать
Anton
Но серде ты ее не подпихнешь
Ты не можешь сказать записывай не стаф а имя из вот этой мапы
Денис
чтоб прям куском памяти записать
а в куске памяти у меня хранятся ссылки на куски памяти, сиречь циферки )
Денис
Ты не можешь сказать записывай не стаф а имя из вот этой мапы
ну получается только через промежуточный тип :(
Денис
рукуррентный обход по ссылкам — GOD POWER
может привести к бесконечной рекурсии
Anton
призываю тапок @tapok_satan пояснить за последние веяния моды в области фронтендов на расте. ну или хотя бы биндингов каких...
Говно там в целом, мода пошла на wasm, да вот использовать его пытаются вообще не к месту, есть yew точеный, и wasm-bindgen дроченый
Cat
может привести к бесконечной рекурсии
алгоритмы обнаружения цикла на графе
Anton
Все пытаются на wasm ui рисовать
Anton
Дак васм вообще никоим хуем с юи нормально работать не будет
Денис
алгоритмы обнаружения цикла на графе
и что мне делать в случае обнаружения цикла?) записывать индекс? ^_^
Anton
В остальном средней глухоты
Anton
ну получается только через промежуточный тип :(
Хотя думаю если ты напишешь свой серелищатор, то можно попробовать
Cat
так стоп ёпта
Cat
может привести к бесконечной рекурсии
почему просто не дампнуть ссылки "как есть", или они ссылаются не друг на друга?
Денис
Хотя думаю если ты напишешь свой серелищатор, то можно попробовать
сериализатор-то можно написать. принципиальная проблема возникает при десериализации, потому что мне нужно создавать Stuff, который может ссылаться на другой Stuff, который ещё не был десериализован :)
Cat
+++
Cat
относительный адрес!
Денис
а что я потом с ним буду делать?)
Денис
ахахаха
Anton
Нее
Денис
относительный адрес!
Rc — это про heap, там мне никто никакого порядка не гарантирует вообще
Cat
а что я потом с ним буду делать?)
скормишь другой программе, пусть сама там разбирается
Денис
=)))
Денис
рофлы пошли
Cat
да, мне просто скучно и хреново уже, пора спать кажется
Anton
Заполнение карты типов, и десерилизация типов из карты
Anton
Лил делай промежуточный тип
Денис
ну короче промежуточный тип — мой выбор. я понял :)
Anton
Или гарантируй порядок типов в хэшмапе
Денис
всем спасибо за потраченные умственные усилия =)
Денис
Или гарантируй порядок типов в хэшмапе
не прокатит, потому что возможна рекурсия
Anton
С другой стороны меня не покидает ощущение что у тебя надуманна проблема ) так как типы известны
Anton
Зачем тебе rc если у тебя структура?
Денис
struct Stuff { name: Name, value: Value, } enum Value { Plain(String), Another(Rc<Stuff>), } сделай без Rc :)
Anton
А, блин рекурсивно
Anton
Туплю в 4 ночи
Денис
короче я буду делать промежуточную структуру, это несколько бойлерплейтненько, но должно сработать