12#include "rapidjson/document.h"
13#include "rapidjson/prettywriter.h"
17template<
typename Arg1,
typename... Args>
18void make_serialized(rapidjson::PrettyWriter<rapidjson::StringBuffer>& writer, std::ostream& os, Arg1& arg1, Args... args) {
19 arg1.Write(writer, os);
22 if constexpr (
sizeof...(args) > 0) {
28template<
typename... Ts>
31template<
typename Arg1,
typename... Args>
32void make_unserialized(rapidjson::Document& doc, std::istream& is, Arg1& arg1, Args&&... args) {
36 if constexpr (
sizeof...(args) > 0) {
45template<
class RetType,
class... Args>
50 virtual std::ostream&
Write(std::ostream& os, Args... args)
override {
52 os.seekp(0, std::ios::beg);
53 rapidjson::StringBuffer sb;
54 rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(sb);
57 if (writer.IsComplete())
60 os.setstate(std::ios::failbit);
62 catch (
const std::exception& e) {
63 std::cerr <<
"Serialize error: " << e.what() << std::endl;
70 virtual std::istream&
Read(std::istream& is, Args&... args)
override {
73 std::streampos current_pos = is.tellg();
74 is.seekg(0, std::ios::end);
75 int length =
static_cast<int>(is.tellg());
76 is.seekg(current_pos, std::ios::beg);
79 char* buf = (
char*)malloc(length + 1);
84 is.rdbuf()->sgetn(buf, length);
90 rapidjson::Document doc;
94 if (doc.HasParseError())
97 is.setstate(std::ios::failbit);
98 std::cout <<
"Parse error: " << doc.GetParseError() << std::endl;
99 std::cout <<
"Error offset: " << doc.GetErrorOffset() << std::endl;
108 catch (
const std::exception& e) {
109 std::cerr <<
"Deserialize error: " << e.what() << std::endl;
Delegate serializer interface class.
virtual std::istream & Read(std::istream &is, Args &... args) override
Definition rapidjson/Serializer.h:70
virtual std::ostream & Write(std::ostream &os, Args... args) override
Definition rapidjson/Serializer.h:50
void make_unserialized(msgpack::unpacker &unpacker, Arg1 &arg1, Args &&... args)
Definition msgpack/Serializer.h:33
void make_serialized(msgpack::sbuffer &buffer, Arg1 &arg1, Args... args)
Definition msgpack/Serializer.h:22
void make_unserialized(rapidjson::Document &doc, std::istream &is)
Definition rapidjson/Serializer.h:29
void make_serialized(rapidjson::PrettyWriter< rapidjson::StringBuffer > &writer, std::ostream &os, Arg1 &arg1, Args... args)
Definition rapidjson/Serializer.h:18
Definition msgpack/Serializer.h:48
Definition ISerializer.h:12