bool Encoder::encode()

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;
}