1use std::future::Future;
2
3use mm1_common::types::{Never, StdError};
4
5pub trait Quit: Send {
6 fn quit<E>(&mut self, result: Result<(), E>) -> impl Future<Output = Never> + Send
7 where
8 E: StdError + Send + Sync + 'static,
9 {
10 async move {
11 match result {
12 Ok(()) => self.quit_ok().await,
13 Err(reason) => self.quit_err(reason).await,
14 }
15 }
16 }
17
18 fn quit_ok(&mut self) -> impl Future<Output = Never> + Send;
19
20 fn quit_err<E>(&mut self, reason: E) -> impl Future<Output = Never> + Send
21 where
22 E: StdError + Send + Sync + 'static;
23}