in hessian2/basic_codec/class_instance_codec.cc [9:43]
std::unique_ptr<ClassInstanceObject> Decoder::decode() {
Object::ClassInstance instance;
auto result = std::make_unique<ClassInstanceObject>();
values_ref_.push_back(result.get());
auto ret = reader_->peek<uint8_t>();
if (!ret.first) {
return nullptr;
}
// Read the actual definition
if (ret.second == 'C') {
auto def = decode<Object::Definition>();
if (!def) {
return nullptr;
}
}
// Find the definition by reference
auto def = decode<Object::Definition>();
if (!def) {
return nullptr;
}
instance.def_ = def->data_;
auto obj_len = def->data_->field_names_.size();
for (size_t i = 0; i < obj_len; i++) {
auto o = decode<Object>();
if (!o) {
return nullptr;
}
instance.data_.emplace_back(std::move(o));
}
result->setClassInstance(std::move(instance));
return result;
}