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);
86 void toByteArray(
const T& datum, std::vector<std::uint8_t>& dest);
93 void toByteArray(
const T& datum, std::ostream& stream);
99 encoder_ = avro::jsonEncoder(schema);
100 decoder_ = avro::jsonDecoder(schema);
104 encoder_ = avro::binaryEncoder();
105 decoder_ = avro::binaryDecoder();
109 avro::EncoderPtr encoder_;
110 avro::DecoderPtr decoder_;
122 if (!data || dataSize == 0) {
127 std::unique_ptr<avro::InputStream> in = avro::memoryInputStream(data, dataSize);
130 avro::decode(*decoder_, datum);
138 if (!data || dataSize == 0) {
142 std::unique_ptr<avro::InputStream> in = avro::memoryInputStream(data, dataSize);
145 avro::decode(*decoder_, datum);
151 std::stringstream ostream;
152 std::unique_ptr<avro::OutputStream> out = avro::ostreamOutputStream(ostream);
154 encoder_->init(*out);
155 avro::encode(*encoder_, datum);
160 std::streampos beg = ostream.tellg();
161 ostream.seekg(0, std::ios_base::end);
163 std::streampos end = ostream.tellg();
164 ostream.seekg(0, std::ios_base::beg);
166 buffer.second = end - beg;
167 buffer.first.reset(
new uint8_t[buffer.second]);
168 std::copy(std::istreambuf_iterator<char>(ostream), std::istreambuf_iterator<char>(), buffer.first.get());
176 std::stringstream ostream;
177 std::unique_ptr<avro::OutputStream> out = avro::ostreamOutputStream(ostream);
179 encoder_->init(*out);
180 avro::encode(*encoder_, datum);
183 std::streampos beg = ostream.tellg();
184 ostream.seekg(0, std::ios_base::end);
186 std::streampos end = ostream.tellg();
187 ostream.seekg(0, std::ios_base::beg);
189 dest.reserve(end - beg);
190 dest.assign(std::istreambuf_iterator<char>(ostream), std::istreambuf_iterator<char>());
196 std::unique_ptr<avro::OutputStream> out = avro::ostreamOutputStream(stream);
198 encoder_->init(*out);
199 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