use crate::config::*;
use serde::{Deserialize, Serialize};
use strum::EnumMessage;
use strum_macros;
#[cfg_attr(feature = "python-bindings", pyclass(eq, eq_int))]
#[derive(PartialEq, Serialize, Deserialize, strum_macros::EnumMessage, Debug, Clone, Copy)]
#[allow(dead_code)]
pub enum Qty {
#[strum(message = "number", detailed_message = "Unitless number")]
Number = 0,
#[strum(
message = "acousticpressure",
detailed_message = "Acoustic Pressure [Pa]"
)]
AcousticPressure = 1,
#[strum(message = "voltage", detailed_message = "Voltage [V]")]
Voltage = 2,
#[strum(message = "userdefined", detailed_message = "User defined [#]")]
UserDefined = 3,
}
#[cfg_attr(feature = "python-bindings", pymethods)]
impl Qty {
#[cfg(feature = "python-bindings")]
#[staticmethod]
fn all() -> Vec<Qty> {
use Qty::*;
vec![Number, AcousticPressure, Voltage]
}
fn __str__(&self) -> String {
self.get_detailed_message().unwrap().into()
}
fn unit_symb(&self) -> String {
use Qty::*;
match self {
Number => "1".into(),
AcousticPressure => "Pa".into(),
Voltage => "V".into(),
UserDefined => "?".into(),
}
}
fn level_ref_value(&self) -> Flt {
use Qty::*;
match self {
Number => 1.,
AcousticPressure => 2e-5,
Voltage => 1.,
UserDefined => 1.,
}
}
fn level_unit(&self) -> String {
use Qty::*;
match self {
Number => "dB re FS".into(),
AcousticPressure => "dB SPL".into(),
Voltage => "dBV".into(),
UserDefined => "?".into(),
}
}
}