Как добавить объект flatbuffer к новому объекту? - PullRequest
0 голосов
/ 03 октября 2019

Я понимаю, как использовать FlatBufferBuilder и конструктор определенных типов (например, MyNestedTableBuilder), чтобы получить WIPOffset, а затем использовать его для получения буфера finished_data (&[u8]). Затем я использовал get_root для получения объекта на основе буфера, так что теперь у меня есть экземпляр MyNestedTable. Затем мне нужно передать это другой функции и создать новый экземпляр таблицы через новый компоновщик, MyTable, который имеет поле add_my_nested_table. Я не могу понять, как это сделать, не распаковывая MyNestedTable и не перестраивая его снова (что кажется очень неэффективным). Я уверен, что есть хороший способ сделать это, я просто не нашел его, даже после изучения сгенерированного кода и API.

Как правило, нам нужно передавать объекты и повторно использовать их черезсеть или через API вызовы в Rust.

1 Ответ

1 голос
/ 03 октября 2019

MyNestedTable на самом деле не объект, это дескриптор данных внутри сериализованных данных (ваш [u8]), и любой доступ к полю ищет эти данные на лету.

Ни один избазовые API для любого из поддерживаемых языков FlatBuffers (включая Rust) имеют сгенерированный код, который позволяет автоматическую повторную сериализацию, поскольку в большинстве случаев это не частая операция (у вас уже есть сериализованные данные).

Это можно сделать с помощью необязательного «объектного API», поддерживаемого в C ++ и некоторых других языках, но пока нет в Rust . Как вы можете видеть, CasperN работает над таким API.

До тех пор вы можете рассмотреть возможность использования nested_flatbuffer или какой-либо другой конструкции для прямой передачи сериализованных данных туда, куда им нужно идти.

...