zk_audio/mic_sim/
models.rs1use 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}