use serde::{Deserialize, Serialize};
use crate::{RemoteSend, codec};
mod receiver;
mod sender;
pub use receiver::{Receiver, ReceiverStream, RecvError, StreamError, TryRecvError};
pub use sender::{Broadcasting, SendError, Sender, Sending};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub(crate) enum BroadcastMsg<T> {
Value(T),
Lagged,
}
pub fn channel<T, Codec, const RECEIVE_BUFFER: usize>(
send_buffer: usize,
) -> (Sender<T, Codec>, Receiver<T, Codec, RECEIVE_BUFFER>)
where
T: RemoteSend + Clone,
Codec: codec::Codec,
{
let sender = Sender::new();
let receiver = sender.subscribe(send_buffer);
(sender, receiver)
}