negicon_protocol/
util.rs

1use core::ops::Shl;
2
3pub trait ConvertToU16 {
4    fn to_u16_big_endian(self) -> [u16; 4];
5    fn to_u16_little_endian(self) -> [u16; 4];
6}
7
8impl ConvertToU16 for [u8; 8] {
9    fn to_u16_big_endian(self) -> [u16; 4] {
10        [
11            ((self[0] as u16) << 8) | self[1] as u16,
12            ((self[2] as u16) << 8) | self[3] as u16,
13            ((self[4] as u16) << 8) | self[5] as u16,
14            ((self[6] as u16) << 8) | self[7] as u16,
15        ]
16    }
17
18    fn to_u16_little_endian(self) -> [u16; 4] {
19        [
20            ((self[1] as u16) << 8) | self[0] as u16,
21            ((self[3] as u16) << 8) | self[2] as u16,
22            ((self[5] as u16) << 8) | self[4] as u16,
23            ((self[7] as u16) << 8) | self[6] as u16,
24        ]
25    }
26}
27
28pub trait ConvertToU8 {
29    fn to_u8_big_endian(self) -> [u8; 8];
30    fn to_u8_little_endian(self) -> [u8; 8];
31}
32
33impl ConvertToU8 for [u16; 4] {
34    fn to_u8_big_endian(self) -> [u8; 8] {
35        [
36            (self[0] >> 8) as u8,
37            self[0] as u8,
38            (self[1] >> 8) as u8,
39            self[1] as u8,
40            (self[2] >> 8) as u8,
41            self[2] as u8,
42            (self[3] >> 8) as u8,
43            self[3] as u8,
44        ]
45    }
46
47    fn to_u8_little_endian(self) -> [u8; 8] {
48        [
49            self[0] as u8,
50            (self[0] >> 8) as u8,
51            self[1] as u8,
52            (self[1] >> 8) as u8,
53            self[2] as u8,
54            (self[2] >> 8) as u8,
55            self[3] as u8,
56            (self[3] >> 8) as u8,
57        ]
58    }
59}
60
61pub fn make_u16(upper: u8, lower: u8) -> u16 {
62    lower as u16 | (upper as u16).shl(8)
63}
64
65pub fn make_u32(top: u8, high: u8, low: u8, bottom: u8) -> u32 {
66    bottom as u32 | (low as u32).shl(8) | (high as u32).shl(16) | (top as u32).shl(24)
67}
68
69pub fn make_i16(upper: u8, lower: u8) -> i16 {
70    make_u16(upper, lower) as i16
71}