问题描述
我将以下枚举结构添加到我的 protobuf 中:
enum FooType {
INVALID = 0;
OW = 1;
RT = 2;
OJ = 3;
MC = 4;
}
[...]
optional FooType foo_type = 22 [default = INVALID];
Run Code Online (Sandbox Code Playgroud)
如果我们插入一个大于 的值会发生什么4?这个想法是,每个值都大于4应有的值INVALID。我正在检查我这边的代码。
if(Foo > 4) {
Foo = 0;
}
//add to protobuf
Run Code Online (Sandbox Code Playgroud)
这个解决方案看起来很脏。有没有办法在 protobuf 中的某个位置设置该条件。
Protobuf 生成的代码
在生成的代码中,我们有以下条件。
case 22: {
if (tag == 176) {
parse_itinerary_type:
int value;
DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
input, &value)));
if (::sss::model::protoBom::common::Context_FooType_IsValid(value)) {
set_itinerary_type(static_cast< ::sss::model::protoBom::common::Context_FooType >(value));
} else {
mutable_unknown_fields()->AddVarint(22, value);
}
} else {
goto handle_unusual;
}
if (input->ExpectAtEnd()) goto success;
break;
}
Run Code Online (Sandbox Code Playgroud)
我不明白mutable_unknown_fields()->AddVarint(22, value);分配的值不是默认值。这只是我们作为参数发送的值。
在哪里:
bool Context_Footype_IsValid(int value) {
switch(value) {
case 0:
case 1:
case 2:
case 3:
case 4:
return true;
default:
return false;
}
}
Run Code Online (Sandbox Code Playgroud)