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)!")
}
}
}