#include namespace mbgl { namespace style { namespace conversion { optional Converter::operator()(const Convertible& value, Error& error) const { optional converted = toBool(value); if (!converted) { error = { "value must be a boolean" }; return {}; } return *converted; } optional Converter::operator()(const Convertible& value, Error& error) const { optional converted = toNumber(value); if (!converted) { error = { "value must be a number" }; return {}; } return *converted; } optional Converter::operator()(const Convertible& value, Error& error) const { optional converted = toString(value); if (!converted) { error = { "value must be a string" }; return {}; } return *converted; } optional Converter::operator()(const Convertible& value, Error& error) const { optional string = toString(value); if (!string) { error = { "value must be a string" }; return {}; } optional color = Color::parse(*string); if (!color) { error = { "value must be a valid color" }; return {}; } return *color; } optional> Converter>::operator()(const Convertible& value, Error& error) const { if (!isArray(value)) { error = { "value must be an array" }; return {}; } std::vector result; result.reserve(arrayLength(value)); for (std::size_t i = 0; i < arrayLength(value); ++i) { optional number = toNumber(arrayMember(value, i)); if (!number) { error = { "value must be an array of numbers" }; return {}; } result.push_back(*number); } return result; } optional> Converter>::operator()(const Convertible& value, Error& error) const { if (!isArray(value)) { error = { "value must be an array" }; return {}; } std::vector result; result.reserve(arrayLength(value)); for (std::size_t i = 0; i < arrayLength(value); ++i) { optional string = toString(arrayMember(value, i)); if (!string) { error = { "value must be an array of strings" }; return {}; } result.push_back(*string); } return result; } } // namespace conversion } // namespace style } // namespace mbgl