25 #ifndef CARGO_JSON_FROM_JSON_VISITOR_HPP
26 #define CARGO_JSON_FROM_JSON_VISITOR_HPP
48 mObject = json_tokener_parse(jsonString.c_str());
67 void visit(
const std::string& name, T& value)
69 json_object*
object =
nullptr;
70 if (!json_object_object_get_ex(
mObject, name.c_str(), &object)) {
81 :
mObject(json_object_get(object))
85 static void checkType(json_object*
object, json_type type)
87 if (type != json_object_get_type(
object)) {
92 template<typename T, typename std::enable_if<std::is_integral<T>::value,
int>::type = 0>
96 typedef typename std::conditional<std::is_signed<T>::value,
97 std::int64_t, std::uint64_t>::type BufferType;
98 BufferType value64 = json_object_get_int64(
object);
99 if (value64 > std::numeric_limits<T>::max() || value64 < std::numeric_limits<T>::min()) {
102 value =
static_cast<T
>(value64);
108 value = json_object_get_boolean(
object);
114 value = json_object_get_double(
object);
120 value = json_object_get_string(
object);
127 int len = json_object_get_string_len(
object);
128 value =
new char[len + 1];
129 std::strncpy(value, json_object_get_string(
object), len);
137 int length = json_object_array_length(
object);
138 values.resize(static_cast<size_t>(length));
139 for (
int i = 0; i < length; ++i) {
140 fromJsonObject(json_object_array_get_idx(
object, i), values[static_cast<size_t>(i)]);
144 template<
typename T, std::
size_t N>
149 for (std::size_t i = 0; i < N; ++i) {
155 static void fromJsonObject(json_object*
object, std::map<std::string, V>& values)
159 json_object_object_foreach(
object,
key, val) {
167 static void visit(json_object*
object, std::size_t& idx, T&& value)
174 template<typename T, typename std::enable_if<isLikeTuple<T>::value,
int>::type = 0>
184 template<typename T, typename std::enable_if<std::is_enum<T>::value,
int>::type = 0>
188 *
reinterpret_cast<typename std::underlying_type<T>::type*
>(&value));
191 template<typename T, typename std::enable_if<isVisitable<T>::value,
int>::type = 0>
196 value.accept(visitor);
202 #endif // CARGO_JSON_FROM_JSON_VISITOR_HPP
Definition: from-json-visitor.hpp:43
Internal configuration helper.
static void fromJsonObject(json_object *object, std::string &value)
Definition: from-json-visitor.hpp:117
static void checkType(json_object *object, json_type type)
Definition: from-json-visitor.hpp:85
FromJsonVisitor(const FromJsonVisitor &visitor)
Definition: from-json-visitor.hpp:54
FromJsonVisitor(json_object *object)
Definition: from-json-visitor.hpp:80
static void fromJsonObject(json_object *object, char *&value)
Definition: from-json-visitor.hpp:123
Helper function for iterating tuples, pairs and arrays.
json_object * mObject
Definition: from-json-visitor.hpp:77
~FromJsonVisitor()
Definition: from-json-visitor.hpp:59
static void fromJsonObject(json_object *object, bool &value)
Definition: from-json-visitor.hpp:105
static void fromJsonObject(json_object *object, std::array< T, N > &values)
Definition: from-json-visitor.hpp:145
static void fromJsonObject(json_object *object, T &value)
Definition: from-json-visitor.hpp:93
std::string key(const Arg1 &a1, const Args &...args)
Concatenates all parameters into one std::string.
Definition: kvstore-visitor-utils.hpp:60
FromJsonVisitor & operator=(const FromJsonVisitor &)=delete
Definition: from-json-visitor.hpp:164
static void fromJsonObject(json_object *object, std::map< std::string, V > &values)
Definition: from-json-visitor.hpp:155
void visit(const std::string &name, T &value)
Definition: from-json-visitor.hpp:67
Base class for exceptions in libcargo.
Definition: exception.hpp:35
static void visit(json_object *object, std::size_t &idx, T &&value)
Definition: from-json-visitor.hpp:167
static void fromJsonObject(json_object *object, std::vector< T > &values)
Definition: from-json-visitor.hpp:134
FromJsonVisitor(const std::string &jsonString)
Definition: from-json-visitor.hpp:45
static void fromJsonObject(json_object *object, double &value)
Definition: from-json-visitor.hpp:111
static void fromJsonObject(json_object *object, T &values)
Definition: from-json-visitor.hpp:175
void visitFields(T &t, F f, A...args)
Definition: visit-fields.hpp:58