annotate C++/Json.h @ 297:836903141476

Socket: provide experimental SSL support
author David Demelier <markand@malikania.fr>
date Sat, 15 Nov 2014 12:41:52 +0100
parents 777bc3cb665a
children ed3cc10761e4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
244
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * Json.h -- jansson C++11 wrapper
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef _JSON_H_
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define _JSON_H_
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <initializer_list>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <memory>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <stdexcept>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <string>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <utility>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <vector>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <unordered_map>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <jansson.h>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 * @file Json.h
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 * @brief A jansson C++ modern wrapper
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 * @class Json
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 * @brief Json value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 * This class contains one or more json values.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 class Json final {
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 public:
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 using Handle = std::unique_ptr<json_t, void (*)(json_t *)>;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 using Array = std::vector<Json>;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 using Map = std::unordered_map<std::string, Json>;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 * @class Error
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 * @brief Json error
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 class Error : public std::exception {
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 private:
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 friend class Json;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 std::string m_text;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 std::string m_source;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 int m_line;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 int m_column;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 unsigned m_position;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
62
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 Error(const json_error_t error)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 : m_text(error.text)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 , m_source(error.source)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 , m_line(error.line)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 , m_column(error.column)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 , m_position(error.position)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 {
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 }
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 public:
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 const char *what() const noexcept override
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 {
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 return m_text.c_str();
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 }
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 };
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
78
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 private:
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 Handle m_handle;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 Array m_list;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 Map m_map;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
83
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 Json(Handle &&handle)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 : m_handle(std::move(handle))
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 {
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 }
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
88
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 template <typename Func, typename... Args>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 static Json from(Func func, Args&&... args)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 {
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 json_error_t error;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 json_t *value = func(std::forward<Args>(args)..., &error);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
94
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 if (!value)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 throw Error(error);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
97
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 return Json(Handle(value, json_decref));
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 }
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 public:
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 * Load data from a string.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 * @param data the data
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 * @param flags the optional flags
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 * @return the json value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 * @throw Error on failures
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 static Json fromString(const std::string &data, int flags = 0);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
111
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 * Load data from a file.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 * @param path the path
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 * @param flags the optional flags
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 * @return the json value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 * @throw Error on failures
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 static Json fromFile(const std::string &path, int flags = 0);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
121
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 * Create a json value of type JSON_OBJECT.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 explicit Json();
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
126
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 * Create a JSON_NULL object.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 * @param n the null value (nullptr)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 explicit Json(std::nullptr_t n);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
133
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 * Create a boolean object.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 * @param value the boolean value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 explicit Json(bool value);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
140
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 * Create a JSON_INTEGER object.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 * @param value the value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 explicit Json(int value);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
147
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 * Create a JSON_REAL object.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 * @param value the value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 explicit Json(double value);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
154
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 * Create a JSON_STRING object.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 * @param value the value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 explicit Json(const std::string &value);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
161
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 * Create a JSON_ARRAY object.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 * @param list the list of children
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 explicit Json(std::initializer_list<Json> list);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
168
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 * Create a JSON_STRING object.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 * @param str the string
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 template <size_t N>
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 explicit Json(const char str[N])
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 : m_handle(json_string(str), json_decref)
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 {
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 }
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
179
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 * Copy the object, this does a deep copy.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 * @param json the other value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 Json(const Json &json);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
186
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 * Copy the object, this does a deep copy.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 * @param json the other value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 * @return *this
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 Json &operator=(const Json &json);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
194
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 * Move the object.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 * @param json the other value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 Json(Json &&);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
201
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 * Move the object.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 * @param json the other value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 * @return *this
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 Json &operator=(Json &&);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
209
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 * Get the type of value.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 * @return the type
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 int typeOf() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
216
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 * Tells if the json value is an JSON_OBJECT.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 bool isObject() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
223
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 * Tells if the json value is an JSON_ARRAY.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 bool isArray() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
230
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 * Tells if the json value is an JSON_STRING.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 bool isString() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
237
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 * Tells if the json value is an JSON_REAL.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 bool isReal() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
244
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 * Tells if the json value is an JSON_TRUE.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 bool isTrue() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
251
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 * Tells if the json value is an JSON_FALSE.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 bool isFalse() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
258
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 * Tells if the json value is an JSON_NULL.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
261 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 bool isNull() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
265
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 * Tells if the json value is an JSON_INTEGER or JSON_REAL.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 bool isNumber() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
272
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 * Tells if the json value is an JSON_INTEGER.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 bool isInteger() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
279
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 * Tells if the json value is an JSON_TRUE or JSON_FALSE.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 * @return true or false
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 bool isBoolean() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
286
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
288 * Get the number of values in the array
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
290 * @return the number or 0
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 unsigned size() const noexcept;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
293
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 * Insert a copy of the value at the end.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 * @param value the value to insert
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 void append(const Json &value);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
300
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 * Move the value at the end.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 * @param value the value to insert
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 void append(Json &&value);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
307
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 * Insert a copy of the value at the specified index.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 * @param value the value to insert
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 * @param index the position
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 void insert(const Json &value, int index);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
315
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
316 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 * Move the value at the specified index.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
319 * @param value the value to insert
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
320 * @param index the position
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
321 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
322 void insert(Json &&value, int index);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
323
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
324 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 * Set a copy of value to the key 'name'.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
326 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 * @param value the value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 * @param name the key name.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
329 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
330 void set(const Json &value, const std::string &name);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
331
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
333 * Move value to the key 'name'.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
334 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 * @param value the value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
336 * @param name the key name.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
337 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 void set(Json &&value, const std::string &name);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
339
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
340 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 * Get the string value.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
343 * @return the string
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
345 std::string toString() const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
346
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
348 * Get the integer value.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
349 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
350 * @return the value or 0
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
352 int toInteger() const noexcept;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
353
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
355 * Get the real value.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
356 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
357 * @return the value or 0
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
358 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
359 double toReal() const noexcept;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
360
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
361 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
362 * Dump the value as a string.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
363 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
364 * @param flags the optional flags
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
365 * @return the string
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
366 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
367 std::string dump(int flags = 0);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
368
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
369 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
370 * Dump the value to a path.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
371 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
372 * @param path the path
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
373 * @param flags the optional flags
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
374 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
375 void dump(const std::string &path, int flags = 0);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
376
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
377 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
378 * Get the value at the specified index.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
379 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
380 * @param index the position
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
381 * @return the reference to the value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
382 * @throw std::invalid_argument on error
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
383 * @throw std::out_of_range on bad arguments
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
384 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
385 Json &operator[](int index);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
386
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
387 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
388 * Get the value at the specified index.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
389 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
390 * @param index the position
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
391 * @return the reference to the value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
392 * @throw std::invalid_argument on error
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
393 * @throw std::out_of_range on bad arguments
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
394 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
395 const Json &operator[](int index) const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
396
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
397 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
398 * Get the value at the specified key.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
399 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
400 * @param name the key
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
401 * @return the reference to the value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
402 * @throw std::invalid_argument on error
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
403 * @throw std::out_of_range on bad arguments
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
404 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
405 Json &operator[](const std::string &name);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
406
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
407 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
408 * Get the value at the specified key.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
409 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
410 * @param name the key
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
411 * @return the reference to the value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
412 * @throw std::invalid_argument on error
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
413 * @throw std::out_of_range on bad arguments
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
414 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
415 const Json &operator[](const std::string &name) const;
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
416
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
417 /**
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
418 * Compare the values.
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
419 *
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
420 * @param j1 the first value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
421 * @param j2 the second value
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
422 */
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
423 friend bool operator==(const Json &j1, const Json &j2);
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
424 };
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
425
777bc3cb665a Add Json, a jansson wrapper
David Demelier <markand@malikania.fr>
parents:
diff changeset
426 #endif // !_JSON_H_