d3_core/channel/
machine_channel.rs1use self::{connection::*, receiver::*, sender::*};
2use super::*;
3
4pub static CHANNEL_ID: AtomicUsize = AtomicUsize::new(1);
14
15pub fn channel_with_capacity<T>(capacity: usize) -> (Sender<T>, Receiver<T>)
17where
18 T: MachineImpl,
19{
20 let (s, r) = crossbeam::channel::bounded::<T>(capacity);
21 wrap(s, r)
22}
23
24pub fn channel<T>() -> (Sender<T>, Receiver<T>)
27where
28 T: MachineImpl,
29{
30 let (s, r) = crossbeam::channel::unbounded::<T>();
31 wrap(s, r)
32}
33
34fn wrap<T>(sender: crossbeam::channel::Sender<T>, receiver: crossbeam::channel::Receiver<T>) -> (Sender<T>, Receiver<T>)
35where
36 T: MachineImpl,
37{
38 let channel_id = CHANNEL_ID.fetch_add(1, Ordering::SeqCst);
39 let (sc, rc) = Connection::new();
40 (
41 wrap_sender::<T>(sender, channel_id, sc),
42 wrap_receiver::<T>(receiver, channel_id, rc),
43 )
44}