fpmas 1.6
json_datapack.h
Go to the documentation of this file.
1#ifndef FPMAS_IO_JSON_DATAPACK_H
2#define FPMAS_IO_JSON_DATAPACK_H
3
11#include "datapack.h"
12#include "json.h"
13
14namespace fpmas { namespace io { namespace datapack {
38 template<typename T, typename JsonType>
40
45 template<typename PackType>
46 static std::size_t size(const PackType&, const T&) {
47 return 0;
48 }
49
59 template<typename PackType>
60 static void to_datapack(PackType& pack, const T& item) {
61 std::string json_str = JsonType(item).dump();
62 pack.expand(pack.template size(json_str));
63 pack.template put(json_str);
64 }
65
76 template<typename PackType>
77 static T from_datapack(const PackType& pack) {
78 return JsonType::parse(
79 pack.template get<std::string>()
80 ).template get<T>();
81 }
82 };
83
90 template<typename JsonType>
91 struct BasicJsonSerializer<std::string, JsonType> {
96 template<typename PackType>
97 static std::size_t size(const PackType& pack, const std::string& item) {
98 return Serializer<std::string>::size(pack, item);
99 }
107 template<typename PackType>
108 static void to_datapack(PackType& pack, const std::string& item) {
110 }
111
119 template<typename PackType>
120 static std::string from_datapack(const PackType& pack) {
122 }
123 };
124
134 template<typename T, typename Enable = void>
140
145 template<typename T, typename Enable = void>
152}}}
153
154namespace fpmas { namespace io { namespace json {
180 template<typename T, typename PackType>
191 template<typename JsonType>
192 static void to_json(JsonType& json, const T& data) {
193 PackType p = data;
194 std::vector<std::uint8_t> binary_buffer(p.data().size);
195 for(std::size_t i = 0; i < p.data().size; i++)
196 binary_buffer[i] = p.data().buffer[i];
197
198 json = JsonType::binary(std::move(binary_buffer));
199 }
200
211 template<typename JsonType>
212 static T from_json(const JsonType& json) {
213 const std::vector<std::uint8_t>& binary_buffer = json.get_binary();
214
215 datapack::DataPack p(binary_buffer.size(), 1);
216 for(std::size_t i = 0; i < binary_buffer.size(); i++)
217 p.buffer[i] = binary_buffer[i];
218 return PackType::parse(p).template get<T>();
219 }
220 };
221
227 template<typename T, typename Enable=void>
230
234 typedef nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, datapack_serializer> datapack_json;
235
240 template<typename T, typename Enable=void>
243
248 typedef nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, light_datapack_serializer> light_datapack_json;
249
250}}}
251
252#endif
Definition: communication.h:16
char * buffer
Definition: communication.h:36
Definition: datapack.h:301
BasicObjectPack< JsonSerializer > JsonPack
Definition: json_datapack.h:139
BasicObjectPack< LightJsonSerializer > LightJsonPack
Definition: json_datapack.h:151
nlohmann::basic_json< std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, datapack_serializer > datapack_json
Definition: json_datapack.h:234
nlohmann::basic_json< std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, light_datapack_serializer > light_datapack_json
Definition: json_datapack.h:248
Definition: fpmas.cpp:3
static void to_datapack(PackType &pack, const std::string &item)
Definition: json_datapack.h:108
static std::size_t size(const PackType &pack, const std::string &item)
Definition: json_datapack.h:97
static std::string from_datapack(const PackType &pack)
Definition: json_datapack.h:120
Definition: json_datapack.h:39
static T from_datapack(const PackType &pack)
Definition: json_datapack.h:77
static std::size_t size(const PackType &, const T &)
Definition: json_datapack.h:46
static void to_datapack(PackType &pack, const T &item)
Definition: json_datapack.h:60
Definition: datapack.h:55
Definition: json_datapack.h:181
static T from_json(const JsonType &json)
Definition: json_datapack.h:212
static void to_json(JsonType &json, const T &data)
Definition: json_datapack.h:192