parseDescriptorSet function
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;
}