summaryrefslogtreecommitdiff
path: root/src/mbgl/style/conversion/filter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/conversion/filter.cpp')
-rw-r--r--src/mbgl/style/conversion/filter.cpp21
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