codesynapse_serve/
server.rs1use std::net::SocketAddr;
2use std::sync::{Arc, RwLock};
3
4use codesynapse_core::error::{CodeSynapseError, Result};
5use codesynapse_grpc::event_bus::EventBus;
6use codesynapse_grpc::proto::graph_service_server::GraphServiceServer;
7use codesynapse_grpc::service::GraphServiceImpl;
8use codesynapse_grpc::state::GraphState;
9
10pub async fn start_grpc(addr: SocketAddr) -> std::result::Result<(), tonic::transport::Error> {
11 let state = Arc::new(RwLock::new(GraphState::new()));
12 let bus = Arc::new(EventBus::new());
13 let svc = GraphServiceImpl::new(state, bus);
14
15 tonic::transport::Server::builder()
16 .add_service(GraphServiceServer::new(svc))
17 .serve(addr)
18 .await
19}
20
21pub fn start_grpc_blocking(addr: SocketAddr) -> Result<()> {
22 let rt = tokio::runtime::Runtime::new().map_err(CodeSynapseError::Io)?;
23 rt.block_on(start_grpc(addr))
24 .map_err(|e| CodeSynapseError::Other(e.to_string()))
25}