1pub use crossbeam_channel::{
3 Receiver, RecvError, RecvTimeoutError, Select, SendError, Sender, TrySendError, after, bounded,
4 select, tick, unbounded,
5};
6
7pub mod oneshot {
8 use std::sync::mpsc::sync_channel;
11 pub use std::sync::mpsc::{Receiver, RecvError, SyncSender as Sender};
12
13 pub fn channel<T>() -> (Sender<T>, Receiver<T>) {
15 sync_channel(1)
16 }
17}
18
19pub const SIGNAL_CHANNEL_SIZE: usize = 1;
21pub const DEFAULT_CHANNEL_SIZE: usize = 32;
23
24pub struct Request<A, R> {
26 pub responder: oneshot::Sender<R>,
28 pub arguments: A,
30}
31
32impl<A, R> Request<A, R> {
33 pub fn call(sender: &Sender<Request<A, R>>, arguments: A) -> Option<R> {
35 let (responder, response) = oneshot::channel();
36 let _ = sender.send(Request {
37 responder,
38 arguments,
39 });
40 response.recv().ok()
41 }
42}