Преобразование буферов протокола в/из JSON в C без генерации кода C

Мне нужно использовать файлы .desc, чтобы включить чтение сериализованных сообщений буфера протокола и их преобразование в JSON (с использованием jansson).

Это связано с тем, что форматы сообщений протокольного буфера будут меняться гораздо чаще, чем код C. Файлы .desc будут входными данными исполняемого файла во время выполнения.

Я нашел https://github.com/Sannis/protobuf2json-c, но мое прочтение это то, что ему нужно сгенерировать код C. В частности, ProtobufCMessage должен существовать для декодируемого сообщения, и я не вижу способа создать ProtobufCMessage (из /usr/include/google/protobuf-c/protobuf-c.h) без генерации кода C.

Я что-то пропустил здесь, или мне нужно будет написать новый код?


person fadedbee    schedule 10.02.2015    source источник


Ответы (1)


Я не знаком с расширением .desc, но из контекста предполагаю, что это файл, содержащий протобуфер FileDescriptorProto, определенный в google/protobuf/descriptor.proto.

Чтобы сделать то, что вы хотите, вам, скорее всего, потребуется использовать библиотеку Protobuf C++ или Java, каждая из которых определяет класс DynamicMessage, который имеет возможность эмулировать произвольные типы сообщений на основе дескрипторов. Затем вы можете комбинировать это с любой библиотекой Protobuf-JSON, основанной на стандартных интерфейсах отражения Protobuf. (Вы также можете довольно легко написать свой собственный преобразователь JSON; используйте в качестве шаблона класс TextFormat (найденный в библиотеках C++ и Java Protobuf).)

Насколько я понимаю, protobuf-c в настоящее время не содержит эквивалента DynamicMessage.

person Kenton Varda    schedule 11.02.2015
comment
Файл .desc — это информация из файла(ов) .proto, закодированная в формате буфера протокола, описанном descriptor.proto. - person fadedbee; 11.02.2015