number_bytes/
endianness.rs

1use crate::{FromBytesResult, NumberBytes};
2
3pub enum NumberBytesEndianness {
4    NativeEndian,
5    BigEndian,
6    LittleEndian,
7}
8
9trait NumberBytesEndiannessExt: Sized {
10    fn from_bytes(bytes: &[u8], endianness: NumberBytesEndianness) -> FromBytesResult<Self>;
11    fn to_bytes(self, endianness: NumberBytesEndianness) -> Vec<u8>;
12}
13
14impl<T> NumberBytesEndiannessExt for T where T: NumberBytes {
15    fn from_bytes(bytes: &[u8], endianness: NumberBytesEndianness) -> FromBytesResult<Self> {
16        match endianness {
17            NumberBytesEndianness::NativeEndian => Self::from_ne_bytes(bytes),
18            NumberBytesEndianness::BigEndian => Self::from_be_bytes(bytes),
19            NumberBytesEndianness::LittleEndian => Self::from_le_bytes(bytes),
20        }
21    }
22
23    fn to_bytes(self, endianness: NumberBytesEndianness) -> Vec<u8> {
24        match endianness {
25            NumberBytesEndianness::NativeEndian => self.to_ne_bytes(),
26            NumberBytesEndianness::BigEndian => self.to_be_bytes(),
27            NumberBytesEndianness::LittleEndian => self.to_le_bytes(),
28        }
29    }
30}