getTupleEncoder function
Returns an encoder for tuples (fixed-length lists with heterogeneous item encoders).
Each item in the tuple is encoded sequentially using its corresponding
encoder from items.
Implementation
Encoder<List<Object?>> getTupleEncoder(
List<Encoder<Object?>> items, {
String? description,
}) {
final fixedSize = sumCodecSizes(items.map(getFixedSize).toList());
final maxSize = sumCodecSizes(items.map(getMaxSize).toList());
int writeImpl(List<Object?> value, Uint8List bytes, int currentOffset) {
var offset = currentOffset;
assertValidNumberOfItemsForCodec(
description ?? 'tuple',
items.length,
value.length,
);
for (var i = 0; i < items.length; i++) {
offset = items[i].write(value[i], bytes, offset);
}
return offset;
}
if (fixedSize != null) {
return FixedSizeEncoder<List<Object?>>(
fixedSize: fixedSize,
write: writeImpl,
);
}
return VariableSizeEncoder<List<Object?>>(
getSizeFromValue: (value) {
var total = 0;
for (var i = 0; i < items.length; i++) {
total += getEncodedSize(value[i], items[i]);
}
return total;
},
write: writeImpl,
maxSize: maxSize,
);
}