flagBitsFromJson function
Converts a JSON object to a ByteData containing the flag bits.
Implementation
ByteData flagBitsFromJson(Object? json_, Flags spec) {
final numBytes = num_i32_flags(spec.labels) * 4;
final flagBits = ByteData(numBytes);
if (json_ is Map) {
json_.forEach((k, v) {
final index = spec.labels.indexOf(k as String);
if (index == -1) throw Exception('Invalid flag $k: $v');
if (v == true || v == 1) {
final u32Index = index ~/ 32;
final current = flagBits.getUint32(u32Index, Endian.little);
flagBits.setUint32(
u32Index,
current | (math.pow(2, index % 32) as int),
Endian.little,
);
}
});
return flagBits;
} else {
final json = (json_! as List).cast<int>();
if (json.length != (numBytes ~/ 4)) {
throw Exception('Invalid flag list length: $json');
}
for (var i = 0; i < json.length; i++) {
flagBits.setUint32(i * 4, json[i], Endian.little);
}
return flagBits;
}
}