Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/3party
diff options
context:
space:
mode:
authorVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-03-10 15:18:28 +0300
committerSergey Yershov <yershov@corp.mail.ru>2016-03-23 16:52:53 +0300
commit9e24ab84e209693da87049c5e5bb233520340ebe (patch)
treee8bf391ae397a4c3971604470a5523b437d61dcf /3party
parent302e106d36cb80b28d01caf8b7856771d75578cd (diff)
Moving FromJSONObject functions to 3party/jansson/myjansson unit.
Diffstat (limited to '3party')
-rw-r--r--3party/jansson/jansson.pro1
-rw-r--r--3party/jansson/myjansson.cpp40
-rw-r--r--3party/jansson/myjansson.hpp22
3 files changed, 63 insertions, 0 deletions
diff --git a/3party/jansson/jansson.pro b/3party/jansson/jansson.pro
index 09b8a6dfcd..c7f5608f6c 100644
--- a/3party/jansson/jansson.pro
+++ b/3party/jansson/jansson.pro
@@ -19,6 +19,7 @@ SOURCES += \
src/error.c \
src/strconv.c \
jansson_handle.cpp \
+ myjansson.cpp \
HEADERS += \
myjansson.hpp \
diff --git a/3party/jansson/myjansson.cpp b/3party/jansson/myjansson.cpp
new file mode 100644
index 0000000000..c91c9ea420
--- /dev/null
+++ b/3party/jansson/myjansson.cpp
@@ -0,0 +1,40 @@
+#include "3party/jansson/myjansson.hpp"
+
+namespace my
+{
+void FromJSON(json_t * root, string & result)
+{
+ result = string(json_string_value(root));
+}
+
+void FromJSONObject(json_t * root, string const & field, string & result)
+{
+ if (!json_is_object(root))
+ MYTHROW(my::Json::Exception, ("Bad json object when parsing", field));
+ json_t * val = json_object_get(root, field.c_str());
+ if (!val)
+ MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent."));
+ if (!json_is_string(val))
+ MYTHROW(my::Json::Exception, ("The field", field, "must contain a json string."));
+ result = string(json_string_value(val));
+}
+
+void FromJSONObject(json_t * root, string const & field, strings::UniString & result)
+{
+ string s;
+ FromJSONObject(root, field, s);
+ result = strings::MakeUniString(s);
+}
+
+void FromJSONObject(json_t * root, string const & field, double & result)
+{
+ if (!json_is_object(root))
+ MYTHROW(my::Json::Exception, ("Bad json object when parsing", field));
+ json_t * val = json_object_get(root, field.c_str());
+ if (!val)
+ MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent."));
+ if (!json_is_number(val))
+ MYTHROW(my::Json::Exception, ("The field", field, "must contain a json number."));
+ result = json_number_value(val);
+}
+} // namespace my
diff --git a/3party/jansson/myjansson.hpp b/3party/jansson/myjansson.hpp
index cb8fc07770..3c918b8ecf 100644
--- a/3party/jansson/myjansson.hpp
+++ b/3party/jansson/myjansson.hpp
@@ -3,9 +3,12 @@
#include "jansson_handle.hpp"
#include "base/exception.hpp"
+#include "base/string_utils.hpp"
#include <jansson.h>
+#include "std/vector.hpp"
+
namespace my
{
class Json
@@ -25,4 +28,23 @@ public:
json_t * get() const { return m_handle.get(); }
};
+
+void FromJSON(json_t * root, string & result);
+void FromJSONObject(json_t * root, string const & field, string & result);
+void FromJSONObject(json_t * root, string const & field, strings::UniString & result);
+void FromJSONObject(json_t * root, string const & field, double & result);
+
+template <typename T>
+void FromJSONObject(json_t * root, string const & field, vector<T> & result)
+{
+ json_t * arr = json_object_get(root, field.c_str());
+ if (!arr)
+ MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent."));
+ if (!json_is_array(arr))
+ MYTHROW(my::Json::Exception, ("The field", field, "must contain a json array."));
+ size_t sz = json_array_size(arr);
+ result.resize(sz);
+ for (size_t i = 0; i < sz; ++i)
+ FromJSON(json_array_get(arr, i), result[i]);
+}
} // namespace my