in common/util/cpp/HsStruct.cpp [60:101]
folly::dynamic HsJSON::toDynamic() && {
switch (type) {
case Type::Null:
return folly::dynamic();
case Type::Bool:
return folly::dynamic(static_cast<bool>(integral));
case Type::Integral:
return folly::dynamic(integral);
case Type::Real:
return folly::dynamic(real);
case Type::String:
return folly::dynamic(std::move(string).toStdString());
case Type::Array: {
auto res = folly::dynamic::array();
auto end = std::make_move_iterator(array.end());
for (auto itr = std::make_move_iterator(array.begin()); itr != end;
itr++) {
res.push_back(std::move(*itr).toDynamic());
}
return res;
}
case Type::Object: {
folly::dynamic res = folly::dynamic::object;
auto items = std::move(object).take_items();
// Manual version of zipping 2 iterators together
auto key_itr = std::make_move_iterator(items.first.begin());
auto key_end = std::make_move_iterator(items.first.end());
auto val_itr = std::make_move_iterator(items.second.begin());
auto val_end = std::make_move_iterator(items.second.end());
while (key_itr != key_end && val_itr != val_end) {
res.insert(
std::move(*key_itr).toStdString(), std::move(*val_itr).toDynamic());
key_itr++;
val_itr++;
}
return res;
}
}
folly::assume_unreachable();
}