speare 0.4.3

actor-like thin abstraction over tokio::task and flume channels
Documentation
use flume::Sender;

pub trait OnErrTerminate<E>: Send + 'static {
    fn on_err_terminate(&self, err: &E);
}

pub struct NoWatch;

impl<E> OnErrTerminate<E> for NoWatch {
    fn on_err_terminate(&self, _err: &E) {}
}

pub struct WatchFn<F, Msg> {
    pub f: F,
    pub parent_msg_tx: Sender<Msg>,
}

impl<F, E, Msg> OnErrTerminate<E> for WatchFn<F, Msg>
where
    F: Fn(&E) -> Msg + Send + 'static,
    Msg: Send + 'static,
{
    fn on_err_terminate(&self, err: &E) {
        let msg = (self.f)(err);
        let _ = self.parent_msg_tx.send(msg);
    }
}