Skip to main content

zk_audio/mic_sim/
models.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
4#[serde(rename_all = "snake_case")]
5pub enum MicrophoneSimModel {
6    #[default]
7    Off,
8    #[serde(rename = "c414_xlii")]
9    C414Xlii,
10    #[serde(rename = "sm7b")]
11    SM7B,
12    #[serde(rename = "rca44")]
13    Rca44,
14    #[serde(rename = "tlm103")]
15    Tlm103,
16    U87,
17}
18
19pub const SUPPORTED_MICROPHONE_SIM_MODELS: [MicrophoneSimModel; 6] = [
20    MicrophoneSimModel::Off,
21    MicrophoneSimModel::U87,
22    MicrophoneSimModel::Tlm103,
23    MicrophoneSimModel::C414Xlii,
24    MicrophoneSimModel::SM7B,
25    MicrophoneSimModel::Rca44,
26];
27
28impl MicrophoneSimModel {
29    pub fn as_str(&self) -> &'static str {
30        match self {
31            Self::Off => "off",
32            Self::C414Xlii => "c414_xlii",
33            Self::SM7B => "sm7b",
34            Self::Rca44 => "rca44",
35            Self::Tlm103 => "tlm103",
36            Self::U87 => "u87",
37        }
38    }
39
40    pub fn label(&self) -> &'static str {
41        match self {
42            Self::Off => "Off",
43            Self::C414Xlii => "AKG C414 XLII",
44            Self::SM7B => "SM7B",
45            Self::Rca44 => "RCA 44",
46            Self::Tlm103 => "Neumann TLM 103",
47            Self::U87 => "U87",
48        }
49    }
50}
51
52#[cfg(test)]
53mod tests {
54    use super::*;
55
56    #[test]
57    fn serde_uses_stable_model_names() {
58        let model = serde_json::from_str::<MicrophoneSimModel>(r#""u87""#).unwrap();
59        assert_eq!(model, MicrophoneSimModel::U87);
60        assert_eq!(serde_json::to_string(&model).unwrap(), r#""u87""#);
61
62        let model = serde_json::from_str::<MicrophoneSimModel>(r#""sm7b""#).unwrap();
63        assert_eq!(model, MicrophoneSimModel::SM7B);
64        assert_eq!(serde_json::to_string(&model).unwrap(), r#""sm7b""#);
65
66        let model = serde_json::from_str::<MicrophoneSimModel>(r#""rca44""#).unwrap();
67        assert_eq!(model, MicrophoneSimModel::Rca44);
68        assert_eq!(serde_json::to_string(&model).unwrap(), r#""rca44""#);
69
70        let model = serde_json::from_str::<MicrophoneSimModel>(r#""c414_xlii""#).unwrap();
71        assert_eq!(model, MicrophoneSimModel::C414Xlii);
72        assert_eq!(serde_json::to_string(&model).unwrap(), r#""c414_xlii""#);
73
74        let model = serde_json::from_str::<MicrophoneSimModel>(r#""tlm103""#).unwrap();
75        assert_eq!(model, MicrophoneSimModel::Tlm103);
76        assert_eq!(serde_json::to_string(&model).unwrap(), r#""tlm103""#);
77    }
78
79    #[test]
80    fn supported_models_include_off_u87_tlm103_c414_sm7b_and_rca44() {
81        assert_eq!(
82            SUPPORTED_MICROPHONE_SIM_MODELS,
83            [
84                MicrophoneSimModel::Off,
85                MicrophoneSimModel::U87,
86                MicrophoneSimModel::Tlm103,
87                MicrophoneSimModel::C414Xlii,
88                MicrophoneSimModel::SM7B,
89                MicrophoneSimModel::Rca44,
90            ]
91        );
92    }
93}