7 #ifndef RETDEC_SERDES_STD_H
8 #define RETDEC_SERDES_STD_H
11 #include <type_traits>
13 #include <rapidjson/document.h>
14 #include <rapidjson/encodings.h>
26 #define SERIALIZE_EXPLICIT_INSTANTIATION(T) \
27 template void serialize( \
28 rapidjson::PrettyWriter<rapidjson::StringBuffer>&, \
30 template void serialize( \
31 rapidjson::PrettyWriter<rapidjson::StringBuffer, rapidjson::ASCII<>>&, \
35 const rapidjson::Value& val,
36 const std::string& key,
37 int64_t defaultValue = 0);
40 const rapidjson::Value& val,
41 const std::string& key,
42 uint64_t defaultValue = 0);
45 const rapidjson::Value& val,
46 const std::string& key,
47 bool defaultValue =
false);
50 const rapidjson::Value& val,
51 const std::string& key,
52 double defaultValue = 0.0);
55 const rapidjson::Value& val,
56 const std::string& key,
57 const std::string& defaultValue =
"");
59 void deserialize(
const rapidjson::Value& val,
const char*& str);
60 void deserialize(
const rapidjson::Value& val, std::string& s);
62 template<
typename ContainerOfDeserializableObjects>
64 const rapidjson::Value& val,
65 const std::string& key,
66 ContainerOfDeserializableObjects& objs)
70 auto array = val.FindMember(key);
71 if (array != val.MemberEnd() && array->value.IsArray())
73 for (
auto i = array->value.Begin(), e = array->value.End(); i != e; ++i)
78 typename ContainerOfDeserializableObjects::value_type v;
80 objs.insert(objs.end(), v);
86 template <
typename DeserializableObject>
88 const rapidjson::Value& val,
89 const std::string& key,
90 DeserializableObject& obj)
92 auto res = val.FindMember(key);
93 if (res != val.MemberEnd())
99 template <
typename Writer>
102 const std::string& key,
104 bool doSerialize =
true)
113 template <
typename Writer>
116 const std::string& key,
118 bool doSerialize =
true)
123 writer.Uint64(value);
127 template <
typename Writer>
130 const std::string& key,
132 bool serializeIfFalse =
true)
134 if (value || serializeIfFalse)
141 template <
typename Writer>
145 writer.Double(value);
148 template <
typename Writer>
151 const std::string& key,
152 const std::string& value,
153 bool serializeIfValueEmpty =
false)
155 if (!value.empty() || serializeIfValueEmpty)
158 writer.String(value);
162 template <
typename Writer>
165 const std::string& value)
167 writer.String(value);
170 template<
typename Writer,
typename ContainerOfSerializableObjects>
173 const std::string& key,
174 const ContainerOfSerializableObjects& objs,
175 bool serializeIfContainerEmpty =
false)
177 if (!objs.empty() || serializeIfContainerEmpty)
181 for (
auto& obj : objs)
189 template <
typename Writer,
typename SerializableObject>
192 const std::string& key,
193 const SerializableObject& obj,
194 bool doSerialize =
true)
void serialize(Writer &writer, const common::Address &a)
Definition: address.cpp:24
void serializeBool(Writer &writer, const std::string &key, bool value, bool serializeIfFalse=true)
Definition: std.h:128
void deserializeContainer(const rapidjson::Value &val, const std::string &key, ContainerOfDeserializableObjects &objs)
Definition: std.h:63
uint64_t deserializeUint64(const rapidjson::Value &val, const std::string &key, uint64_t defaultValue=0)
Definition: std.cpp:35
void serializeString(Writer &writer, const std::string &key, const std::string &value, bool serializeIfValueEmpty=false)
Definition: std.h:149
void serializeDouble(Writer &writer, const std::string &key, double value)
Definition: std.h:142
void deserialize(const rapidjson::Value &val, common::Address &a)
Definition: address.cpp:30
std::string deserializeString(const rapidjson::Value &val, const std::string &key, const std::string &defaultValue="")
Definition: std.cpp:68
int64_t deserializeInt64(const rapidjson::Value &val, const std::string &key, int64_t defaultValue=0)
Definition: std.cpp:24
void serializeContainer(Writer &writer, const std::string &key, const ContainerOfSerializableObjects &objs, bool serializeIfContainerEmpty=false)
Definition: std.h:171
void serializeUint64(Writer &writer, const std::string &key, uint64_t value, bool doSerialize=true)
Definition: std.h:114
bool deserializeDouble(const rapidjson::Value &val, const std::string &key, double defaultValue=0.0)
Definition: std.cpp:57
void serializeInt64(Writer &writer, const std::string &key, int64_t value, bool doSerialize=true)
Definition: std.h:100
bool deserializeBool(const rapidjson::Value &val, const std::string &key, bool defaultValue=false)
Definition: std.cpp:46
Definition: archive_wrapper.h:19