Protobuf, получение пользовательских значений расширения из плагина protoc

Я пытаюсь создать пользовательское расширение, которое я могу использовать в пользовательском компиляторе protoc, который я пишу.

Я пытаюсь скомпилировать этот протофайл:

syntax = "proto3";

import "google/protobuf/descriptor.proto";

extend google.protobuf.MessageOptions {
    string my_option = 5123456;
}

message TestMessageRequest {
    option (my_option) = "Hello world!";
    uint64 value1 = 2;
    string value2 = 3;
}

CodeGeneratorRequest, который получает мой плагин protoc, похоже, нигде не имеет этой опции. Вот весь запрос: Ссылка на Google Диск.

Где я могу получить значение "Hello world!" для моего сообщения TestMessageRequest?


person Paul Knopf    schedule 10.02.2020    source источник


Ответы (1)


Опция есть в дескрипторе TestMessageRequest:

"ProtoFile": [
{
  "Name": "google/protobuf/descriptor.proto",
  ....
  "HasOptions": true,
}

но поскольку это поле расширения, оно не преобразуется в JSON.

Вы должны иметь доступ к нему так же, как к полям расширения обращаются в любой библиотеке protobuf, которую вы используете. Здесь есть примеры для нескольких языков: Параметры поля буфера протокола Python

person jpa    schedule 12.02.2020