#[inline(always)]
pub const fn seq_to_part(seq: u32, partitions_count: usize) -> usize {
match ((seq as usize).saturating_sub(1)).checked_rem(partitions_count) {
Some(part) => part,
None => 0,
}
}
#[inline(always)]
pub fn seq_or_default(seq: &[u8], crc: u32, default: u32) -> u32 {
match <[u8; 4]>::try_from(seq) {
Ok(bytes) if is_crc_seq_correct(u32::from_le_bytes(bytes), crc) => {
u32::from_le_bytes(bytes)
}
_ => default,
}
}
#[inline(always)]
pub fn is_crc_seq_correct(seq: u32, crc: u32) -> bool {
seq != u32::MAX && crc == crate::crc32_le(u32::MAX, &seq.to_le_bytes())
}