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