这适用于什么语言? 添加了 proto 语法(可以适用于 proto2 或 proto3,但对于 proto2 更好)。
描述您正在尝试解决的问题。
我正在尝试采用跨平台的方式来自动执行两个原始消息之间的转换。对于重构、API 更改等非常有用。当您想要在不破坏现有 API 的情况下创建更好的原型消息时。
描述您想要的解决方案
使用原始注释(如protoc-gen-validate)在旧字段到新字段之间映射(使用完整字段路径,可能启用一些通用转换方法,如 int->string 或 string->enum 等)
每种语言都需要单独实现其用法。
描述您考虑过的替代方案
单独为每种语言创建转换。我发现有一些库可以为 Java 执行此操作。但这不是跨语言的,并且不适用于使用其他语言的 API 客户端。
额外的背景信息
要求:
- 这两个消息可以具有完全不同的结构(例如,子消息、字段重命名、不同的枚举类型)
- 我希望为所有语言自动创建转换(例如,通过构建规则)。如果不可能,则必须同时支持 Java 和 C++。
示例: A 和 B 之间的转换:
message A {
optional string name = 1;
optional Enum type = 2;
enum Enum {
TYPE1 = 1,
TYPE2 = 2,
}
}
message B {
message Metadata {
optional string name = 1;
}
optional Metadata metadata = 1;
message SemanticData {
optional SimilarEnum type = 1;
enum SimilarEnum {
TYPE_RENAMED1 = 1,
TYPE_RENAMED_REVALUED2 = 5,
}
}
optional SemanticData value = 2;
}