如何解决Protobuf:如果枚举集中不存在赋予枚举的值怎么办?
问题描述
我在 protobuf 中添加了以下枚举结构:
enum FooType {
INVALID = 0;
OW = 1;
RT = 2;
OJ = 3;
MC = 4;
}
[...]
optional FooType foo_type = 22 [default = INVALID];
如果我们插入一个大于 4
的值会发生什么?这个想法是,每个大于 4
的值都应该是 INVALID
。我正在检查我这边的代码。
if(Foo > 4) {
Foo = 0;
}
//add to 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;
}
我不明白 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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。