use super::mpsc::{Shared, drop_sender, error::SendError, push_unbounded};
use crate::sync::Arc;
#[derive(derive_more::Debug)]
pub struct UnboundedSender<T> {
#[debug(skip)]
pub(super) shared: Arc<Shared<T>>,
}
impl<T> UnboundedSender<T> {
pub fn send(&self, value: T) -> Result<(), SendError<T>> {
push_unbounded(&self.shared, value)
}
}
impl<T> Clone for UnboundedSender<T> {
fn clone(&self) -> Self {
self.shared.add_sender();
Self {
shared: Arc::clone(&self.shared),
}
}
}
impl<T> Drop for UnboundedSender<T> {
fn drop(&mut self) {
drop_sender(&self.shared);
}
}