1 #include <mbgl/style/conversion/geojson_options.hpp>
2 
3 namespace mbgl {
4 namespace style {
5 namespace conversion {
6 
operator ()(const Convertible & value,Error & error) const7 optional<GeoJSONOptions> Converter<GeoJSONOptions>::operator()(const Convertible& value, Error& error) const {
8     GeoJSONOptions options;
9 
10     const auto minzoomValue = objectMember(value, "minzoom");
11     if (minzoomValue) {
12         if (toNumber(*minzoomValue)) {
13             options.minzoom = static_cast<uint8_t>(*toNumber(*minzoomValue));
14         } else {
15             error = { "GeoJSON source minzoom value must be a number" };
16             return {};
17         }
18     }
19 
20     const auto maxzoomValue = objectMember(value, "maxzoom");
21     if (maxzoomValue) {
22         if (toNumber(*maxzoomValue)) {
23             options.maxzoom = static_cast<uint8_t>(*toNumber(*maxzoomValue));
24         } else {
25             error = { "GeoJSON source maxzoom value must be a number" };
26             return {};
27         }
28     }
29 
30     const auto bufferValue = objectMember(value, "buffer");
31     if (bufferValue) {
32         if (toNumber(*bufferValue)) {
33             options.buffer = static_cast<uint16_t>(*toNumber(*bufferValue));
34         } else {
35             error = { "GeoJSON source buffer value must be a number" };
36             return {};
37         }
38     }
39 
40     const auto toleranceValue = objectMember(value, "tolerance");
41     if (toleranceValue) {
42         if (toNumber(*toleranceValue)) {
43             options.tolerance = static_cast<double>(*toNumber(*toleranceValue));
44         } else {
45             error = { "GeoJSON source tolerance value must be a number" };
46             return {};
47         }
48     }
49 
50     const auto clusterValue = objectMember(value, "cluster");
51     if (clusterValue) {
52         if (toBool(*clusterValue)) {
53             options.cluster = *toBool(*clusterValue);
54         } else {
55             error = { "GeoJSON source cluster value must be a boolean" };
56             return {};
57         }
58     }
59 
60     const auto clusterMaxZoomValue = objectMember(value, "clusterMaxZoom");
61     if (clusterMaxZoomValue) {
62         if (toNumber(*clusterMaxZoomValue)) {
63             options.clusterMaxZoom = static_cast<uint8_t>(*toNumber(*clusterMaxZoomValue));
64         } else {
65             error = { "GeoJSON source clusterMaxZoom value must be a number" };
66             return {};
67         }
68     }
69 
70     const auto clusterRadiusValue = objectMember(value, "clusterRadius");
71     if (clusterRadiusValue) {
72         if (toNumber(*clusterRadiusValue)) {
73             options.clusterRadius = static_cast<double>(*toNumber(*clusterRadiusValue));
74         } else {
75             error = { "GeoJSON source clusterRadius value must be a number" };
76             return {};
77         }
78     }
79 
80     return { options };
81 }
82 
83 } // namespace conversion
84 } // namespace style
85 } // namespace mbgl
86