我 写了一个翻译器,可以将 Thrift 的子集转换为 Protobuf,反之亦然。
这是一些 Thrift 代码:
enum Operation{
ADD=1,SUBTRACT=2,MULTIPLY=3,DIVIDE=4
}
struct Work{1:i32 num1,2:i32 num2,4:string comment
}
这将自动转换为以下 Protobuf 代码:
enum Operation{
ADD=1,SUBTRACT=2,MULTIPLY=3,DIVIDE=4
}
message Work{int32 num1 = 1;int32 num2 = 2;string comment = 4;
}
我认为没有这样的工具。如果你想编写代码,你可以编写一个语言生成器来为你生成.thrift文件。
你可以用任何语言编写这个工具(我在protobuf-j2me [1]中用C++编写了它,并在[2]中适应了protobuf-csharp-port代码)。
你可以让protoc.exe像这样调用它:
protoc.exe --plugin=protoc-gen-thrift.exe --thrift_out=. file.proto
你需要将命名为protoc-gen-thrift.exe
才能使用 --thrift_out
选项。
我相信是有的。
请查看我编写的非破坏性转换器protobuf-thrift,它可以将protobuf转换为thrift,反之亦然。此外,它还将保留声明顺序和注释,从而最大程度地保留源代码格式。
您也可以在这里尝试Web界面。
顺便说一句,我也同意captncraig的答案。的确,thrift和protobuf有许多不同之处,例如protobuf中的嵌套类型和thrift中的联合类型。但是,你不能否认它们有很多共同的语法,例如enum => enum,struct => message,service => service,这些是我们最常用的语法。
因此,protobuf-thrift是帮助您减少重复工作的工具,同时知道“它们并不是100%可转换”的真相。