17 #ifndef AVROBYTEARRAYCONVERTER_HPP_
18 #define AVROBYTEARRAYCONVERTER_HPP_
25 #include <avro/Compiler.hh>
26 #include <avro/Specific.hh>
27 #include <avro/Stream.hh>
28 #include <avro/Encoder.hh>
29 #include <avro/Decoder.hh>
62 T
fromByteArray(
const std::uint8_t* data,
const std::uint32_t& dataSize);
71 void fromByteArray(
const std::uint8_t* data,
const std::uint32_t& dataSize, T& datum);
85 void toByteArray(
const T& datum, std::ostream& stream);
91 encoder_ = avro::jsonEncoder(schema);
92 decoder_ = avro::jsonDecoder(schema);
96 encoder_ = avro::binaryEncoder();
97 decoder_ = avro::binaryDecoder();
101 avro::EncoderPtr encoder_;
102 avro::DecoderPtr decoder_;
114 if (!data || dataSize == 0) {
119 std::unique_ptr<avro::InputStream> in = avro::memoryInputStream(data, dataSize);
122 avro::decode(*decoder_, datum);
130 if (!data || dataSize == 0) {
134 std::unique_ptr<avro::InputStream> in = avro::memoryInputStream(data, dataSize);
137 avro::decode(*decoder_, datum);
143 std::ostringstream ostream;
144 std::unique_ptr<avro::OutputStream> out = avro::ostreamOutputStream(ostream);
146 encoder_->init(*out);
147 avro::encode(*encoder_, datum);
151 const std::string& encodedData = ostream.str();
152 const size_t encodedDataSize = encodedData.size();
154 buffer.second = encodedDataSize;
155 buffer.first.reset(
new uint8_t[encodedDataSize]);
156 memcpy(buffer.first.get(), encodedData.data(), encodedDataSize);
164 std::unique_ptr<avro::OutputStream> out = avro::ostreamOutputStream(stream);
166 encoder_->init(*out);
167 avro::encode(*encoder_, datum);
void switchToJson(const avro::ValidSchema &schema)
SharedDataBuffer toByteArray(const T &datum)
T fromByteArray(const std::uint8_t *data, const std::uint32_t &dataSize)
std::pair< boost::shared_array< std::uint8_t >, std::uint32_t > SharedDataBuffer