Как использовать oneof как тип в proto3? - PullRequest
0 голосов
/ 10 января 2019

Учитывая сообщение, которое выглядит так,

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 голосов
/ 15 января 2019

Я хочу определить другую карту, которая использует EventType oneof в качестве типа.

Это не тип в DSL, поэтому: вы не можете. Это концептуальная группировка полей в конкретном сообщении. Существование Event.EventTypeCase - это деталь реализации, а не то, что даже не упомянуто в спецификации DSL, насколько мне известно (хотя protoc может обнаруживать или не обнаруживать конфликты, если вы определяете свои собственные enum или message с тем же именем)

...