mergeFromCodedBufferReader method
void
mergeFromCodedBufferReader(
- CodedBufferReader input, [
- ExtensionRegistry extensionRegistry = ExtensionRegistry.EMPTY
inherited
Same as mergeFromBuffer, but takes a CodedBufferReader input.
Implementation
@override
void mergeFromCodedBufferReader(
CodedBufferReader input, [
ExtensionRegistry extensionRegistry = ExtensionRegistry.EMPTY,
]) {
// Parse items. The field for the items looks like:
//
// repeated group Item items = 1;
//
// Since message sets are compatible with proto1 items can't be packed.
while (true) {
final tag = input.readTag();
final tagNumber = getTagFieldNumber(tag);
if (tag == 0) {
break; // End of input.
}
if (tagNumber != _messageSetItemsTag) {
if (!input.skipField(tag)) {
break; // End of group.
} else {
continue;
}
}
// Parse an item. An item is a message with two fields:
//
// message Item {
// int32 type_id = 2;
// Message message = 3;
// }
//
// We can see the fields in any order, so loop until parsing both fields.
int? typeId;
Uint8List? message;
while (true) {
final tag = input.readTag();
final tagNumber = getTagFieldNumber(tag);
if (tag == 0) {
break; // End of input.
}
if (tagNumber == _messageSetItemTypeIdTag) {
typeId = input.readInt32();
if (message != null) {
_parseExtension(typeId, message, extensionRegistry);
typeId = null;
message = null;
}
} else if (tagNumber == _messageSetItemMessageTag) {
message = input.readBytesAsView();
if (typeId != null) {
_parseExtension(typeId, message, extensionRegistry);
typeId = null;
message = null;
}
} else {
// Skip unknown tags. If we're at the end of the group consume the
// EGROUP tag.
if (!input.skipField(tag)) {
break; // End of group.
}
}
}
}
}