serialize method

  1. @override
Uint8List serialize(
  1. AstroExternalScannerState state
)
override

Implementation

@override
Uint8List serialize(AstroExternalScannerState state) {
  final buffer = Uint8List(_serializationBufferSize);
  final bytes = ByteData.sublistView(buffer);
  final tagCount = math.min(state._tags.length, 0xffff);
  var serializedTagCount = 0;
  var offset = 4;

  while (serializedTagCount < tagCount) {
    final tag = state._tags[serializedTagCount];
    if (tag.type == _custom) {
      final name = utf8.encode(tag.customTagName);
      final nameLength = math.min(name.length, 0xff);
      if (offset + 2 + nameLength >= _serializationBufferSize) break;
      buffer[offset++] = tag.type;
      buffer[offset++] = nameLength;
      buffer.setRange(offset, offset + nameLength, name);
      offset += nameLength;
    } else {
      if (offset + 1 >= _serializationBufferSize) break;
      buffer[offset++] = tag.type;
    }
    serializedTagCount++;
  }

  bytes
    ..setUint16(0, serializedTagCount, Endian.host)
    ..setUint16(2, tagCount, Endian.host);
  return Uint8List.sublistView(buffer, 0, offset);
}