【问题标题】:How to use oneof as a type in proto3?如何在 proto3 中使用 oneof 作为类型?
【发布时间】:2019-01-10 05:12:50
【问题描述】:

给定一条看起来像这样的消息,

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.

【问题讨论】:

  • oneof 不应该用作“基类”。也许Any 适合您的地图用例。

标签: protocol-buffers proto proto3


【解决方案1】:

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

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

【讨论】:

  • 我找不到这样做的方法,所以我想知道我是否遗漏了什么。感谢您的澄清:)
猜你喜欢
  • 2020-07-07
  • 2021-07-05
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 2020-07-01
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多