wavecraft_dev_server/
app.rs1use std::sync::Arc;
7use wavecraft_bridge::{
8 BridgeError, InMemoryParameterHost, ParameterHost, ParameterInfo, ParameterType,
9};
10
11#[derive(Clone)]
13pub struct AppState {
14 host: Arc<InMemoryParameterHost>,
15}
16
17impl AppState {
18 pub fn new() -> Self {
20 let parameters = vec![
21 ParameterInfo {
22 id: "gain".to_string(),
23 name: "Gain".to_string(),
24 param_type: ParameterType::Float,
25 value: 0.7,
26 default: 0.7,
27 unit: Some("dB".to_string()),
28 group: None,
29 },
30 ParameterInfo {
31 id: "bypass".to_string(),
32 name: "Bypass".to_string(),
33 param_type: ParameterType::Bool,
34 value: 0.0,
35 default: 0.0,
36 unit: None,
37 group: None,
38 },
39 ParameterInfo {
40 id: "mix".to_string(),
41 name: "Mix".to_string(),
42 param_type: ParameterType::Float,
43 value: 1.0,
44 default: 1.0,
45 unit: Some("%".to_string()),
46 group: None,
47 },
48 ];
49
50 Self {
51 host: Arc::new(InMemoryParameterHost::new(parameters)),
52 }
53 }
54}
55
56impl Default for AppState {
57 fn default() -> Self {
58 Self::new()
59 }
60}
61
62impl ParameterHost for AppState {
63 fn get_parameter(&self, id: &str) -> Option<ParameterInfo> {
64 self.host.get_parameter(id)
65 }
66
67 fn set_parameter(&self, id: &str, value: f32) -> Result<(), BridgeError> {
68 self.host.set_parameter(id, value)
69 }
70
71 fn get_all_parameters(&self) -> Vec<ParameterInfo> {
72 self.host.get_all_parameters()
73 }
74
75 fn get_meter_frame(&self) -> Option<wavecraft_protocol::MeterFrame> {
76 self.host.get_meter_frame()
77 }
78
79 fn request_resize(&self, _width: u32, _height: u32) -> bool {
80 self.host.request_resize(_width, _height)
81 }
82}
83
84#[cfg(test)]
85mod tests {
86 use super::*;
87
88 #[test]
89 fn test_default_values() {
90 let state = AppState::new();
91
92 let gain = state.get_parameter("gain").unwrap();
93 assert_eq!(gain.value, 0.7);
94
95 let bypass = state.get_parameter("bypass").unwrap();
96 assert_eq!(bypass.value, 0.0);
97
98 let mix = state.get_parameter("mix").unwrap();
99 assert_eq!(mix.value, 1.0);
100 }
101
102 #[test]
103 fn test_set_parameter() {
104 let state = AppState::new();
105
106 state.set_parameter("gain", 0.5).unwrap();
107 let gain = state.get_parameter("gain").unwrap();
108 assert_eq!(gain.value, 0.5);
109 }
110
111 #[test]
112 fn test_set_parameter_out_of_range() {
113 let state = AppState::new();
114
115 let result = state.set_parameter("gain", 1.5);
116 assert!(result.is_err());
117 }
118
119 #[test]
120 fn test_get_all_parameters() {
121 let state = AppState::new();
122
123 let params = state.get_all_parameters();
124 assert_eq!(params.len(), 3);
125 }
126
127 #[test]
128 fn test_unknown_parameter() {
129 let state = AppState::new();
130
131 assert!(state.get_parameter("unknown").is_none());
132 assert!(state.set_parameter("unknown", 0.5).is_err());
133 }
134}