Proto 3:一种在字段级别添加元数据的方法

Proto 3: A way to add metadata at field level

我正在使用 protobuf-gradle-plugin 从原始文件生成 java class。

我的原型文件看起来像

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;
}

插件正在为我生成 classes,但现在我想在字段级别添加一些元数据信息。喜欢

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;
}

这可能吗?

是的,可以通过 custom options,但是:您需要在单独的 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 模式,它应该 工作。不过,访问元数据是另一个话题!参见上面的link。