summaryrefslogtreecommitdiff
path: root/platform/android/src/gson/json_element.cpp
diff options
context:
space:
mode:
authorTobrun <tobrun@mapbox.com>2018-04-10 11:09:42 +0200
committerGitHub <noreply@github.com>2018-04-10 11:09:42 +0200
commit44ce5ab08792df5f38560016ed3d41712e8025d0 (patch)
tree83ff99ff7b811e4f54165058df01eb101750c33e /platform/android/src/gson/json_element.cpp
parent351ac83c75955c7e44e49a42156ece83b759612b (diff)
downloadqtlocation-mapboxgl-44ce5ab08792df5f38560016ed3d41712e8025d0.tar.gz
Rework expression conversion (#11490)
* [android] - rework expression conversion
Diffstat (limited to 'platform/android/src/gson/json_element.cpp')
-rw-r--r--platform/android/src/gson/json_element.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/platform/android/src/gson/json_element.cpp b/platform/android/src/gson/json_element.cpp
index 060b1e0fe2..5eaaf531f4 100644
--- a/platform/android/src/gson/json_element.cpp
+++ b/platform/android/src/gson/json_element.cpp
@@ -11,6 +11,34 @@ namespace mbgl {
namespace android {
namespace gson {
+/**
+ * Turn mapbox::geometry::value into Java Gson JsonElement
+ */
+class JsonElementEvaluator {
+public:
+
+ jni::JNIEnv& env;
+
+ jni::Object<JsonElement> operator()(const JsonPrimitive::value value) const {
+ return jni::Cast(env, JsonPrimitive::New(env, value), JsonElement::javaClass);
+ }
+
+ jni::Object<JsonElement> operator()(const std::vector<mapbox::geometry::value> &values) const {
+ return jni::Cast(env, JsonArray::New(env, values), JsonElement::javaClass);
+ }
+
+ jni::Object<JsonElement> operator()(const std::unordered_map<std::string, mapbox::geometry::value> &values) const {
+ return jni::Cast(env, JsonObject::New(env, values), JsonElement::javaClass);
+ }
+
+};
+
+
+jni::Object<JsonElement> JsonElement::New(jni::JNIEnv& env, const mapbox::geometry::value& value) {
+ JsonElementEvaluator evaluator { env } ;
+ return mapbox::geometry::value::visit(value, evaluator);
+}
+
mapbox::geometry::value JsonElement::convert(jni::JNIEnv &env, jni::Object<JsonElement> jsonElement) {
mapbox::geometry::value value;