in hessian2/basic_codec/map_codec.cc [57:95]
std::unique_ptr<UntypedMapObject> Decoder::decode() {
std::string type;
Object::UntypedMap obj_map;
auto result = std::make_unique<UntypedMapObject>();
values_ref_.push_back(result.get());
auto ret = reader_->read<uint8_t>();
ABSL_ASSERT(ret.first);
auto code = ret.second;
ABSL_ASSERT(code == 'H');
ret = reader_->peek<uint8_t>();
if (!ret.first) {
return nullptr;
}
while (ret.second != 'Z') {
auto key = decode<Object>();
if (!key) {
return nullptr;
}
auto value = decode<Object>();
if (!value) {
return nullptr;
}
obj_map.emplace(std::move(key), std::move(value));
ret = reader_->peek<uint8_t>();
if (!ret.first) {
return nullptr;
}
}
// Skip last 'Z'
reader_->read<uint8_t>();
result->setUntypedMap(std::move(obj_map));
return result;
}