Как я могу очистить один случай в protobuf?

Учитывая этот основной прото:

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(), Есть ли какая-то причина, почему это не должно быть разрешено, или способ, которым я могу сделать это, не завися от конкретного случая, чтобы установить / очистить?

0 ответов

Другие вопросы по тегам