parseDescriptorSet function

FileModel parseDescriptorSet(
  1. List<int> data
)

Parse FileDescriptorSet bytes into a FileModel.

Implementation

FileModel parseDescriptorSet(List<int> data) {
  final file = FileModel();
  final pendingServices = <(String, Uint8List)>[];
  final reader = _PbReader(Uint8List.fromList(data));
  while (true) {
    final f = reader.next();
    if (f == null) break;
    if (f.number != 1) continue;
    var pkg = '';
    final messageTypes = <Uint8List>[];
    final serviceTypes = <Uint8List>[];
    final fr = _PbReader(f.bytes);
    while (true) {
      final ff = fr.next();
      if (ff == null) break;
      switch (ff.number) {
        case 2:
          pkg = _asString(ff);
          break;
        case 4:
          messageTypes.add(ff.bytes);
          break;
        case 6:
          serviceTypes.add(ff.bytes);
          break;
      }
    }
    for (final m in messageTypes) {
      _parseMessage(pkg, m, file);
    }
    for (final s in serviceTypes) {
      pendingServices.add((pkg, s));
    }
  }
  for (final (pkg, serviceBytes) in pendingServices) {
    _parseService(pkg, serviceBytes, file);
  }
  return file;
}