use crate::*;
use anyhow::{Result, anyhow};
use hdf5_metno::File;
#[cfg(feature = "python-bindings")]
use pyo3::prelude::*;
use serde::{Deserialize, Serialize};
use strum::EnumMessage;
use strum_macros::{Display, EnumMessage, FromRepr};
use uuid::Uuid;
use crate::tools::h5::{read_h5_attr_scalar, read_h5_attr_string};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[cfg_attr(
feature = "python-bindings",
gen_stub_pyclass_complex_enum,
pyclass(from_py_object)
)]
pub enum ILInfo {
NormalMeasurement {},
ReferenceMeasurement {},
}
#[cfg_attr(
feature = "python-bindings",
gen_stub_pyclass_complex_enum,
pyclass(from_py_object)
)]
#[derive(Serialize, Deserialize, Debug, Clone, strum_macros::EnumMessage, PartialEq)]
pub enum MeasurementType {
#[strum(message = "Not specific")]
NotSpecific {},
#[strum(message = "General calibration")]
GeneralCalibration {},
#[strum(message = "Insertion loss")]
IL {
info: ILInfo,
},
#[strum(message = "µZ measurement")]
MuZ {
muZSpecific_serialized: String,
},
#[strum(message = "Sound levels")]
SoundLevels {},
}
#[cfg(feature = "python-bindings")]
#[cfg_attr(feature = "python-bindings", gen_stub_pymethods, pymethods)]
impl MeasurementType {
fn __str__(&self) -> String {
self.get_message().unwrap().into()
}
fn __repr__(&self) -> String {
format!("{:?}", self)
}
#[pyo3(name = "requiresPreCapturedData")]
fn requiresPreCapturedData_py(&self) -> bool {
self.requiresPreCapturedData()
}
}
impl MeasurementType {
pub fn requiresPreCapturedData(&self) -> bool {
matches!(self, MeasurementType::SoundLevels {})
}
}
impl Default for MeasurementType {
fn default() -> Self {
MeasurementType::NotSpecific {}
}
}