1 #pragma once 2 3 #include <mbgl/style/conversion.hpp> 4 #include <mbgl/style/sources/custom_geometry_source.hpp> 5 6 namespace mbgl { 7 namespace style { 8 namespace conversion { 9 10 template <> 11 struct Converter<CustomGeometrySource::Options> { 12 13 template <class V> operator ()mbgl::style::conversion::Converter14 optional<CustomGeometrySource::Options> operator()(const V& value, Error& error) const { 15 CustomGeometrySource::Options options; 16 17 const auto minzoomValue = objectMember(value, "minzoom"); 18 if (minzoomValue) { 19 if (toNumber(*minzoomValue)) { 20 options.zoomRange.min = static_cast<uint8_t>(*toNumber(*minzoomValue)); 21 } else { 22 error = { "GeoJSON source minzoom value must be a number" }; 23 return {}; 24 } 25 } 26 27 const auto maxzoomValue = objectMember(value, "maxzoom"); 28 if (maxzoomValue) { 29 if (toNumber(*maxzoomValue)) { 30 options.zoomRange.max = static_cast<uint8_t>(*toNumber(*maxzoomValue)); 31 } else { 32 error = { "GeoJSON source maxzoom value must be a number" }; 33 return {}; 34 } 35 } 36 37 const auto bufferValue = objectMember(value, "buffer"); 38 if (bufferValue) { 39 if (toNumber(*bufferValue)) { 40 options.tileOptions.buffer = static_cast<uint16_t>(*toNumber(*bufferValue)); 41 } else { 42 error = { "GeoJSON source buffer value must be a number" }; 43 return {}; 44 } 45 } 46 47 const auto toleranceValue = objectMember(value, "tolerance"); 48 if (toleranceValue) { 49 if (toNumber(*toleranceValue)) { 50 options.tileOptions.tolerance = static_cast<double>(*toNumber(*toleranceValue)); 51 } else { 52 error = { "GeoJSON source tolerance value must be a number" }; 53 return {}; 54 } 55 } 56 57 const auto wrapValue = objectMember(value, "wrap"); 58 if (wrapValue) { 59 if (toBool(*wrapValue)) { 60 options.tileOptions.wrap = static_cast<bool>(*toBool(*wrapValue)); 61 } else { 62 error = { "CustomGeometrySource TileOptions wrap value must be a boolean" }; 63 return {}; 64 } 65 } 66 67 const auto clipValue = objectMember(value, "clip"); 68 if (clipValue) { 69 if (toBool(*clipValue)) { 70 options.tileOptions.clip = static_cast<double>(*toBool(*clipValue)); 71 } else { 72 error = { "CustomGeometrySource TileOptiosn clip value must be a boolean" }; 73 return {}; 74 } 75 } 76 77 return { options }; 78 } 79 80 }; 81 82 } // namespace conversion 83 } // namespace style 84 } // namespace mbgl 85