saveSync method
Writes segments as the next generation into the alternating slot.
A previous save that failed before its bytes landed can leave one empty slot; that must not make every later save fail, so a single unusable slot is tolerated here. Two unusable slots still raise through loadSync.
Implementation
Manifest saveSync(List<SegmentInfo> segments) {
final current = loadSync(allowTornSingleSlot: true);
final generation = (current?.generation ?? 0) + 1;
final manifest = Manifest(generation: generation, segments: segments);
final file = directory.openSync(slotNames[generation % 2]);
try {
file.writeAllSync(manifest.encode());
file.flushSync();
} finally {
file.closeSync();
}
return manifest;
}