46 lines
1.2 KiB
Rust
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(())
|
|
}
|