aboutsummaryrefslogtreecommitdiffstats
path: root/crates/pseudonyms/src/server.rs
diff options
context:
space:
mode:
authorrtkay123 <dev@kanjala.com>2025-08-10 13:45:11 +0200
committerrtkay123 <dev@kanjala.com>2025-08-10 13:45:11 +0200
commitdbff6fa4e5684d8636fd46ecadfe5874a253bd49 (patch)
tree1039d96c2d02fbc6df1b7b218446c3a8acf1c6b5 /crates/pseudonyms/src/server.rs
parent8cda165f9d3f108c80a4c9ee10c68a28299cb2d1 (diff)
downloadwarden-dbff6fa4e5684d8636fd46ecadfe5874a253bd49.tar.bz2
warden-dbff6fa4e5684d8636fd46ecadfe5874a253bd49.zip
feat(pseudonyms): serve api
Diffstat (limited to 'crates/pseudonyms/src/server.rs')
-rw-r--r--crates/pseudonyms/src/server.rs65
1 files changed, 65 insertions, 0 deletions
diff --git a/crates/pseudonyms/src/server.rs b/crates/pseudonyms/src/server.rs
new file mode 100644
index 0000000..88c46b4
--- /dev/null
+++ b/crates/pseudonyms/src/server.rs
@@ -0,0 +1,65 @@
+mod interceptor;
+use interceptor::MyInterceptor;
+use tokio::signal;
+use warden_core::pseudonyms::transaction_relationship::mutate_pseudonym_server::MutatePseudonymServer;
+
+use tonic::transport::{Server, server::TcpIncoming};
+use tracing::info;
+
+use crate::state::AppHandle;
+
+pub async fn serve(state: AppHandle, tx: tokio::sync::oneshot::Sender<u16>) -> anyhow::Result<()> {
+ let listener = tokio::net::TcpListener::bind(state.addr).await?;
+
+ let socket_addr = listener
+ .local_addr()
+ .expect("should get socket_addr from listener");
+
+ tx.send(socket_addr.port())
+ .expect("port channel to be open");
+
+ info!(addr = ?socket_addr, "starting server");
+
+ Server::builder()
+ .trace_fn(|_| tracing::info_span!(env!("CARGO_PKG_NAME")))
+ // .add_service(QueryUsersServer::new(state.clone()))
+ .add_service(MutatePseudonymServer::with_interceptor(
+ state.clone(),
+ MyInterceptor,
+ ))
+ .serve_with_incoming_shutdown(TcpIncoming::from(listener), shutdown_signal(state))
+ .await?;
+
+ Ok(())
+}
+async fn shutdown_signal(state: AppHandle) {
+ let ctrl_c = async {
+ signal::ctrl_c()
+ .await
+ .expect("failed to install Ctrl+C handler");
+ };
+
+ #[cfg(unix)]
+ let terminate = async {
+ signal::unix::signal(signal::unix::SignalKind::terminate())
+ .expect("failed to install signal handler")
+ .recv()
+ .await;
+ };
+
+ #[cfg(not(unix))]
+ let terminate = std::future::pending::<()>();
+
+ tokio::select! {
+ _ = ctrl_c => {
+ if let Some(ref provider) = state.tracer_provider {
+ let _ = provider.shutdown();
+ }
+ },
+ _ = terminate => {
+ if let Some(ref provider) = state.tracer_provider {
+ let _ = provider.shutdown();
+ }
+ },
+ }
+}