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。
我正在使用 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。