Skip to main content

vecgraph_server/
lib.rs

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}