use crate::constants::error::{ErrorMessage, FAILED_TRANSFORMING_AN_U8_TO_VALID_LENGTH};
pub const ZERO_BYTE_LENGTH: u8 = 0x00;
pub const ONE_BYTE_LENGTH: u8 = 0x01;
pub const TWO_BYTE_LENGTH: u8 = 0x02;
pub const FOUR_BYTE_LENGTH: u8 = 0x03;
pub const EIGHT_BYTE_LENGTH: u8 = 0x04;
#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Debug)]
#[repr(u8)]
pub enum ByteLength {
Zero = ZERO_BYTE_LENGTH,
One = ONE_BYTE_LENGTH,
Two = TWO_BYTE_LENGTH,
Four = FOUR_BYTE_LENGTH,
Eight = EIGHT_BYTE_LENGTH
}
impl TryFrom<u8> for ByteLength {
type Error = ErrorMessage;
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
v if v & 0x0F == ZERO_BYTE_LENGTH => Ok(ByteLength::Zero),
v if v & 0x0F == ONE_BYTE_LENGTH => Ok(ByteLength::One),
v if v & 0x0F == TWO_BYTE_LENGTH => Ok(ByteLength::Two),
v if v & 0x0F == FOUR_BYTE_LENGTH => Ok(ByteLength::Four),
v if v & 0x0F == EIGHT_BYTE_LENGTH => Ok(ByteLength::Eight),
_ => Err(ErrorMessage(FAILED_TRANSFORMING_AN_U8_TO_VALID_LENGTH)),
}
}
}
impl From<ByteLength> for u8 {
fn from(t: ByteLength) -> u8 {
(t as u8) & 0x0F
}
}
impl From<ByteLength> for usize {
fn from(t: ByteLength) -> usize {
(t as usize) & 0x0F
}
}