inline void serialize(json_config_iarchive_cast& js, std::vector<T>& vs) { // check errors if (!detail::check_json_type(js, pfi::text::json::json::Array)) { return; } size_t size = js.get_config().size(); std::vector<T> v(size); for (size_t i = 0; i < size; ++i) { json_from_config(js.get_config()[i], v[i], js.errors()); } vs.swap(v); }
inline void serialize(json_config_iarchive_cast& js, jubatus::util::data::serialization::named_value<T>& v) { if (js.get_config().contain(v.name)) { json_from_config(js.get_config()[v.name], v.v, js.errors()); } else { not_found e(js.get_config().path(), v.name); if (js.trace_error()) { js.push_error(e); } else { throw JUBATUS_EXCEPTION(e); } } }
inline void serialize( json_config_iarchive_cast& js, pfi::data::serialization::named_value<pfi::data::optional<T> >& v) { using pfi::text::json::json; if (js.get_config().contain(v.name) && (js.get_config()[v.name].get().type() != json::Null)) { T value = T(); json_from_config(js.get_config()[v.name], value, js.errors()); v.v = value; } else { // optional can be null v.v = pfi::data::optional<T>(); } }
inline void serialize(json_config_iarchive_cast& js, std::map<K, V>& m) { if (!detail::check_json_type(js, pfi::text::json::json::Object)) { return; } std::map<K, V> tmp; typedef config::iterator iter_t; for (iter_t it = js.get_config().begin(), end = js.get_config().end(); it != end; ++it) { V value = V(); json_from_config(it.value(), value, js.errors()); tmp[it.key()] = value; } tmp.swap(m); }