我有一个protobuf:
enum Type {
UNDEFINED = 0;
SMALL = 1;
MEDIUM = 2;
BIG = 3;
}
最后一个值被改变了(不是我):
enum Type {
UNDEFINED = 0;
SMALL = 1;
MEDIUM = 2;
VERY_BIG = 3;
}
这种变化会对我解析protobuf消息(包含BIG的消息)的能力产生什么影响?在解析二进制编码或文本编码消息之间有区别吗?
弃用BIG并引入VERY_BIG值的最佳做法是什么?
答案 0 :(得分:4)
如果你正在使用二进制protobuf格式,那么:没问题。仅发送原始值 - 作为varint,而不是名称。用于映射到BIG
的数据现在将显示为VERY_BIG
。你将无法区分两者。
更改架构并重新运行protoc可能会给您一些构建错误,直到您在自己的代码中修复相同的更改,但protobuf本身不会关心甚至注意。
如果您使用的是JSON格式:您需要对其进行测试。我对JSON规则一无所知(我试图避免JSON输出)。
一般来说,重命名并不是一个很好的选择。最好添加一个带有新唯一值的新条目,只需将旧条目标记为已弃用,但请注意您可能仍然期望旧值。
由于EnumValueOptions
有一个deprecated
标记,您应该可以使用[deprecated=true]
对旧标记来标记它已过时。