31#include <nlohmann/json.hpp>
50 uint8_t
format =
static_cast<uint8_t
>(WireFormat::Json);
61 h.push_back(
static_cast<char>(fmt));
62 h.push_back(
static_cast<char>(comp));
64 uint32_t schema = LIB_VERSION_NUM;
65 h.push_back(
static_cast<char>((schema >> 24) & 0xFF));
66 h.push_back(
static_cast<char>((schema >> 16) & 0xFF));
67 h.push_back(
static_cast<char>((schema >> 8) & 0xFF));
68 h.push_back(
static_cast<char>(schema & 0xFF));
76 if (std::memcmp(part.data(),
WIRE_MAGIC, 4) != 0)
79 out.
format =
static_cast<uint8_t
>(part[5]);
82 out.
schema = (
static_cast<uint32_t
>(
static_cast<uint8_t
>(part[8])) << 24) |
83 (
static_cast<uint32_t
>(
static_cast<uint8_t
>(part[9])) << 16) |
84 (
static_cast<uint32_t
>(
static_cast<uint8_t
>(part[10])) << 8) |
85 static_cast<uint32_t
>(
static_cast<uint8_t
>(part[11]));
93 case Compression::None:
95 case Compression::Snappy:
97 case Compression::Auto:
105 if (fmt == WireFormat::MsgPack) {
106 auto v = nlohmann::json::to_msgpack(j);
107 return std::string(
reinterpret_cast<const char *
>(v.data()), v.size());
116 uint8_t comp, std::string &json_text_out) {
117 const std::string *bytes = &raw;
118 std::string uncompressed;
120 if (!snappy::Uncompress(raw.data(), raw.size(), &uncompressed))
122 bytes = &uncompressed;
124 if (format ==
static_cast<uint8_t
>(WireFormat::MsgPack)) {
126 nlohmann::json j = nlohmann::json::from_msgpack(*bytes);
127 json_text_out = j.dump();
133 json_text_out = *bytes;
constexpr char WIRE_MAGIC[4]
constexpr uint8_t WIRE_HDR_VERSION
std::string encode_payload(const nlohmann::json &j, WireFormat fmt)
constexpr size_t WIRE_HEADER_SIZE
Comp resolve_compression(Compression policy, size_t size)
bool decode_to_json_text(const std::string &raw, uint8_t format, uint8_t comp, std::string &json_text_out)
std::string make_wire_header(WireFormat fmt, Comp comp, bool has_blob)
constexpr uint8_t WIRE_FLAG_BLOB
bool parse_wire_header(const std::string &part, WireHeader &out)