I am new to thrift and have been trying to serialize a thrift structure using c
but have been unable to get it to work. I want to serialize using the binary
protocol into a memory buffer. I do not need RPC, I will be passing the message
into Kafka. Does anyone know the correct way to do this?
I have looked through all the examples and test code and have come up with the
following. It compiles, but is not working correctly. I am clearly not doing it
correctly. rdata_write is a method generated by thrift.
GError *error = NULL;
ThriftTransport *transport = NULL;
ThriftProtocol *protocol = NULL;
transport=g_object_new (THRIFT_TYPE_MEMORY_BUFFER, "buf_size", 100, NULL);
if(transport){
thrift_transport_open (transport, &error);
protocol = g_object_new (THRIFT_TYPE_BINARY_PROTOCOL, "transport",
transport,NULL);
if(protocol){
rdata* pData = g_object_new (TYPE_RDATA,"flag",1,
"id",27,
"start",12000,
"done",345435,
"notif",34455,
"spid","This is the SPID",NULL);
if(pData){
/* wanted something like obj->write(protocol,&error)
But how to get object? pData does not have write method */
gint32 len =
rdata_write(pData,(ThriftProtocol*)protocol,&error);
// Print Content of Buffer
ThriftMemoryBuffer* pMem = (ThriftMemoryBuffer*)transport;
if(pMem->buf != NULL){
printHex((const void *)pMem->buf, len);
}
g_object_unref (pData);
}
g_object_unref (protocol);
}
g_object_unref(transport);
}
Error handling and support functions skipped for brevity.
Any help appreciated