1use anyhow::{Result, anyhow};
2use byteorder::{BigEndian as BE, ByteOrder as BO, LittleEndian as LE};
3use serde::{Deserialize, Serialize};
4use strum_macros::Display;
5
6#[derive(Display, Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
11pub enum ByteOrder {
12 LittleEndian,
13 BigEndian,
14}
15impl ByteOrder {
16 pub fn from_keyword_str(byte_order: &str) -> Result<Self> {
20 match byte_order {
21 "1,2,3,4" => Ok(Self::LittleEndian),
22 "4,3,2,1" => Ok(Self::BigEndian),
23 _ => Err(anyhow!("Invalid byte order")),
24 }
25 }
26
27 pub const fn to_keyword_str(&self) -> &str {
29 match self {
30 Self::LittleEndian => "1,2,3,4",
31 Self::BigEndian => "4,3,2,1",
32 }
33 }
34
35 pub fn read_f32(&self, bytes: &[u8]) -> f32 {
37 match self {
38 Self::LittleEndian => LE::read_f32(bytes),
39 Self::BigEndian => BE::read_f32(bytes),
40 }
41 }
42}