tangram_core_rs 0.4.1

A framework for real-time analysis of ADS-B and Mode S surveillance data
Documentation
use tokio::sync::watch;
use tokio::task::JoinHandle;

#[derive(Debug)]
pub struct Shutdown {
    sender: watch::Sender<bool>,
}

impl Shutdown {
    pub fn new() -> (Self, watch::Receiver<bool>) {
        let (sender, receiver) = watch::channel(false);
        (Self { sender }, receiver)
    }

    pub fn subscribe(&self) -> watch::Receiver<bool> {
        self.sender.subscribe()
    }

    pub fn trigger(&self) {
        let _ = self.sender.send(true);
    }
}

impl Drop for Shutdown {
    fn drop(&mut self) {
        let _ = self.sender.send(true);
    }
}

pub async fn abort_and_await<T>(handle: &mut JoinHandle<T>) {
    if handle.is_finished() {
        return;
    }
    handle.abort();
    let _ = handle.await;
}