使用Protocol Buffers,将enum从内部消息移动到外部消息是否安全?

时间:2017-08-17 15:50:57

标签: enums protocol-buffers

我遇到了一个用例,我希望将协议缓冲区消息中声明的枚举移动到消息之外,以便其他消息使用相同的枚举。

即,我想知道是否有任何问题从此

开始
message Message {
   enum Enum {
       VALUE1 = 1;
       VALUE2 = 2;
   } 
   optional Enum enum_value = 1;
}

到这个

enum Enum {
    VALUE1 = 1;
    VALUE2 = 2;
}
message Message {
    optional Enum enum_value = 1;
}

这是否会导致将使用第一个协议缓冲区定义创建的数据反序列化为第二个问题?

1 个答案:

答案 0 :(得分:1)

它根本不会更改序列化数据 - 枚举的位置/名称与实际数据无关,因为它只存储整数值。

可能会更改的是某些语言消费枚举的方式,即它们如何限定它。是X.Y.FooX.Foo还是Foo。请注意,由于枚举遵循C ++命名/作用域规则,因此某些内容(例如冲突)不是问题:但它可能会影响某些语言作为消费者。

所以:如果你是.proto的唯一消费者,你在这里绝对没问题。如果您与其他人共享.proto,则更改它可能会有问题,除非他们乐意更新其代码以符合任何新的资格要求。