1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#![doc = include_str!("../README.md")]
mod config;
mod engine;
pub use crate::config::Config;
pub mod grpc;
/// Tokio signal handler that will wait for a user to press CTRL+C.
/// This signal handler can be used in our [`axum::Server`] method `with_graceful_shutdown`
/// and in our [`tonic::transport::Server`] method `serve_with_shutdown`.
///
/// # Examples
///
/// ## tonic
/// ```
/// use svc_pricing::shutdown_signal;
/// pub async fn server() {
/// let (_, health_service) = tonic_health::server::health_reporter();
/// tonic::transport::Server::builder()
/// .add_service(health_service)
/// .serve_with_shutdown("0.0.0.0:50051".parse().unwrap(), shutdown_signal("grpc", None));
/// }
/// ```
///
/// ## using a shutdown signal channel
/// ```
/// use svc_pricing::shutdown_signal;
/// pub async fn server() {
/// let (shutdown_tx, shutdown_rx) = tokio::sync::oneshot::channel::<()>();
/// let (_, health_service) = tonic_health::server::health_reporter();
/// tokio::spawn(async move {
/// tonic::transport::Server::builder()
/// .add_service(health_service)
/// .serve_with_shutdown("0.0.0.0:50051".parse().unwrap(), shutdown_signal("grpc", Some(shutdown_rx)))
/// .await;
/// });
///
/// // Send server the shutdown request
/// shutdown_tx.send(()).expect("Could not stop server.");
/// }
/// ```
pub async fn shutdown_signal(
server: &str,
shutdown_rx: Option<tokio::sync::oneshot::Receiver<()>>,
) {
match shutdown_rx {
Some(receiver) => receiver
.await
.expect("(shutdown_signal) expect tokio signal oneshot Receiver"),
None => tokio::signal::ctrl_c()
.await
.expect("(shutdown_signal) expect tokio signal ctrl-c"),
}
log::warn!("(shutdown_signal) server shutdown for [{}]", server);
}