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