in src/cc/nest_serialize.h [48:69]
std::invoke_result_t<Function, rpcenv::NDArray*> nest_pb_to_nest(
rpcenv::ArrayNest* nest_pb, Function array_to_nest) {
using Nest = std::invoke_result_t<Function, rpcenv::NDArray*>;
if (nest_pb->has_array()) {
return array_to_nest(nest_pb->mutable_array());
}
if (nest_pb->vector_size() > 0) {
std::vector<Nest> v;
for (int i = 0, length = nest_pb->vector_size(); i < length; ++i) {
v.push_back(nest_pb_to_nest(nest_pb->mutable_vector(i), array_to_nest));
}
return Nest(std::move(v));
}
if (nest_pb->map_size() > 0) {
std::map<std::string, Nest> m;
for (auto& p : *nest_pb->mutable_map()) {
m[p.first] = nest_pb_to_nest(&p.second, array_to_nest);
}
return Nest(std::move(m));
}
throw std::invalid_argument("ArrayNest proto contained no data.");
}