1use crate::consts::*;
4use crate::CrcAlgorithm;
5use core::fmt::{Display, Formatter};
6use core::str::FromStr;
7
8impl FromStr for CrcAlgorithm {
9 type Err = ();
10
11 fn from_str(s: &str) -> Result<Self, Self::Err> {
12 match s {
13 NAME_CRC32_AIXM => Ok(CrcAlgorithm::Crc32Aixm),
14 NAME_CRC32_AUTOSAR => Ok(CrcAlgorithm::Crc32Autosar),
15 NAME_CRC32_BASE91_D => Ok(CrcAlgorithm::Crc32Base91D),
16 NAME_CRC32_BZIP2 => Ok(CrcAlgorithm::Crc32Bzip2),
17 NAME_CRC32_CD_ROM_EDC => Ok(CrcAlgorithm::Crc32CdRomEdc),
18 NAME_CRC32_CKSUM => Ok(CrcAlgorithm::Crc32Cksum),
19 NAME_CRC32_ISCSI => Ok(CrcAlgorithm::Crc32Iscsi),
20 NAME_CRC32_ISO_HDLC => Ok(CrcAlgorithm::Crc32IsoHdlc),
21 NAME_CRC32_JAMCRC => Ok(CrcAlgorithm::Crc32Jamcrc),
22 NAME_CRC32_MEF => Ok(CrcAlgorithm::Crc32Mef),
23 NAME_CRC32_MPEG_2 => Ok(CrcAlgorithm::Crc32Mpeg2),
24 NAME_CRC32_XFER => Ok(CrcAlgorithm::Crc32Xfer),
25 NAME_CRC64_GO_ISO => Ok(CrcAlgorithm::Crc64GoIso),
26 NAME_CRC64_MS => Ok(CrcAlgorithm::Crc64Ms),
27 NAME_CRC64_NVME => Ok(CrcAlgorithm::Crc64Nvme),
28 NAME_CRC64_REDIS => Ok(CrcAlgorithm::Crc64Redis),
29 NAME_CRC64_XZ => Ok(CrcAlgorithm::Crc64Xz),
30 NAME_CRC64_ECMA_182 => Ok(CrcAlgorithm::Crc64Ecma182),
31 NAME_CRC64_WE => Ok(CrcAlgorithm::Crc64We),
32 _ => Err(()),
33 }
34 }
35}
36
37impl Display for CrcAlgorithm {
38 fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
39 match self {
40 CrcAlgorithm::Crc32Aixm => write!(f, "{NAME_CRC32_AIXM}",),
41 CrcAlgorithm::Crc32Autosar => write!(f, "{NAME_CRC32_AUTOSAR}",),
42 CrcAlgorithm::Crc32Base91D => write!(f, "{NAME_CRC32_BASE91_D}",),
43 CrcAlgorithm::Crc32Bzip2 => write!(f, "{NAME_CRC32_BZIP2}",),
44 CrcAlgorithm::Crc32CdRomEdc => write!(f, "{NAME_CRC32_CD_ROM_EDC}",),
45 CrcAlgorithm::Crc32Cksum => write!(f, "{NAME_CRC32_CKSUM}",),
46 CrcAlgorithm::Crc32Custom => write!(f, "CRC-32/CUSTOM"),
47 CrcAlgorithm::Crc32Iscsi => write!(f, "{NAME_CRC32_ISCSI}",),
48 CrcAlgorithm::Crc32IsoHdlc => write!(f, "{NAME_CRC32_ISO_HDLC}",),
49 CrcAlgorithm::Crc32Jamcrc => write!(f, "{NAME_CRC32_JAMCRC}",),
50 CrcAlgorithm::Crc32Mef => write!(f, "{NAME_CRC32_MEF}",),
51 CrcAlgorithm::Crc32Mpeg2 => write!(f, "{NAME_CRC32_MPEG_2}",),
52 CrcAlgorithm::Crc32Xfer => write!(f, "{NAME_CRC32_XFER}",),
53 CrcAlgorithm::Crc64Custom => write!(f, "CRC-64/CUSTOM"),
54 CrcAlgorithm::Crc64GoIso => write!(f, "{NAME_CRC64_GO_ISO}",),
55 CrcAlgorithm::Crc64Ms => write!(f, "{NAME_CRC64_MS}",),
56 CrcAlgorithm::Crc64Nvme => write!(f, "{NAME_CRC64_NVME}",),
57 CrcAlgorithm::Crc64Redis => write!(f, "{NAME_CRC64_REDIS}",),
58 CrcAlgorithm::Crc64Xz => write!(f, "{NAME_CRC64_XZ}",),
59 CrcAlgorithm::Crc64Ecma182 => write!(f, "{NAME_CRC64_ECMA_182}",),
60 CrcAlgorithm::Crc64We => write!(f, "{NAME_CRC64_WE}",),
61 }
62 }
63}
64
65#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
66#[derive(Debug, Copy, Clone)]
67pub(crate) enum Reflector<T> {
68 NoReflector,
69 ForwardReflector { smask: T },
70}
71
72#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
73pub(crate) enum DataChunkProcessor {
75 From0To15, From16, From17To31, From32To255, }
80
81#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
82impl DataChunkProcessor {
83 pub fn for_length(len: usize) -> Self {
85 match len {
86 0..=15 => Self::From0To15,
87 16 => Self::From16,
88 17..=31 => Self::From17To31,
89 32..=255 => Self::From32To255,
90 _ => panic!("data length too large"),
91 }
92 }
93}