I'm from the Apache Mesos community and we're working on things that uses proto3.
We usually turn on compiler options to report missing values in switch statements,
and don't do a "default" clause. This gives us the benefit of capturing missing enum
values during compile time. However, it seems that for proto3's open enum values,
we need to either manually adding those `*_INT_MAX_SENTINEL_DO_NOT_USE_` values
in switch statements, or add a default clause to avoid such errors but then we lose
the benefit I mentioned above. It seems that the compiler is not clever enough
to infer that clauses for those sentinel values are not needed for switch statements
that are inside `if(Enum_IsValid(...))` statements.
My question is, what's the best practice if I don't want to add a default clause?
Is it safe to add either `*_INT_MAX_SENTINEL_DO_NOT_USE_` symbols
or `google::protobuf::kint32max` into switch statements, such that these will
remain unchanged in future versions of protobuf library? Or is there a better way
to address this?
Thanks,
Chun-Hung
Thanks,
Chun-Hung
--
You received this message because you are subscribed to the Google Groups "Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+unsubscribe@googlegroups.com.
To post to this group, send email to prot...@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.
Thanks,
Chun-Hung
To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+u...@googlegroups.com.
Hi Feng,Thanks for answering.As suggested by the official documentation:We can handle the unknown enum value through either a `default` clause or an `if` check as follows:// Wrong version of client-side code:int HandleFoo(Foo foo) {if (Foo::Type_IsValid(foo.type()) {switch (foo.type()) {case FOO: return ...;case BAR: return ...;case google::protobuf::kint32min:case google::protobuf::kint32max:// UNREACHABLE.}} else {// Handle the unknown enum value properly.}}So this way we can ensure that the unknown enum values are handled,and also the compiler can check if an enum value is missing in the `switch` statement for us.Is it future-proof to use `google::protobuf::kint32max` or `*_INT_MAX_SENTINEL_DO_NOT_USE_`?
To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+unsubscribe@googlegroups.com.