#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum ChecksumAlgo {
Crc32c = 0,
Xxh3_128 = 1,
Shake256 = 2,
HmacShake256 = 3,
}
impl TryFrom<u8> for ChecksumAlgo {
type Error = u8;
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Crc32c),
1 => Ok(Self::Xxh3_128),
2 => Ok(Self::Shake256),
3 => Ok(Self::HmacShake256),
other => Err(other),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn round_trip() {
assert_eq!(ChecksumAlgo::try_from(0), Ok(ChecksumAlgo::Crc32c));
assert_eq!(ChecksumAlgo::try_from(1), Ok(ChecksumAlgo::Xxh3_128));
assert_eq!(ChecksumAlgo::try_from(2), Ok(ChecksumAlgo::Shake256));
assert_eq!(ChecksumAlgo::try_from(3), Ok(ChecksumAlgo::HmacShake256));
}
#[test]
fn invalid_value() {
assert_eq!(ChecksumAlgo::try_from(4), Err(4));
}
}