serialization/ThriftSerializers.h (40 lines of code) (raw):
// Copyright (c) Facebook, Inc. and its affiliates.
#pragma once
#include <folly/io/IOBufQueue.h>
#include <thrift/lib/cpp2/protocol/BinaryProtocol.h>
#include <thrift/lib/cpp2/protocol/SimpleJSONProtocol.h>
#include <string>
// ***********************************************************************
// Serialization
template <class P, class T>
std::string serializeThrift(const T& f) {
folly::IOBufQueue queue;
P protocol;
protocol.setOutput(&queue);
std::string out;
f.write(&protocol);
queue.appendToString(out);
return out;
}
template <class T>
std::string serializeJSON(const T& f) {
return serializeThrift<apache::thrift::SimpleJSONProtocolWriter, T>(f);
}
template <class T>
std::string serializeBinary(const T& f) {
return serializeThrift<apache::thrift::BinaryProtocolWriter, T>(f);
}
// ***********************************************************************
// Deserialization
template <class P, class T>
T deserializeThrift(const std::string& output) {
auto buf = folly::IOBuf::copyBuffer(output);
P protReader;
protReader.setInput(buf.get());
T f;
f.read(&protReader);
return f;
}
template <class T>
T deserializeJSON(const std::string& output) {
return deserializeThrift<apache::thrift::SimpleJSONProtocolReader, T>(output);
}
template <class T>
T deserializeBinary(const std::string& output) {
return deserializeThrift<apache::thrift::BinaryProtocolReader, T>(output);
}