25 #ifndef CARGO_JSON_TO_JSON_VISITOR_HPP
26 #define CARGO_JSON_TO_JSON_VISITOR_HPP
47 :
mObject(json_object_new_object())
65 return json_object_to_json_string(
mObject);
69 void visit(
const std::string& name,
const T& value)
84 template<typename T, typename std::enable_if<std::is_integral<T>::value,
int>::type = 0>
92 return json_object_new_int64(value);
97 if (value > INT64_MAX) {
100 return json_object_new_int64(value);
105 return json_object_new_boolean(value);
110 #if JSON_C_MINOR_VERSION >= 12
111 return json_object_new_double_s(value, std::to_string(value).c_str());
113 return json_object_new_double(value);
119 return json_object_new_string(value.c_str());
124 return json_object_new_string(value);
130 json_object* array = json_object_new_array();
131 for (
const T& v : value) {
137 template<
typename T, std::
size_t N>
140 json_object* array = json_object_new_array();
141 for (
const T& v : values) {
148 static json_object*
toJsonObject(
const std::map<std::string, V>& values)
150 json_object* newMap = json_object_new_object();
151 for (
const auto& item : values) {
152 json_object_object_add(newMap, item.first.c_str(),
toJsonObject(item.second));
160 static void visit(json_object* array,
const T& value)
166 template<typename T, typename std::enable_if<isLikeTuple<T>::value,
int>::type = 0>
169 json_object* array = json_object_new_array();
176 template<typename T, typename std::enable_if<isVisitable<T>::value,
int>::type = 0>
180 value.accept(visitor);
184 template<typename T, typename std::enable_if<std::is_enum<T>::value,
int>::type = 0>
187 return toJsonObject(
static_cast<const typename std::underlying_type<T>::type
>(value));
194 #endif // CARGO_JSON_TO_JSON_VISITOR_HPP
static json_object * toJsonObject(const std::map< std::string, V > &values)
Definition: to-json-visitor.hpp:148
Internal configuration helper.
static json_object * toJsonObject(const std::array< T, N > &values)
Definition: to-json-visitor.hpp:138
void visit(const std::string &name, const T &value)
Definition: to-json-visitor.hpp:69
Helper function for iterating tuples, pairs and arrays.
ToJsonVisitor(const ToJsonVisitor &visitor)
Definition: to-json-visitor.hpp:51
json_object * mObject
Definition: to-json-visitor.hpp:74
Definition: to-json-visitor.hpp:157
static void visit(json_object *array, const T &value)
Definition: to-json-visitor.hpp:160
static json_object * toJsonObject(T value)
Definition: to-json-visitor.hpp:85
ToJsonVisitor()
Definition: to-json-visitor.hpp:46
ToJsonVisitor & operator=(const ToJsonVisitor &)=delete
static json_object * toJsonObject(const T &values)
Definition: to-json-visitor.hpp:167
static json_object * toJsonObject(char *value)
Definition: to-json-visitor.hpp:122
json_object * detach()
Definition: to-json-visitor.hpp:77
Base class for exceptions in libcargo.
Definition: exception.hpp:35
static json_object * toJsonObject(const std::string &value)
Definition: to-json-visitor.hpp:117
static json_object * toJsonObject(std::uint64_t value)
Definition: to-json-visitor.hpp:95
static json_object * toJsonObject(const std::vector< T > &value)
Definition: to-json-visitor.hpp:128
static json_object * toJsonObject(const T &value)
Definition: to-json-visitor.hpp:177
std::string toString() const
Definition: to-json-visitor.hpp:63
static json_object * toJsonObject(std::int64_t value)
Definition: to-json-visitor.hpp:90
static json_object * toJsonObject(double value)
Definition: to-json-visitor.hpp:108
~ToJsonVisitor()
Definition: to-json-visitor.hpp:56
static json_object * toJsonObject(bool value)
Definition: to-json-visitor.hpp:103
void visitFields(T &t, F f, A...args)
Definition: visit-fields.hpp:58
Definition: to-json-visitor.hpp:43