Proto 3: способ добавления метаданных на уровне поля

Я использую protobuf-gradle-plugin для создания класса java из файлов proto.

Мой прото файл выглядит так

syntax = "proto3";

package com.address;
option java_package = "com.address";


message AddressesMessage {
 int32 id = 1;
 string address_line_1 = 4;
 string address_line_2 = 5;
 string city = 7;
 string postal_code = 9;
 string country = 10;
}

Плагин генерирует для меня классы, но теперь я хочу добавить некоторые метаданные на уровне поля. Нравиться

syntax = "proto3";

package com.address;
option java_package = "com.address";


message AddressesMessage {
 int32 id = 1 [ (meta) = { isfact: false }];
 string address_line_1 = 4;
 string address_line_2 = 5;
 string city = 7;
 string postal_code = 9;
 string country = 10;
}

Это возможно?


person JDev    schedule 04.03.2020    source источник


Ответы (1)


Да, это возможно с помощью настраиваемых параметров, но: необходимо определить свои пользовательские параметры в отдельной схеме proto2, которую затем импортирует схема proto3.

Что-то вроде (для вашей схемы proto2, непроверенной):

syntax = "proto2";
import "google/protobuf/descriptor.proto";
package MetaPackage;
message MyMeta {
  optional bool isFact = 1;
}
extend google.protobuf.FieldOptions {
  optional MyMeta meta = 80412; // numbering: search for "One last thing" in the link above
}

затем просто добавьте:

import "MyMeta.proto";

вашей схеме proto3, и она должна работать. Однако доступ к метаданным — это отдельная тема! См. ссылку выше.

person Marc Gravell    schedule 05.03.2020
comment
Спасибо @Марк Гравелл. Я следовал инструкциям, но получаю сообщение об ошибке Unresolved reference. - person JDev; 05.03.2020
comment
@jdev где? Какой файл/строка и т.д.? Это все сообщение? - person Marc Gravell; 06.03.2020
comment
Можно ли определить карту как пользовательскую опцию? Задали то же самое на stackoverflow.com/questions/60982469/ - person JDev; 02.04.2020
comment
@JDev Я так не думаю - person Marc Gravell; 02.04.2020