bool Encoder::encode()

in hessian2/basic_codec/list_codec.cc [190:215]


bool Encoder::encode(const TypedListObject& value) {
  values_ref_.emplace(&value, values_ref_.size());
  auto typed_list = value.toTypedList();
  ABSL_ASSERT(typed_list.has_value());
  auto& typed_list_value = typed_list.value().get();

  Object::TypeRef type_ref(typed_list_value.type_name_);
  auto len = typed_list_value.values_.size();

  if (len <= 7) {
    writer_->writeByte(static_cast<uint8_t>(0x70 + len));
  } else {
    writer_->writeByte('V');
  }

  encode<Object::TypeRef>(type_ref);
  if (len > 7) {
    encode<int32_t>(len);
  }

  for (size_t i = 0; i < len; i++) {
    encode<Object>(*typed_list_value.values_[i]);
  }

  return true;
}