#pragma once #include #include #include #include #include namespace mbgl { namespace style { namespace conversion { optional> convertFunctionToExpression(expression::type::Type, const Convertible&, Error&); template optional> convertFunctionToExpression(const Convertible& value, Error& error) { auto expression = convertFunctionToExpression(expression::valueTypeToExpressionType(), value, error); if (!expression) { return {}; } optional defaultValue; auto defaultValueValue = objectMember(value, "default"); if (defaultValueValue) { defaultValue = convert(*defaultValueValue, error); if (!defaultValue) { error = { R"(wrong type for "default": )" + error.message }; return {}; } } return PropertyExpression(std::move(*expression), defaultValue); } } // namespace conversion } // namespace style } // namespace mbgl