23 #include <rapidjson/document.h>
29 namespace json_utils {
36 const std::string&
name,
37 rapidjson::Document::AllocatorType& allocator);
41 const std::string&
name);
44 const rapidjson::Value&
object,
45 const std::string&
name);
49 void set_value(rapidjson::Value& json_val,
51 rapidjson::Document::AllocatorType& allocator);
52 void get_value(
const rapidjson::Value& json_val,
size_t& value);
54 void set_value(rapidjson::Value& json_val,
56 rapidjson::Document::AllocatorType& allocator);
57 void get_value(
const rapidjson::Value& json_val,
int& value);
59 void set_value(rapidjson::Value& json_val,
60 const std::string& value,
61 rapidjson::Document::AllocatorType& allocator);
62 void get_value(
const rapidjson::Value& json_val, std::string& value);
65 void set_value(rapidjson::Value& json_val,
67 rapidjson::Document::AllocatorType& allocator);
69 void get_value(
const rapidjson::Value& json_val, int64_t& value);
72 void set_value(rapidjson::Value& json_val,
74 rapidjson::Document::AllocatorType& allocator);
76 void get_value(
const rapidjson::Value& json_val,
bool& value);
79 void set_value(rapidjson::Value& json_val,
81 rapidjson::Document::AllocatorType& allocator);
86 void set_value(rapidjson::Value& json_val,
88 rapidjson::Document::AllocatorType& allocator);
93 void set_value(rapidjson::Value& json_val,
95 rapidjson::Document::AllocatorType& allocator);
100 void set_value(rapidjson::Value& json_val,
102 rapidjson::Document::AllocatorType& allocator);
104 template <
typename T,
typename MemberFunc>
108 const std::string& key) {
110 auto setter = std::bind(mem_fn, &type_info, std::placeholders::_1);
120 const std::vector<T>& vector_value,
121 rapidjson::Document::AllocatorType& allocator) {
123 for (
const auto& value : vector_value) {
124 rapidjson::Value json_obj;
126 json_val.PushBack(json_obj, allocator);
131 void get_value(
const rapidjson::Value& json_val, std::vector<T>& vector_value) {
132 CHECK(json_val.IsArray());
133 CHECK_EQ(vector_value.size(), size_t(0));
134 for (
const auto& json_obj : json_val.GetArray()) {
137 vector_value.push_back(val);
144 const std::list<T>& list_value,
145 rapidjson::Document::AllocatorType& allocator) {
147 for (
const auto& value : list_value) {
148 rapidjson::Value json_obj;
150 json_val.PushBack(json_obj, allocator);
155 void get_value(
const rapidjson::Value& json_val, std::list<T>& list_value) {
156 CHECK(json_val.IsArray());
157 CHECK_EQ(list_value.size(), size_t(0));
158 for (
const auto& json_obj : json_val.GetArray()) {
161 list_value.push_back(val);
166 template <
class T,
class V>
168 const std::vector<std::pair<T, V>>& vector_value,
169 rapidjson::Document::AllocatorType& allocator) {
171 for (
const auto& pair : vector_value) {
172 rapidjson::Value pair_obj;
173 pair_obj.SetObject();
176 json_val.PushBack(pair_obj, allocator);
180 template <
class T,
class V>
182 std::vector<std::pair<T, V>>& vector_value) {
183 CHECK(json_val.IsArray());
184 CHECK_EQ(vector_value.size(), size_t(0));
185 for (
const auto& json_obj : json_val.GetArray()) {
186 CHECK(json_obj.IsObject());
191 vector_value.emplace_back(std::make_pair(key, value));
196 template <
class T,
class V>
198 const std::list<std::pair<T, V>>& list_value,
199 rapidjson::Document::AllocatorType& allocator) {
201 for (
const auto& pair : list_value) {
202 rapidjson::Value pair_obj;
203 pair_obj.SetObject();
206 json_val.PushBack(pair_obj, allocator);
210 template <
class T,
class V>
211 void get_value(
const rapidjson::Value& json_val, std::list<std::pair<T, V>>& list_value) {
212 CHECK(json_val.IsArray());
213 CHECK_EQ(list_value.size(), size_t(0));
214 for (
const auto& json_obj : json_val.GetArray()) {
215 CHECK(json_obj.IsObject());
220 list_value.emplace_back(std::make_pair(key, value));
225 template <
class T,
class V>
227 const std::map<T, V>& map_value,
228 rapidjson::Document::AllocatorType& allocator) {
230 for (
const auto& pair : map_value) {
231 rapidjson::Value pair_obj;
232 pair_obj.SetObject();
235 json_val.PushBack(pair_obj, allocator);
239 template <
class T,
class V>
240 void get_value(
const rapidjson::Value& json_val, std::map<T, V>& map_value) {
241 CHECK(json_val.IsArray());
242 CHECK_EQ(map_value.size(), size_t(0));
243 for (
const auto& json_obj : json_val.GetArray()) {
244 CHECK(json_obj.IsObject());
249 map_value[key] = value;
257 const std::string&
name,
258 rapidjson::Document::AllocatorType& allocator) {
259 CHECK(
object.IsObject());
260 CHECK(!
object.HasMember(name)) <<
"Found unexpected member: " <<
name;
261 rapidjson::Value json_val;
263 rapidjson::Value json_name;
264 json_name.SetString(name, allocator);
265 object.AddMember(json_name, json_val, allocator);
272 const std::string&
name) {
273 CHECK(
object.IsObject());
274 CHECK(
object.HasMember(name)) <<
"Could not find member: " <<
name;
282 void write_to_file(
const rapidjson::Document& document,
const std::string& file_path);
void set_value(rapidjson::Value &json_val, const ColumnDescriptor &column_desc, rapidjson::Document::AllocatorType &allocator)
void write_to_file(const rapidjson::Document &document, const std::string &filepath)
void get_value_from_object(const rapidjson::Value &object, T &value, const std::string &name)
Constants for Builtin SQL Types supported by HEAVY.AI.
rapidjson::Document read_from_file(const std::string &file_path)
std::optional< std::string > get_optional_string_value_from_object(const rapidjson::Value &object, const std::string &key)
std::string write_to_string(const rapidjson::Document &document)
std::string get_type_as_string(const rapidjson::Value &object)
void get_value(const rapidjson::Value &json_val, ColumnDescriptor &column_desc)
void add_value_to_object(rapidjson::Value &object, const T &value, const std::string &name, rapidjson::Document::AllocatorType &allocator)