decode method

RitoPendingShards decode(
  1. Uint8List bytes
)

Implementation

RitoPendingShards decode(Uint8List bytes) {
  final reader = openRitoWireMessage(
    bytes,
    magic: 'RITOPSH1',
    label: 'pending shards',
  );
  final count = reader.count('pending shards');
  if (count == 0) reader.fail('a pending failure names at least one shard');
  final shardIds = <int>[];
  for (var index = 0; index < count; index += 1) {
    final shardId = reader.uint32('pending shard id');
    if (shardId == 0)
      reader.fail('shard 0 is the skeleton and is never pending');
    if (shardIds.isNotEmpty && shardId <= shardIds.last) {
      reader.fail('pending shards are ascending and distinct');
    }
    shardIds.add(shardId);
  }
  final message = reader.string('pending shards message');
  reader.finish('pending shards wire message');
  return RitoPendingShards(
    shardIds: List<int>.unmodifiable(shardIds),
    message: message,
  );
}