Создание объектов TBase из Thrift-сгенерированных классов в Scala
У меня есть несколько классов Scala, которые я сгенерировал с помощью Thrift (Scrooge). Теперь мне нужно как-то создать экземпляр класса TBase, так как класс TSerializer нуждается в этом в качестве входных данных.
Это мой подход:
def createTestBinary(): String = {
val proto = new TBinaryProtocol.Factory
val err = new ClientError{}
val binary = new TSerializer().serialize(err)
""
}
ClientError - это сгенерированный класс. Как я могу создать его экземпляр или сделать его членом TBase?
Есть идеи, как это сделать? Заранее спасибо!
2 ответа
Решение
Вам не нужно TSerializer
, это для "ванильного" бережливости, а не для сгенерированных Скруджем классов. Вам нужно сделать что-то вроде этого:
val transport = TMemoryBuffer(1024) // or whatever
err.write(new TBinaryProtocol(transport))
val binary = transport.getArray
Для сгенерированных scrooge классов вы можете использовать JsonThriftSerializer:
import com.twitter.scrooge.JsonThriftSerializer
val serializer = JsonThriftSerializer(<scrooge-generated-classes>._codec)
Json.toJson(serializer.toString(<scrooge-generated-classes>))