use anyhow::{Result, anyhow};
use byteorder::{BigEndian as BE, ByteOrder as BO, LittleEndian as LE};
use serde::{Deserialize, Serialize};
use strum_macros::Display;
#[derive(Display, Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum ByteOrder {
LittleEndian,
BigEndian,
}
impl ByteOrder {
pub fn from_keyword_str(byte_order: &str) -> Result<Self> {
match byte_order {
"1,2,3,4" => Ok(Self::LittleEndian),
"4,3,2,1" => Ok(Self::BigEndian),
_ => Err(anyhow!("Invalid byte order")),
}
}
pub const fn to_keyword_str(&self) -> &str {
match self {
Self::LittleEndian => "1,2,3,4",
Self::BigEndian => "4,3,2,1",
}
}
pub fn read_f32(&self, bytes: &[u8]) -> f32 {
match self {
Self::LittleEndian => LE::read_f32(bytes),
Self::BigEndian => BE::read_f32(bytes),
}
}
}