writeField method
void
writeField(
- int fieldNumber,
- int fieldType,
- dynamic fieldValue
)
Implementation
void writeField(int fieldNumber, int fieldType, dynamic fieldValue) {
final valueType = PbFieldType.baseType(fieldType);
if ((fieldType & PbFieldType.PACKED_BIT) != 0) {
final List list = fieldValue;
if (list.isNotEmpty) {
_writeTag(fieldNumber, WIRETYPE_LENGTH_DELIMITED);
final mark = _startLengthDelimited();
for (final value in list) {
_writeValueAs(valueType, value);
}
_endLengthDelimited(mark);
}
return;
}
if ((fieldType & PbFieldType.MAP_BIT) != 0) {
final PbMap map = fieldValue;
final keyWireFormat = _wireTypes[_valueTypeIndex(map.keyFieldType)];
final valueWireFormat = _wireTypes[_valueTypeIndex(map.valueFieldType)];
map.forEach((key, value) {
_writeTag(fieldNumber, WIRETYPE_LENGTH_DELIMITED);
final mark = _startLengthDelimited();
_writeValue(mapKeyFieldNumber, map.keyFieldType, key, keyWireFormat);
_writeValue(
mapValueFieldNumber,
map.valueFieldType,
value,
valueWireFormat,
);
_endLengthDelimited(mark);
});
return;
}
final wireFormat = _wireTypes[_valueTypeIndex(valueType)];
if ((fieldType & PbFieldType.REPEATED_BIT) != 0) {
final List list = fieldValue;
for (var i = 0; i < list.length; i++) {
_writeValue(fieldNumber, valueType, list[i], wireFormat);
}
return;
}
_writeValue(fieldNumber, valueType, fieldValue, wireFormat);
}