如何在 Protobuf 文件中为 EnumValueOptions 指定多个枚举值

问题描述 投票:0回答:1

我想在原型文件中传递多个枚举值选项,
但我发现编译错误,同时按照下面的代码块中的

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

我已经尝试过传递不同的值集,但没有任何效果。

protocol-buffers protobuf-java custom-options
1个回答
0
投票

语言规范并没有真正解决这个问题,但似乎您可以多次给出相同的选项:

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]}];
}
© www.soinside.com 2019 - 2024. All rights reserved.