#pragma once #include #include #include #include #include #include #include namespace mbgl { namespace style { namespace conversion { template using LayoutPropertySetter = std::function (Layer&, const V&)>; template using PaintPropertySetter = std::function (Layer&, const V&, const optional&)>; template auto makePropertySetter(void (L::*setter)(PropertyValue, const Args&...args)) { return [setter] (Layer& layer, const V& value, const Args&...args) -> optional { L* typedLayer = layer.as(); if (!typedLayer) { return Error { "layer doesn't support this property" }; } Result typedValue = convert(value); if (!typedValue) { return typedValue.error(); } (typedLayer->*setter)(*typedValue, args...); return {}; }; } template optional setVisibility(Layer& layer, const V& value) { if (isUndefined(value)) { layer.setVisibility(VisibilityType::Visible); return {}; } Result visibility = convert(value); if (!visibility) { return visibility.error(); } layer.setVisibility(*visibility); return {}; } } // namespace conversion } // namespace style } // namespace mbgl