use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum MicrophoneSimModel {
#[default]
Off,
#[serde(rename = "c414_xlii")]
C414Xlii,
#[serde(rename = "sm7b")]
SM7B,
#[serde(rename = "rca44")]
Rca44,
#[serde(rename = "tlm103")]
Tlm103,
U87,
}
pub const SUPPORTED_MICROPHONE_SIM_MODELS: [MicrophoneSimModel; 6] = [
MicrophoneSimModel::Off,
MicrophoneSimModel::U87,
MicrophoneSimModel::Tlm103,
MicrophoneSimModel::C414Xlii,
MicrophoneSimModel::SM7B,
MicrophoneSimModel::Rca44,
];
impl MicrophoneSimModel {
pub fn as_str(&self) -> &'static str {
match self {
Self::Off => "off",
Self::C414Xlii => "c414_xlii",
Self::SM7B => "sm7b",
Self::Rca44 => "rca44",
Self::Tlm103 => "tlm103",
Self::U87 => "u87",
}
}
pub fn label(&self) -> &'static str {
match self {
Self::Off => "Off",
Self::C414Xlii => "AKG C414 XLII",
Self::SM7B => "SM7B",
Self::Rca44 => "RCA 44",
Self::Tlm103 => "Neumann TLM 103",
Self::U87 => "U87",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn serde_uses_stable_model_names() {
let model = serde_json::from_str::<MicrophoneSimModel>(r#""u87""#).unwrap();
assert_eq!(model, MicrophoneSimModel::U87);
assert_eq!(serde_json::to_string(&model).unwrap(), r#""u87""#);
let model = serde_json::from_str::<MicrophoneSimModel>(r#""sm7b""#).unwrap();
assert_eq!(model, MicrophoneSimModel::SM7B);
assert_eq!(serde_json::to_string(&model).unwrap(), r#""sm7b""#);
let model = serde_json::from_str::<MicrophoneSimModel>(r#""rca44""#).unwrap();
assert_eq!(model, MicrophoneSimModel::Rca44);
assert_eq!(serde_json::to_string(&model).unwrap(), r#""rca44""#);
let model = serde_json::from_str::<MicrophoneSimModel>(r#""c414_xlii""#).unwrap();
assert_eq!(model, MicrophoneSimModel::C414Xlii);
assert_eq!(serde_json::to_string(&model).unwrap(), r#""c414_xlii""#);
let model = serde_json::from_str::<MicrophoneSimModel>(r#""tlm103""#).unwrap();
assert_eq!(model, MicrophoneSimModel::Tlm103);
assert_eq!(serde_json::to_string(&model).unwrap(), r#""tlm103""#);
}
#[test]
fn supported_models_include_off_u87_tlm103_c414_sm7b_and_rca44() {
assert_eq!(
SUPPORTED_MICROPHONE_SIM_MODELS,
[
MicrophoneSimModel::Off,
MicrophoneSimModel::U87,
MicrophoneSimModel::Tlm103,
MicrophoneSimModel::C414Xlii,
MicrophoneSimModel::SM7B,
MicrophoneSimModel::Rca44,
]
);
}
}