#pragma once #include #include #include #include namespace mbgl { namespace style { namespace conversion { template struct Converter> { template Result> operator()(const V& value) const { if (isUndefined(value)) { return {}; } else if (!isObject(value)) { Result constant = convert(value); if (!constant) { return constant.error(); } return DataDrivenPropertyValue(*constant); } else if (!objectMember(value, "property")) { Result> function = convert>(value); if (!function) { return function.error(); } return DataDrivenPropertyValue(*function); } else { Result> composite = convert>(value); if (composite) { return DataDrivenPropertyValue(*composite); } Result> source = convert>(value); if (!source) { return source.error(); } return DataDrivenPropertyValue(*source); } } }; } // namespace conversion } // namespace style } // namespace mbgl