servo_media_audio/
macros.rs1#[macro_export]
6macro_rules! make_message_handler(
7 (
8 $(
9 $node:ident: $handler:ident
10 ),+
11 ) => (
12 fn message_specific(&mut self, msg: $crate::node::AudioNodeMessage, sample_rate: f32) {
13 match msg {
14 $($crate::node::AudioNodeMessage::$node(m) => self.$handler(m, sample_rate)),+,
15 _ => (),
16 }
17 }
18 );
19);
20
21#[macro_export]
22macro_rules! make_state_change(
23 ($fn_name:ident, $state:ident, $render_msg:ident) => (
24 pub fn $fn_name(&self) -> StateChangeResult {
25 self.state.set(ProcessingState::$state);
26 let (tx, rx) = mpsc::channel();
27 let _ = self.sender.send(AudioRenderThreadMsg::$render_msg(tx));
28 rx.recv().unwrap()
29 }
30 );
31);
32
33#[macro_export]
34macro_rules! make_render_thread_state_change(
35 ($fn_name:ident, $state:ident, $sink_method:ident) => (
36 fn $fn_name(&mut self) -> StateChangeResult {
37 if self.state == ProcessingState::$state {
38 return Some(());
39 }
40 self.state = ProcessingState::$state;
41 self.sink.$sink_method().ok()
42 }
43 );
44);