1mod server;
2
3use std::net::SocketAddr;
4use std::sync::Arc;
5use tower_http::trace::TraceLayer;
6use vecgraph_core::GraphStore;
7use vecgraph_proto::graph_store_service_server::GraphStoreServiceServer;
8
9pub use server::GraphStoreServiceImpl;
10
11#[derive(Debug, thiserror::Error)]
12pub enum ServerError {
13 #[error("transport error: {0}")]
14 Transport(#[from] tonic::transport::Error),
15}
16
17pub async fn run_server<S>(store: Arc<S>, addr: SocketAddr) -> Result<(), ServerError>
18where
19 S: GraphStore + Send + Sync + 'static,
20{
21 let graph_store_service = GraphStoreServiceImpl::new(store);
22
23 tracing::info!(%addr, "starting gRPC server");
24
25 tonic::transport::Server::builder()
26 .layer(TraceLayer::new_for_grpc())
27 .add_service(GraphStoreServiceServer::new(graph_store_service))
28 .serve(addr)
29 .await?;
30
31 Ok(())
32}