messenger 0.1.0

two way messenger
use futures::sync::mpsc;

pub trait Sender {
    type Item;

    fn send(&self, Self::Item) -> Result<(), Self::Item>;
}

impl<S, T> Sender for Box<S>
where
    S: ?Sized + Sender<Item = T>,
{
    type Item = T;

    #[inline]
    fn send(&self, item: Self::Item) -> Result<(), Self::Item> {
        (&**self).send(item)
    }
}

impl<T> Sender for mpsc::UnboundedSender<T> {
    type Item = T;

    #[inline]
    fn send(&self, item: Self::Item) -> Result<(), Self::Item> {
        match mpsc::UnboundedSender::unbounded_send(self, item) {
            Ok(_) => Ok(()),
            Err(e) => Err(e.into_inner()),
        }
    }
}