rustler-core/grpc/src/server.rs
2024-04-18 05:58:07 -03:00

46 lines
1.2 KiB
Rust

use {
crate::services,
entities::{market, sea_orm::DatabaseConnection, ticker},
eyre::Result,
lool::{cli::stylize::Stylize, logger::info},
std::{net::SocketAddr, sync::Arc},
tonic::transport::Server,
};
const RUSTLER_GRPC_API_ADDR: &str = "RUSTLER_GRPC_API_ADDR";
/// Starts the gRPC server
pub async fn start(conn: DatabaseConnection) -> Result<()> {
fn get_default_addr() -> String {
let addr = "0.0.0.0:50051";
info!(
"`{}` not set, using default {}",
RUSTLER_GRPC_API_ADDR.italic(),
addr.green()
);
addr.to_owned()
}
let addr: SocketAddr =
std::env::var(RUSTLER_GRPC_API_ADDR).unwrap_or_else(|_| get_default_addr()).parse()?;
let market_db = market::Service::new(conn.clone()).await;
let ticker_db = ticker::Service::new(conn.clone()).await;
let market_grpc = services::market::GrpcServer { svc: market_db };
let ticker_grpc = services::ticker::GrpcServer { svc: ticker_db };
info!(
"🎉 gRPC server listening on {}",
addr.clone().to_string().green()
);
Server::builder()
.add_service(market_grpc.svc())
.add_service(ticker_grpc.svc())
.serve(addr)
.await?;
Ok(())
}