,
mut action_rx: UnboundedReceiver,
- mut interrupt_rx: broadcast::Receiver
+where
+ P: Clone + Send + Sync + Debug,
+{
+ OsSignal,
+ User { payload: Option },
}
#[derive(Debug, Clone)]
-pub struct Terminator {
- interrupt_tx: broadcast::Sender
+where
+ P: Clone + Send + Sync + Debug,
+{
+ interrupt_tx: broadcast::Sender Terminator
+where
+ P: Clone + Send + Sync + Debug + 'static,
+{
+ pub fn new(interrupt_tx: broadcast::Sender ) -> anyhow::Result<()> {
self.interrupt_tx.send(interrupted)?;
Ok(())
@@ -26,19 +37,25 @@ impl Terminator {
}
#[cfg(unix)]
-async fn terminate_by_unix_signal(mut terminator: Terminator) {
+async fn terminate_by_unix_signal (mut terminator: Terminator )
+where
+ P: Clone + Send + Sync + Debug + 'static,
+{
let mut interrupt_signal = signal(tokio::signal::unix::SignalKind::interrupt())
.expect("failed to create interrupt signal stream");
interrupt_signal.recv().await;
terminator
- .terminate(Interrupted::OsSigInt)
+ .terminate(Interrupted::OsSignal)
.expect("failed to send interrupt signal");
}
// create a broadcast channel for retrieving the application kill signal
-pub fn create_termination() -> (Terminator, broadcast::Receiver () -> (Terminator , broadcast::Receiver {
- fn render + Render<()>>(
+ pub async fn main_loop(
self,
mut state_rx: UnboundedReceiver,
- mut interrupt_rx: broadcast::Receiver + Render<()>,
+ P: Clone + Send + Sync + Debug,
+ {
let mut terminal = setup_terminal()?;
let mut ticker = tokio::time::interval(RENDERING_TICK_RATE);
let mut events_rx = events();
@@ -54,7 +60,7 @@ impl Frontend {
};
// let mut last_frame: Option {
}
pub trait Render Widget for Shortcuts {
}
impl Render(&self, serializer: S) -> Result