bayard 0.9.0

A distributed search server.
use signal_hook::{
    consts::signal::{SIGINT, SIGQUIT, SIGTERM},
    iterator::{exfiltrator::WithOrigin, SignalsInfo},
};
use tokio::sync::watch::Sender;
use tracing::{debug, error, info};

pub fn handle_signals(tx_signal: Sender<()>) {
    info!("Starting signal handler.");
    let mut signals = SignalsInfo::<WithOrigin>::new(&[SIGINT, SIGTERM, SIGQUIT])
        .expect("Failed to create signals info");
    for signal_info in &mut signals {
        debug!(?signal_info, "Received signal.");
        match signal_info.signal {
            SIGINT | SIGTERM | SIGQUIT => {
                if let Err(error) = tx_signal.send(()) {
                    error!(?error, "Failed to send stop signal.");
                }
                break;
            }
            _ => {}
        }
    }
}