diff options
author | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2018-06-29 12:56:44 -0700 |
---|---|---|
committer | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2018-07-23 09:12:26 -0700 |
commit | 1d8664a2ae3822ba4d45973640c0068c65a237e7 (patch) | |
tree | 62160340b72f987ac340c5807552a7033e9269ac /src/mbgl/style/conversion | |
parent | bfe714eebe1fd5a8563db92e46220775aa82e3e0 (diff) | |
download | qtlocation-mapboxgl-1d8664a2ae3822ba4d45973640c0068c65a237e7.tar.gz |
Keep original input for filters using legacy syntax.
Diffstat (limited to 'src/mbgl/style/conversion')
-rw-r--r-- | src/mbgl/style/conversion/filter.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/mbgl/style/conversion/filter.cpp b/src/mbgl/style/conversion/filter.cpp index cd588345ef..b690c96388 100644 --- a/src/mbgl/style/conversion/filter.cpp +++ b/src/mbgl/style/conversion/filter.cpp @@ -14,6 +14,7 @@ using namespace mbgl::style::expression; static bool isExpression(const Convertible& filter); ParseResult convertLegacyFilter(const Convertible& values, Error& error); +optional<mbgl::Value> serializeLegacyFilter(const Convertible& values); optional<Filter> Converter<Filter>::operator()(const Convertible& value, Error& error) const { if (isExpression(value)) { @@ -31,7 +32,7 @@ optional<Filter> Converter<Filter>::operator()(const Convertible& value, Error& assert(error.message.size() > 0); return {}; } - return Filter(optional<std::unique_ptr<Expression>>(std::move(*expression))); + return Filter(optional<std::unique_ptr<Expression>>(std::move(*expression)), serializeLegacyFilter(value)); } } @@ -218,6 +219,24 @@ ParseResult convertLegacyFilter(const Convertible& values, Error& error) { } } +optional<mbgl::Value> serializeLegacyFilter(const Convertible& values) { + if (isUndefined(values)) { + return {}; + } else if (isArray(values)) { + std::vector<mbgl::Value> result; + for (std::size_t i = 0; i < arrayLength(values); i++) { + auto arrayValue = serializeLegacyFilter(arrayMember(values, i)); + if (arrayValue) { + result.push_back(*arrayValue); + } else { + result.push_back(NullValue()); + } + } + return (mbgl::Value)result; + } + return toValue(values); +} + } // namespace conversion } // namespace style } // namespace mbgl |