#ifndef CEREAL_JSON_ARCHIVE_JSON_ARCHIVE_HPP_ #define CEREAL_JSON_ARCHIVE_JSON_ARCHIVE_HPP_ #include #include #include namespace cereal { // ###################################################################### class JSONOutputArchive : public OutputArchive { public: JSONOutputArchive(std::ostream & stream) : OutputArchive(this), itsStream(stream) { } Json::StyledStreamWriter & writer() { return itsWriter; } std::ostream & stream() {return itsStream; } private: std::ostream & itsStream; Json::StyledStreamWriter itsWriter; }; // ###################################################################### class JSONInputArchive : public InputArchive { public: JSONInputArchive(std::istream & stream) : InputArchive(this), itsStream(stream) { } std::istream & stream() {return itsStream; } private: std::istream & itsStream; }; //! Saving for POD types to json template typename std::enable_if::value, void>::type save(JSONOutputArchive & ar, T const & t) { //ar.stream() << t; } //! Loading for POD types from json template typename std::enable_if::value, void>::type load(JSONInputArchive & ar, T & t) { //ar.stream() >> t; } //! Saving for NVP types to json template void save(JSONOutputArchive & ar, NameValuePair const & t) { //ar.stream() << t.name << " : "; // //ar & t.value; //ar.stream() << "\n"; Json::Value v; v[t.name] = t.value; ar.writer().write(ar.stream(), v); //ar.writer().write(ar.stream(), Json::Value(t.name)); //ar.writer().write(ar.stream(), Json::Value(t.value)); } //! Loading for NVP types from json template void load(JSONInputArchive & ar, NameValuePair t) { ar & t.value; } //! Serialization for basic_string types to json template void save(JSONOutputArchive & ar, std::basic_string const & str) { //ar.stream() << "\"" << str << "\""; } //! Serialization for basic_string types from json template void load(JSONInputArchive & ar, std::basic_string & str) { //size_t size; //ar & size; //str.resize(size); //ar.load_json(const_cast(str.data()), size * sizeof(CharT)); //std::cout << "Loading string: " << str << std::endl; } } #endif // CEREAL_JSON_ARCHIVE_JSON_ARCHIVE_HPP_