如何在proto3中将oneof用作类型?

时间:2019-01-10 05:12:50

标签: protocol-buffers proto proto3

给出如下所示的消息,

message Event {
    required int32 event_id = 1;

    oneof EventType {
        FooEvent foo_event = 2;
        BarEvent bar_event = 3;
        BazEvent baz_event = 4;
    }
}

我想定义另一个使用EventType oneof作为类型的地图。准确地说,我想定义这样的内容

message Sample {
    map<string, Event.EventTypeCase> someMap = 1;
}

但是,这不起作用。我得到的错误是

PROTOC FAILED: "Event.EventTypeCase" is not defined.

1 个答案:

答案 0 :(得分:0)

  

我想定义另一个使用EventType oneof作为类型的地图。

它不是DSL中的一种,所以:您不能。它是特定消息中字段的概念性分组。 Event.EventTypeCase的存在是一个实现细节,据我所知,DSL规范中甚至没有提及(尽管protoc可能会也可能不会检测到冲突,如果您定义自己的{{1 }}或同名的enum