#ifndef code__json__serialize_hxx_ #define code__json__serialize_hxx_ #include #include #include #include namespace code::json { template void serialize(std::ostream& o, T const& model) { write(o, marshal(model)); } template std::string serialize(T const& model) { std::ostringstream str; serialize(str, model); return str.str(); } template T deserialize(diagnostics& d, std::istream& i, marshaling_context_t* context = nullptr) { return unmarshal(read(d, i), context); } template T deserialize(std::istream& i, marshaling_context_t* context = nullptr) { return unmarshal(read(i), context); } template T deserialize(diagnostics& d, std::istream&& i, marshaling_context_t* context = nullptr) { return deserialize(d, i, context); } template T deserialize(std::istream&& i, marshaling_context_t* context = nullptr) { return deserialize(i, context); } template T deserialize(diagnostics& d, std::string const& str, marshaling_context_t* context = nullptr) { // TODO use std::string overload of read return deserialize( d, std::istringstream{ str, std::ios::in | std::ios::binary }, context); } template T deserialize(std::string const& str, marshaling_context_t* context = nullptr) { // TODO use std::string overload of read return deserialize( std::istringstream{ str, std::ios::in | std::ios::binary }, context); } } // namespace code::json #endif