use super::error::Result;
use super::mpmc::{MpmcChannel, MpmcReceiver, MpmcSender};
use super::spsc::{SpscChannel, SpscReceiver, SpscSender};
pub struct Select;
impl Select {
pub fn try_recv<T>(receivers: &mut [&mut dyn FnMut() -> Result<T>]) -> Option<(usize, T)> {
for (idx, recv) in receivers.iter_mut().enumerate() {
if let Ok(value) = recv() {
return Some((idx, value));
}
}
None
}
}
pub fn spsc<T>(capacity: usize) -> (SpscSender<T>, SpscReceiver<T>) {
SpscChannel::channel(capacity)
}
pub fn mpmc<T>(capacity: usize) -> (MpmcSender<T>, MpmcReceiver<T>) {
MpmcChannel::channel(Some(capacity))
}
pub fn unbounded<T>() -> (MpmcSender<T>, MpmcReceiver<T>) {
MpmcChannel::channel(None)
}