lasprs 0.6.7

Library for Acoustic Signal Processing (Rust edition, with optional Python bindings via pyo3)
Documentation
//! Physical quantities that are input / output of a daq device. Provides an enumeration for these.
//!

use crate::config::*;
use serde::{Deserialize, Serialize};
use strum::EnumMessage;
use strum_macros;

/// Physical quantities that are I/O of a Daq device.
#[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 {
    /// Number
    #[strum(message = "number", detailed_message = "Unitless number")]
    Number = 0,
    /// Acoustic pressure
    #[strum(
        message = "acousticpressure",
        detailed_message = "Acoustic Pressure [Pa]"
    )]
    AcousticPressure = 1,
    /// Voltage
    #[strum(message = "voltage", detailed_message = "Voltage [V]")]
    Voltage = 2,
    #[strum(message = "userdefined", detailed_message = "User defined [#]")]
    /// 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()
    }
    /// Return a unit symbol for the current quantity
    fn unit_symb(&self) -> String {
        use Qty::*;
        match self {
            Number => "1".into(),
            AcousticPressure => "Pa".into(),
            Voltage => "V".into(),
            UserDefined => "?".into(),
        }
    }
    /// Reference level for computing dB's
    fn level_ref_value(&self) -> Flt {
        use Qty::*;
        match self {
            Number => 1.,
            AcousticPressure => 2e-5,
            Voltage => 1.,
            UserDefined => 1.,
        }
    }
    /// Level units (dB re..)
    fn level_unit(&self) -> String {
        use Qty::*;
        match self {
            Number => "dB re FS".into(),
            AcousticPressure => "dB SPL".into(),
            Voltage => "dBV".into(),
            UserDefined => "?".into(),
        }
    }
}