use std::sync::mpsc::{channel,Sender,Receiver,SendError}; #[derive(Clone)] pub(crate) struct EmittingSender { sender : Sender, emit : E, } impl EmittingSender{ pub(crate) fn emitting_channel(emit : E) -> (Self, Receiver) { let (sender,r) = channel(); (EmittingSender { sender, emit }, r) } pub(crate) fn send(&self, t: MT) -> Result<(), SendError> { //first send, then notify. self.sender.send(t).map(|_| (self.emit)()) } }