Преобразование определений Protobuf в Thrift - PullRequest
6 голосов
/ 09 марта 2012

Существуют ли какие-либо инструменты для создания определения интерфейса Thrift из определения Protobuf?

Ответы [ 3 ]

1 голос
/ 28 июня 2018

I написал переводчик для преобразования подмножества 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;
}
1 голос
/ 19 февраля 2015

Похоже, ответ "еще нет". Одна из проблем, с которой вы столкнетесь, заключается в том, что Thrift определяет полную RPC-систему со службами и вызовами методов, тогда как protobuf действительно фокусируется на типах данных и битах сериализации. Модель данных Thrift немного более ограничена, чем модель protobuf (без рекурсивных структур и т. Д.), Но это не должно быть проблемой в направлении Thrift -> protobuf. * ​​1001 *

Конечно, вы можете довольно легко преобразовать все экономичные типы данных в определения protobuf, при этом полностью игнорируя раздел службы. Вы можете даже добавить что-то подобное в качестве встроенного генератора в thrift-компилятор, если хотите.

Thrift и Protobuf не являются взаимозаменяемыми. Взгляните на Самые большие различия между Thrift и Protocol Buffers? , чтобы увидеть некоторые ключевые различия. Что именно вы пытаетесь достичь?

0 голосов
/ 29 июля 2015

Я не думаю, что есть. Если вы готовы написать код для этого, вы можете написать языковой генератор, который создает файлы .thrift для вас.

Вы можете написать инструмент на любом языке (я написал на C ++ в protobuf-j2me [1] и адаптировал код protobuf-csharp-port в [2]).

Вы можете иметь protoc.exe, чтобы вызвать его как:

protoc.exe --plugin=protoc-gen-thrift.exe --thrift_out=. file.proto

Вам нужно назвать его как protoc-gen-thrift.exe, чтобы сделать доступной опцию --thrift_out.

[1] https://github.com/igorgatis/protobuf-j2me

[2] https://github.com/jskeet/protobuf-csharp-port/blob/6ac38bf84452f1f9bd3df59a276708725be2ed49/src/ProtoGen/ProtocGenCs.cs

...