bool ini_on_update(const folly::dynamic& value, std::set<std::string>& p) { INI_ASSERT_ARR(value); for (auto& v : value.values()) { p.insert(v.data()); } return true; }
bool ini_on_update(const Variant& value, std::vector<std::string>& p) { INI_ASSERT_ARR(value); for (ArrayIter iter(value.toArray()); iter; ++iter) { p.push_back(iter.second().toString().toCppString()); } return true; }
bool ini_on_update(const folly::dynamic& value, std::vector<std::string>& p) { INI_ASSERT_ARR(value); for (auto& v : value.values()) { p.push_back(v.data()); } return true; }
bool ini_on_update(const Variant& value, boost::container::flat_set<std::string>& p) { INI_ASSERT_ARR(value); for (ArrayIter iter(value.toArray()); iter; ++iter) { p.insert(iter.second().toString().toCppString()); } return true; }
bool ini_on_update(const folly::dynamic& value, std::map<std::string, std::string>& p) { INI_ASSERT_ARR(value); for (auto& pair : value.items()) { p[pair.first.data()] = pair.second.data(); } return true; }
bool ini_on_update(const Variant& value, hphp_string_imap<std::string>& p) { INI_ASSERT_ARR(value); for (ArrayIter iter(value.toArray()); iter; ++iter) { p[iter.first().toString().toCppString()] = iter.second().toString().toCppString(); } return true; }
bool ini_on_update(const Variant& value, Array& p) { INI_ASSERT_ARR(value); p = value.toArray(); return true; }
bool ini_on_update(const folly::dynamic& value, Array& p) { INI_ASSERT_ARR(value); p = dynamic_to_variant(value).toArray(); return true; }