PI
Кто-нибудь может подсказать как с помощью serde_json сделать десериализацию структуры со следующимм требованиями:
1. Десериализация из буфера &[u8]
2. Zero allocations до тех пор, пока не превышен лимит на кол-во элементов в одной структуре (реализуется через heapless)
3. Zero copy, т.е. используется &str для десериализации строк
4. Использование произвольного runtime контекста (конфигурации), влияющего на логику процесса десериализации
5. Возмжоность после десериализации одной или нескольких таких структур узнать сколько байт из буфера было десериализовано или сколько в нем осталось
Если убрать пункт 5 или пункт 4, то задача решена.
А вот совместить их никак не удается.
Единственный механизм, который позволил бы удовлетворить требование 5 из тех, что я нашел - это
serde_json::de::StreamDeserializer, который возвращается из serde_json::de::Deserializer::into_iter(), у него есть byte_offset(), и он сам по себе работает, но вот как его совместить с пунктом 4, я так и не смог понять.Пытался применить сюда DeserializeSeed, но он не вяжется со StreamDeserializer и не дает никакого способа притащить контекст снаружи.
Единственный понятный вариант - это двухэтапная десериализация через промежуточную стуктуру, в которую надо будет все поля из json объекта сначала сложить, а потом уже отдельным вызовом какой-то функции, в которую будет передан контекст, сконвертировать ее в конечную структуру.
Вот только этого хотелось бы избежать из соображений эффективности.
