Как я могу очистить один случай в protobuf? - PullRequest
0 голосов
/ 11 декабря 2018

Учитывая это базовое прото:

syntax = "proto3";
message Foo {
    oneof cases {
        bool a = 1;
        bool b = 2;
        // ...
    }
}

Я бы хотел очистить все поля в cases, чтобы foo.cases_case() == CASES_NOT_SET (в C ++, не уверен, доступно ли это для других языков).Следующий [некрасивый] обходной путь делает то, что я хочу:

// Given Foo foo;
foo.set_a(false);
foo.clear_a();

Я также могу очистить все случаи, но это может привести к ошибкам при добавлении новых случаев:

foo.clear_a();
foo.clear_b();
// Oops, forgot foo.clear_c();

Просмотр сгенерированногоВ коде есть приватный метод, который делает именно то, что я хочу, и я не уверен, почему он не может быть выставлен: Foo::clear_cases().Есть ли какая-то причина, почему это не должно быть разрешено, или способ, которым я могу сделать это, не завися от конкретного случая, чтобы установить / очистить?

...