in hessian2/basic_codec/def_ref_codec.cc [63:84]
bool Encoder::encode(const Object::RawDefinition &value) {
auto r = getDefRef(value);
if (r == -1) {
writer_->writeByte('C');
def_ref_.push_back(std::make_shared<Object::RawDefinition>(value));
encode<std::string>(value.type_);
encode<int32_t>(value.field_names_.size());
for (const auto &field_name : value.field_names_) {
encode<std::string>(field_name);
}
encode<Object::RawDefinition>(value);
} else {
if (r <= 15) {
uint8_t code = 0x60 + r;
writer_->writeByte(code);
} else {
writer_->writeByte('O');
encode<int32_t>(r);
}
}
return true;
}