Skip to main content

codesynapse_serve/
server.rs

1use 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}