Chatterino
RapidjsonHelpers.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 
5 #include <rapidjson/document.h>
6 #include <pajlada/serialize.hpp>
7 
8 #include <cassert>
9 #include <string>
10 
11 namespace chatterino {
12 namespace rj {
13 
14  void addMember(rapidjson::Value &obj, const char *key,
15  rapidjson::Value &&value,
16  rapidjson::Document::AllocatorType &a);
17  void addMember(rapidjson::Value &obj, const char *key,
18  rapidjson::Value &value,
19  rapidjson::Document::AllocatorType &a);
20 
21  template <typename Type>
22  void set(rapidjson::Value &obj, const char *key, const Type &value,
23  rapidjson::Document::AllocatorType &a)
24  {
25  assert(obj.IsObject());
26 
27  addMember(obj, key, pajlada::Serialize<Type>::get(value, a), a);
28  }
29 
30  template <>
31  inline void set(rapidjson::Value &obj, const char *key,
32  const rapidjson::Value &value,
33  rapidjson::Document::AllocatorType &a)
34  {
35  assert(obj.IsObject());
36 
37  addMember(obj, key, const_cast<rapidjson::Value &>(value), a);
38  }
39 
40  template <typename Type>
41  void set(rapidjson::Document &obj, const char *key, const Type &value)
42  {
43  assert(obj.IsObject());
44 
45  auto &a = obj.GetAllocator();
46 
47  addMember(obj, key, pajlada::Serialize<Type>::get(value, a), a);
48  }
49 
50  template <>
51  inline void set(rapidjson::Document &obj, const char *key,
52  const rapidjson::Value &value)
53  {
54  assert(obj.IsObject());
55 
56  auto &a = obj.GetAllocator();
57 
58  addMember(obj, key, const_cast<rapidjson::Value &>(value), a);
59  }
60 
61  template <typename Type>
62  void add(rapidjson::Value &arr, const Type &value,
63  rapidjson::Document::AllocatorType &a)
64  {
65  assert(arr.IsArray());
66 
67  arr.PushBack(pajlada::Serialize<Type>::get(value, a), a);
68  }
69 
70  bool checkJsonValue(const rapidjson::Value &obj, const char *key);
71 
72  template <typename Type>
73  bool getSafe(const rapidjson::Value &obj, const char *key, Type &out)
74  {
75  if (!checkJsonValue(obj, key))
76  {
77  return false;
78  }
79 
80  bool error = false;
81  out = pajlada::Deserialize<Type>::get(obj[key], &error);
82 
83  return !error;
84  }
85 
86  template <typename Type>
87  bool getSafe(const rapidjson::Value &value, Type &out)
88  {
89  bool error = false;
90  out = pajlada::Deserialize<Type>::get(value, &error);
91 
92  return !error;
93  }
94 
95  bool getSafeObject(rapidjson::Value &obj, const char *key,
96  rapidjson::Value &out);
97 
98  QString stringify(const rapidjson::Value &value);
99 
100 } // namespace rj
101 } // namespace chatterino
bool checkJsonValue(const rapidjson::Value &obj, const char *key)
Definition: RapidjsonHelpers.cpp:43
void add(rapidjson::Value &arr, const Type &value, rapidjson::Document::AllocatorType &a)
Definition: RapidjsonHelpers.hpp:62
Definition: Application.cpp:48
bool getSafeObject(rapidjson::Value &obj, const char *key, rapidjson::Value &out)
Definition: RapidjsonHelpers.cpp:31
void addMember(rapidjson::Value &obj, const char *key, rapidjson::Value &&value, rapidjson::Document::AllocatorType &a)
Definition: RapidjsonHelpers.cpp:8
bool getSafe(const rapidjson::Value &obj, const char *key, Type &out)
Definition: RapidjsonHelpers.hpp:73
QString stringify(const rapidjson::Value &value)
Definition: RapidjsonHelpers.cpp:22