summaryrefslogtreecommitdiff
path: root/platform/android/src/style/conversion/url_or_tileset.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/style/conversion/url_or_tileset.cpp')
-rw-r--r--platform/android/src/style/conversion/url_or_tileset.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/platform/android/src/style/conversion/url_or_tileset.cpp b/platform/android/src/style/conversion/url_or_tileset.cpp
new file mode 100644
index 0000000000..2ec5856751
--- /dev/null
+++ b/platform/android/src/style/conversion/url_or_tileset.cpp
@@ -0,0 +1,30 @@
+#include "url_or_tileset.hpp"
+#include "../android_conversion.hpp"
+
+#include <mbgl/style/conversion.hpp>
+#include <mbgl/style/conversion/tileset.hpp>
+
+namespace mbgl {
+namespace android {
+
+// This conversion is expected not to fail because it's used only in contexts where
+// the value was originally a String or TileSet object on the Java side. If it fails
+// to convert, it's a bug in our serialization or Java-side static typing.
+variant<std::string, Tileset> convertURLOrTileset(mbgl::android::Value&& value) {
+ using namespace mbgl::style::conversion;
+
+ const Convertible convertible(std::move(value));
+ if (isObject(convertible)) {
+ Error error;
+ optional<Tileset> tileset = convert<Tileset>(convertible, error);
+ if (!tileset) {
+ throw std::logic_error(error.message);
+ }
+ return { *tileset };
+ } else {
+ return { *toString(convertible) };
+ }
+}
+
+}
+}