我想在原型文件中传递多个枚举值选项,
但我发现编译错误,同时按照下面的代码块中的
(types) = [5,6]
指定值:
extend google.protobuf.EnumValueOptions {
optional string name = 50001;
repeated int32 types = 50002;
}
enum FileDefinitionSubType {
UNKNOWN = 0;
MAIN = 1 [
(name) = "main",
(types) = [5,6] // Compilation error in this line
];
} here
有人可以建议如何解决这个问题。下面是我的 java 代码中的示例枚举,我想在原始文件中复制它。
enum CarType {
UNKNOWN = 0;
NEW = 1 ("new", [MARUTI_ALTO, FORD_ECOSPORT]);
OLD = 2 ("old", [MARUTI_800, FORD_FIGO]);
MIDAGE = 3 ("midAge", []);
}
enum CarModel {
UNKNOWN = 0;
MARUTI_800 = 1;
MARUTI_ALTO = 2;
FORD_ECOSPORT = 3;
FORD_FIGO = 4;
}
我已经尝试过传递不同的值集,但没有任何效果。
语言规范并没有真正解决这个问题,但似乎您可以多次给出相同的选项:
enum FileDefinitionSubType {
UNKNOWN = 0;
MAIN = 1 [
(name) = "main",
(types) = 5,
(types) = 6
];
}
单独的值将被收集到重复列表中,这可以通过
protoc --decode
进行验证:
$ protoc -otest.pb test.proto
$ protoc --decode=google.protobuf.FileDescriptorSet google/protobuf/descriptor.proto < test.pb
...
enum_type {
name: "MyEnum"
value {
name: "MyValue"
number: 1
options {
50001: "main"
50002: 1
50002: 2
}
}
}
...
或者,您可以将所有选项放入子消息中,并使用“协议缓冲区文本格式”给出值:
message MyOptions {
optional string name = 1;
repeated int32 types = 2;
}
extend google.protobuf.EnumValueOptions {
optional MyOptions myopt = 50001;
}
enum MyEnum
{
MyValue = 1 [(myopt) = {name: "main", types: [1,2]}];
}