crispii_bits 1.0.0

Bit related functionality intended for use with Crispii
Documentation
use std::fmt::Display;

#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
pub enum PosU64 {
    #[default]
    B0,
    B1,
    B2,
    B3,
    B4,
    B5,
    B6,
    B7,
    B8,
    B9,
    B10,
    B11,
    B12,
    B13,
    B14,
    B15,
    B16,
    B17,
    B18,
    B19,
    B20,
    B21,
    B22,
    B23,
    B24,
    B25,
    B26,
    B27,
    B28,
    B29,
    B30,
    B31,
    B32,
    B33,
    B34,
    B35,
    B36,
    B37,
    B38,
    B39,
    B40,
    B41,
    B42,
    B43,
    B44,
    B45,
    B46,
    B47,
    B48,
    B49,
    B50,
    B51,
    B52,
    B53,
    B54,
    B55,
    B56,
    B57,
    B58,
    B59,
    B60,
    B61,
    B62,
    B63,
}

impl Display for PosU64 {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let as_u8 = u8::from(*self);

        write!(f, "u64:Bit {as_u8}")
    }
}

impl From<PosU64> for u8 {
    fn from(value: PosU64) -> Self {
        match value {
            PosU64::B0 => 0,
            PosU64::B1 => 1,
            PosU64::B2 => 2,
            PosU64::B3 => 3,
            PosU64::B4 => 4,
            PosU64::B5 => 5,
            PosU64::B6 => 6,
            PosU64::B7 => 7,
            PosU64::B8 => 8,
            PosU64::B9 => 9,
            PosU64::B10 => 10,
            PosU64::B11 => 11,
            PosU64::B12 => 12,
            PosU64::B13 => 13,
            PosU64::B14 => 14,
            PosU64::B15 => 15,
            PosU64::B16 => 16,
            PosU64::B17 => 17,
            PosU64::B18 => 18,
            PosU64::B19 => 19,
            PosU64::B20 => 20,
            PosU64::B21 => 21,
            PosU64::B22 => 22,
            PosU64::B23 => 23,
            PosU64::B24 => 24,
            PosU64::B25 => 25,
            PosU64::B26 => 26,
            PosU64::B27 => 27,
            PosU64::B28 => 28,
            PosU64::B29 => 29,
            PosU64::B30 => 30,
            PosU64::B31 => 31,
            PosU64::B32 => 32,
            PosU64::B33 => 33,
            PosU64::B34 => 34,
            PosU64::B35 => 35,
            PosU64::B36 => 36,
            PosU64::B37 => 37,
            PosU64::B38 => 38,
            PosU64::B39 => 39,
            PosU64::B40 => 40,
            PosU64::B41 => 41,
            PosU64::B42 => 42,
            PosU64::B43 => 43,
            PosU64::B44 => 44,
            PosU64::B45 => 45,
            PosU64::B46 => 46,
            PosU64::B47 => 47,
            PosU64::B48 => 48,
            PosU64::B49 => 49,
            PosU64::B50 => 50,
            PosU64::B51 => 51,
            PosU64::B52 => 52,
            PosU64::B53 => 53,
            PosU64::B54 => 54,
            PosU64::B55 => 55,
            PosU64::B56 => 56,
            PosU64::B57 => 57,
            PosU64::B58 => 58,
            PosU64::B59 => 59,
            PosU64::B60 => 60,
            PosU64::B61 => 61,
            PosU64::B62 => 62,
            PosU64::B63 => 63,
        }
    }
}

impl TryFrom<u8> for PosU64 {
    type Error = &'static str;

    fn try_from(value: u8) -> Result<Self, Self::Error> {
        match value {
            0 => Ok(PosU64::B0),
            1 => Ok(PosU64::B1),
            2 => Ok(PosU64::B2),
            3 => Ok(PosU64::B3),
            4 => Ok(PosU64::B4),
            5 => Ok(PosU64::B5),
            6 => Ok(PosU64::B6),
            7 => Ok(PosU64::B7),
            8 => Ok(PosU64::B8),
            9 => Ok(PosU64::B9),
            10 => Ok(PosU64::B10),
            11 => Ok(PosU64::B11),
            12 => Ok(PosU64::B12),
            13 => Ok(PosU64::B13),
            14 => Ok(PosU64::B14),
            15 => Ok(PosU64::B15),
            16 => Ok(PosU64::B16),
            17 => Ok(PosU64::B17),
            18 => Ok(PosU64::B18),
            19 => Ok(PosU64::B19),
            20 => Ok(PosU64::B20),
            21 => Ok(PosU64::B21),
            22 => Ok(PosU64::B22),
            23 => Ok(PosU64::B23),
            24 => Ok(PosU64::B24),
            25 => Ok(PosU64::B25),
            26 => Ok(PosU64::B26),
            27 => Ok(PosU64::B27),
            28 => Ok(PosU64::B28),
            29 => Ok(PosU64::B29),
            30 => Ok(PosU64::B30),
            31 => Ok(PosU64::B31),
            32 => Ok(PosU64::B32),
            33 => Ok(PosU64::B33),
            34 => Ok(PosU64::B34),
            35 => Ok(PosU64::B35),
            36 => Ok(PosU64::B36),
            37 => Ok(PosU64::B37),
            38 => Ok(PosU64::B38),
            39 => Ok(PosU64::B39),
            40 => Ok(PosU64::B40),
            41 => Ok(PosU64::B41),
            42 => Ok(PosU64::B42),
            43 => Ok(PosU64::B43),
            44 => Ok(PosU64::B44),
            45 => Ok(PosU64::B45),
            46 => Ok(PosU64::B46),
            47 => Ok(PosU64::B47),
            48 => Ok(PosU64::B48),
            49 => Ok(PosU64::B49),
            50 => Ok(PosU64::B50),
            51 => Ok(PosU64::B51),
            52 => Ok(PosU64::B52),
            53 => Ok(PosU64::B53),
            54 => Ok(PosU64::B54),
            55 => Ok(PosU64::B55),
            56 => Ok(PosU64::B56),
            57 => Ok(PosU64::B57),
            58 => Ok(PosU64::B58),
            59 => Ok(PosU64::B59),
            60 => Ok(PosU64::B60),
            61 => Ok(PosU64::B61),
            62 => Ok(PosU64::B62),
            63 => Ok(PosU64::B63),
            _ => Err("PosU64 can only be represented by the u8 values 0 to 63 (inclusive)!")
        }
    }
}