Thanks for the answer, Adam! On Thu, Jan 7, 2021 at 1:17 AM Adam Cozzette <[email protected]> wrote:
> The answer to this is a little bit complicated and depends on whether > you're using proto2 or proto3. Enums and int32 do share the same wire > format, but you have to be careful with unknown enum values. In proto2, if > you parse an unknown enum value then it will end up in the unknown field > set and the enum field will appear to be absent. So if you migrate your > field from an enum to int32 then you have to be aware that binaries using > the old schema will have this parsing behavior if they try to parse an int > that wasn't in the original enum definition. Actually to be fair, the same > problem can occur any time you add new values to a proto2 enum. > > We fixed this problem in proto3 by making proto3 enums "open", meaning > they can store arbitrary integer values normally instead of treating them > like unknown fields. So in proto3, moving from an enum to int32 is safer. > > Overall I think this is probably a safe change even in proto2 if you do it > carefully, especially if you can make sure all binaries get updated before > you start using int values that weren't included in the original enum. > > On Wed, Jan 6, 2021 at 7:55 AM vole zheng <[email protected]> wrote: > >> Hi, >> >> I have a similar problem with this one >> <https://stackoverflow.com/questions/26810188/protocol-buffers-and-enums-combinations>. >> Now I'd like to change an Enum to an int32, but I'm wondering if it's a >> safe and compatible change? >> >> From this section >> <https://developers.google.com/protocol-buffers/docs/proto#updating>, it >> seems to only mention 'int32, uint32, int64, uint64, and bool are all >> compatible'. But from this section >> <https://developers.google.com/protocol-buffers/docs/encoding#structure>, >> it seems 'int32, int64, uint32, uint64, sint32, sint64, bool, enum' are >> using the same wire format. So is enum and int32 compatible? >> >> -- >> 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 [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/protobuf/a4c61eaa-ca14-4ef3-8cb3-b0a54ed27c77n%40googlegroups.com >> <https://groups.google.com/d/msgid/protobuf/a4c61eaa-ca14-4ef3-8cb3-b0a54ed27c77n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- 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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/protobuf/CAH-v%3DVqwGrUk_qbet-5ce8z1ECUdn42VTyQGUaQrNnxUfWRxkQ%40mail.gmail.com.
