use std::sync::{Arc, Mutex};
mod receiver;
mod sender;
pub use receiver::Receiver;
pub use sender::Sender;
use super::interlock::{Interlock, Location};
pub fn channel() -> (Sender, Receiver) {
let (sender_tx, sender_rx) = tokio::sync::mpsc::unbounded_channel();
let (receiver_tx, receiver_rx) = tokio::sync::mpsc::unbounded_channel();
let interlock = Arc::new(Mutex::new(Interlock::new()));
let sender = Sender {
sender: None,
sender_rx,
receiver_tx: Some(receiver_tx),
interlock: interlock.clone(),
successor_tx: std::sync::Mutex::new(None),
};
let receiver = Receiver {
receiver: None,
sender_tx: Some(sender_tx),
receiver_rx,
interlock,
successor_tx: std::sync::Mutex::new(None),
};
(sender, receiver)
}