protocol-buffers - 在原型中,如何将地图定义为自定义选项
问题描述
在我的 proto 文件中,我想将地图定义为自定义选项,尝试了一些方法,但都没有奏效。
我的元数据原型文件:
syntax = "proto2";
import "google/protobuf/descriptor.proto";
package com.util;
option java_package = "com.util";
message MyMeta {
optional bool needValidation = 1;
map<string, string> fileMap = 2;
}
extend google.protobuf.FieldOptions {
optional MyMeta meta = 80412;
}
我的原型文件
syntax = "proto3";
package com.test;
import "util/meta.proto";
import "google/protobuf/timestamp.proto";
message MyMeta {
int32 id = 1 [(com.util.meta).needValidation = false, /*looking for a way to set a map (com.meta).tableOptions = {"t,raw_orders"}]*/;
}
这可能吗?
解决方案
这有效:
message MyMeta {
int32 id = 1 [
(com.util.meta) = {
needValidation: false,
fileMap: [
{
key: "t",
value: "raw_orders"
}
];
}];
}
protobufmap
是带有和字段repeated
的映射条目消息字段的语法糖。1key
value
在您的情况下,您的元消息
message MyMeta {
optional bool needValidation = 1;
map<string, string> fileMap = 2;
}
相当于
message MyMeta {
optional bool needValidation = 1;
message FileMapEntry {
string key = 1;
string value = 2;
}
repeated FileMapEntry fileMap = 2;
}
当然,如果有一种更明显的方法可以在选项中指定映射值,那就更好了。
推荐阅读
- python-3.x - 如何在 Visual Studio 代码中的奇异点/docker 图像中使用 python 解释器
- vmware - 有没有办法使用 vmware sdk - pyvmomi 以编程方式将数据存储附加到 esxi 主机
- vba - 如何修改查找/替换以仅引用一个单元格
- swift - 在 Swift 中展开可选的内部地图闭包
- javascript - 如何在 angualr 模板中正确插入嵌套的属性获取器?
- c# - 没有参数定义但仍接受参数的构造函数
- android - 使用 Rx-Android 和 Retrofit 的嵌套网络调用
- javascript - 要存储在特定索引处的数组中的数据
- loops - CTCI:“给定一个循环链表,实现一个在循环开始时返回节点的算法”
- sql-server - 有没有办法将 SQL Server 本地数据库连接到 Google Sheet?