servo_media_audio/
macros.rs

1#[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);