[Yunq] Add support for nested fields in messages.

This commit is contained in:
Drew Galbraith 2024-01-11 21:32:08 -08:00
parent 9e12531651
commit a48d63a664
18 changed files with 257 additions and 219 deletions

View file

@ -38,6 +38,9 @@ class Serializer {
void WriteRepeatedCapability(uint64_t field_index,
const glcr::Vector<uint64_t>& value);
template <typename T>
void WriteMessage(uint64_t field_index, const T& value);
void WriteHeader();
uint64_t size() const { return next_extension_; }
@ -67,4 +70,24 @@ template <>
void Serializer::WriteRepeated<uint64_t>(uint64_t field_index,
const glcr::Vector<uint64_t>& value);
template <typename T>
void Serializer::WriteMessage(uint64_t field_index, const T& value) {
uint64_t length = 0;
if (caps_) {
length = value.SerializeToBytes(buffer_, offset_ + next_extension_,
caps_.value().get());
} else {
length = value.SerializeToBytes(buffer_, offset_ + next_extension_);
}
ExtensionPointer ptr{
.offset = (uint32_t)next_extension_,
.length = (uint32_t)length,
};
next_extension_ += length;
buffer_.WriteAt<ExtensionPointer>(field_offset(field_index), ptr);
}
} // namespace yunq