summaryrefslogtreecommitdiff
path: root/platform/android/src/style/conversion/url_or_tileset.hpp
blob: 92c1182a63b6dc75c505d5be4bf762afa44f2258 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#pragma once

#include <mbgl/util/optional.hpp>
#include <mbgl/util/variant.hpp>

#include <mbgl/util/tileset.hpp>
#include <mbgl/style/conversion.hpp>
#include <mbgl/style/conversion/tileset.hpp>

#include <jni/jni.hpp>

#include <string>

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.
inline 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) };
    }
}

}
}