use std::sync::{Arc, Mutex};
mod receiver;
mod sender;
use super::{
DEFAULT_MAX_ITEM_SIZE,
interlock::{Interlock, Location},
};
pub use receiver::{Receiver, RecvError};
pub use sender::{SendError, SendErrorKind, Sender};
pub fn channel<T, Codec>() -> (Sender<T, Codec>, Receiver<T, Codec>) {
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 { sender: Location::Local, receiver: Location::Local }));
let sender = Sender {
sender: None,
sender_rx,
receiver_tx: Some(receiver_tx),
interlock: interlock.clone(),
max_item_size: DEFAULT_MAX_ITEM_SIZE,
};
let receiver = Receiver {
receiver: None,
sender_tx: Some(sender_tx),
receiver_rx,
interlock,
max_item_size: DEFAULT_MAX_ITEM_SIZE,
};
(sender, receiver)
}