Как заменить расширение proto2 на proto3 любое, когда расширить различное количество полей?

Я пытаюсь изучить Proto3, и у меня есть несколько вопросов с any,

Я довольно часто использую расширение, если мой прото такой:

message base {
    extensions 1 to 100;
}

// a.proto
extend base {
   optional int32 a = 1;
   optional int32 b = 2;
}

// b.proto
extend base {
   optional string c = 1;
   optional string d = 2;
   optional string e = 3;
   optional string f = 4;
}

тогда как заменить эти расширения на любые? я должен написать как

import google/protobuf/any.proto
message base {
    any a = 1;
    any b = 2;
    any c = 3;
    any d = 4;
}

?

может, у многих прото есть расширенный base.proto, и я не могу определить максимальное число расширений этих протос. тогда как я могу заменить эти расширения на любые?

Если мне придется написать от 1 до 100 в базе сообщений... о, это будет слишком ужасно!

1 ответ

Решение

Вы бы обычно структурировали это так:

message base {
    any submsg = 1;
}

// a.proto
message submsg_a {
   optional int32 a = 1;
   optional int32 b = 2;
}

// b.proto
message submsg_b {
   optional string c = 1;
   optional string d = 2;
   optional string e = 3;
   optional string f = 4;
}

А потом ставь либо submsg_a или же submsg_b внутри любого поля.

Другие вопросы по тегам