#pragma once #include #include #include #include #include namespace mbgl { namespace style { namespace conversion { template <> struct Converter { public: template optional operator()(const V& value, Error& error) const { if (!isObject(value)) { error = { "light must be an object" }; return {}; } Light light; const auto anchor = objectMember(value, "anchor"); if (anchor) { optional> convertedAnchor = convert>(*anchor, error); if (convertedAnchor) { light.setAnchor(*convertedAnchor); } else { return {}; } } const auto anchorTransition = objectMember(value, "anchor-transition"); if (anchorTransition) { optional transition = convert(*anchorTransition, error); if (transition) { light.setAnchorTransition(*transition); } else { return {}; } } const auto color = objectMember(value, "color"); if (color) { optional> convertedColor = convert>(*color, error); if (convertedColor) { light.setColor(*convertedColor); } else { return {}; } } const auto colorTransition = objectMember(value, "color-transition"); if (colorTransition) { optional transition = convert(*colorTransition, error); if (transition) { light.setColorTransition(*transition); } else { return {}; } } const auto position = objectMember(value, "position"); if (position) { optional> convertedPosition = convert>(*position, error); if (convertedPosition) { light.setPosition(*convertedPosition); } else { return {}; } } const auto positionTransition = objectMember(value, "position-transition"); if (positionTransition) { optional transition = convert(*positionTransition, error); if (transition) { light.setPositionTransition(*transition); } else { return {}; } } const auto intensity = objectMember(value, "intensity"); if (intensity) { optional> convertedIntensity = convert>(*intensity, error); if (convertedIntensity) { light.setIntensity(*convertedIntensity); } else { return {}; } } const auto intensityTransition = objectMember(value, "intensity-transition"); if (intensityTransition) { optional transition = convert(*intensityTransition, error); if (transition) { light.setIntensityTransition(*transition); } else { return {}; } } return { std::move(light) }; }; }; } // namespace conversion } // namespace style } // namespace mbgl