maolan_engine/hw/
traits.rs1use crate::message::HwMidiEvent;
2
3pub trait HwWorkerDriver {
4 fn cycle_samples(&self) -> usize;
5 fn sample_rate(&self) -> i32;
6 fn run_cycle_for_worker(&mut self) -> Result<(), String>;
7 fn run_assist_step_for_worker(&mut self) -> Result<bool, String>;
8}
9
10pub trait HwMidiHub {
11 fn read_events_into(&mut self, out: &mut Vec<HwMidiEvent>);
12 fn write_events(&mut self, events: &[HwMidiEvent]);
13}
14
15pub trait HwDevice {
16 fn input_channels(&self) -> usize;
17 fn output_channels(&self) -> usize;
18 fn sample_rate(&self) -> i32;
19 fn latency_ranges(&self) -> ((usize, usize), (usize, usize));
20}
21
22#[macro_export]
23macro_rules! impl_hw_worker_traits_for_driver {
24 ($driver:ty) => {
25 impl $crate::hw::traits::HwWorkerDriver for $driver {
26 fn cycle_samples(&self) -> usize {
27 self.cycle_samples()
28 }
29
30 fn sample_rate(&self) -> i32 {
31 self.sample_rate()
32 }
33
34 fn run_cycle_for_worker(&mut self) -> Result<(), String> {
35 self.channel().run_cycle().map_err(|e| e.to_string())
36 }
37
38 fn run_assist_step_for_worker(&mut self) -> Result<bool, String> {
39 self.channel().run_assist_step().map_err(|e| e.to_string())
40 }
41 }
42 };
43}
44
45#[macro_export]
46macro_rules! impl_hw_device_for_driver {
47 ($driver:ty) => {
48 impl $crate::hw::traits::HwDevice for $driver {
49 fn input_channels(&self) -> usize {
50 self.input_channels()
51 }
52
53 fn output_channels(&self) -> usize {
54 self.output_channels()
55 }
56
57 fn sample_rate(&self) -> i32 {
58 self.sample_rate()
59 }
60
61 fn latency_ranges(&self) -> ((usize, usize), (usize, usize)) {
62 self.latency_ranges()
63 }
64 }
65 };
66}
67
68#[macro_export]
69macro_rules! impl_hw_midi_hub_traits {
70 ($hub:ty) => {
71 impl $crate::hw::traits::HwMidiHub for $hub {
72 fn read_events_into(&mut self, out: &mut Vec<$crate::message::HwMidiEvent>) {
73 <$hub>::read_events_into(self, out);
74 }
75
76 fn write_events(&mut self, events: &[$crate::message::HwMidiEvent]) {
77 <$hub>::write_events(self, events);
78 }
79 }
80 };
81}