o402 0.1.3

OpenAI-compatible gateway, paid with x402.
//! SIGINT / SIGTERM. Never `process::exit`.

/// Resolves on the first CTRL+C or SIGTERM.
pub(crate) async fn signal() {
    #[cfg(unix)]
    unix_signal().await;
    #[cfg(not(unix))]
    wait_ctrl_c().await;
}

#[cfg(unix)]
async fn unix_signal() {
    let mut sigterm = match tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate())
    {
        Ok(signal) => signal,
        Err(error) => {
            tracing::error!(%error, "failed to install SIGTERM handler");
            wait_ctrl_c().await;
            return;
        }
    };
    tokio::select! {
        () = wait_ctrl_c() => {}
        _ = sigterm.recv() => {}
    }
}

async fn wait_ctrl_c() {
    if let Err(error) = tokio::signal::ctrl_c().await {
        tracing::error!(%error, "CTRL+C handler failed");
    }
}