use std::fmt::Display;
use crate::config::*;
use serde::{Deserialize, Serialize};
use strum::EnumMessage;
use strum_macros::{EnumMessage, FromRepr};
#[derive(EnumMessage, FromRepr, PartialEq, Copy, Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(
feature = "python-bindings",
gen_stub_pyclass_enum,
pyclass(eq, eq_int, from_py_object)
)]
#[repr(u32)]
pub enum DataType {
#[strum(message = "F32", detailed_message = "32-bit floating point")]
F32 = 0,
#[strum(message = "F64", detailed_message = "64-bit floating point")]
F64 = 1,
#[strum(message = "I8", detailed_message = "8-bit integer")]
I8 = 2,
#[strum(message = "I16", detailed_message = "16-bit integer")]
I16 = 3,
#[strum(message = "I24", detailed_message = "24-bit integer")]
I24 = 4,
#[strum(message = "I32", detailed_message = "32-bit integer")]
I32 = 5,
}
impl Display for DataType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.get_detailed_message().unwrap())
}
}
#[cfg_attr(feature = "python-bindings", gen_stub_pymethods, pymethods)]
impl DataType {
fn __str__(&self) -> String {
self.get_detailed_message()
.expect("Should have detailed message")
.into()
}
pub fn bytes_per_sample_in_memory(&self) -> usize {
match self {
DataType::F32 => 4,
DataType::F64 => 8,
DataType::I8 => 1,
DataType::I16 => 2,
DataType::I24 => 4,
DataType::I32 => 4,
}
}
}