2024-05-11 23:23:00 +02:00
|
|
|
use hyperlog_protos::hyperlog::{
|
|
|
|
graph_server::{Graph, GraphServer},
|
|
|
|
*,
|
|
|
|
};
|
2024-05-12 21:07:21 +02:00
|
|
|
use std::{collections::HashMap, net::SocketAddr};
|
2024-05-11 23:23:00 +02:00
|
|
|
use tonic::{transport, Response};
|
|
|
|
|
|
|
|
use crate::{
|
|
|
|
querier::{Querier, QuerierExt},
|
|
|
|
state::SharedState,
|
|
|
|
};
|
|
|
|
|
2024-05-12 14:35:35 +02:00
|
|
|
#[allow(dead_code)]
|
2024-05-11 23:23:00 +02:00
|
|
|
pub struct Server {
|
|
|
|
querier: Querier,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Server {
|
|
|
|
pub fn new(querier: Querier) -> Self {
|
|
|
|
Self { querier }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[tonic::async_trait]
|
|
|
|
impl Graph for Server {
|
|
|
|
async fn get(
|
|
|
|
&self,
|
|
|
|
request: tonic::Request<GetRequest>,
|
|
|
|
) -> std::result::Result<tonic::Response<GetReply>, tonic::Status> {
|
|
|
|
let msg = request.get_ref();
|
|
|
|
|
|
|
|
tracing::trace!("get: req({:?})", msg);
|
|
|
|
|
|
|
|
Ok(Response::new(GetReply {
|
2024-05-12 12:58:54 +02:00
|
|
|
item: Some(GraphItem {
|
2024-05-12 21:07:21 +02:00
|
|
|
path: "kjuulh".into(),
|
|
|
|
contents: Some(graph_item::Contents::User(UserGraphItem {
|
|
|
|
items: HashMap::from([(
|
|
|
|
"some".to_string(),
|
|
|
|
GraphItem {
|
|
|
|
path: "some".into(),
|
|
|
|
contents: Some(graph_item::Contents::Item(ItemGraphItem {
|
|
|
|
title: "some-title".into(),
|
|
|
|
description: "some-description".into(),
|
|
|
|
item_state: Some(item_graph_item::ItemState::NotDone(
|
|
|
|
ItemStateNotDone {},
|
|
|
|
)),
|
|
|
|
})),
|
|
|
|
},
|
|
|
|
)]),
|
2024-05-12 12:58:54 +02:00
|
|
|
})),
|
|
|
|
}),
|
2024-05-11 23:23:00 +02:00
|
|
|
}))
|
|
|
|
}
|
2024-05-12 21:07:21 +02:00
|
|
|
|
|
|
|
async fn get_available_roots(
|
|
|
|
&self,
|
|
|
|
request: tonic::Request<GetAvailableRootsRequest>,
|
|
|
|
) -> std::result::Result<tonic::Response<GetAvailableRootsResponse>, tonic::Status> {
|
|
|
|
let req = request.into_inner();
|
|
|
|
tracing::trace!("get available roots: req({:?})", req);
|
|
|
|
|
|
|
|
Ok(Response::new(GetAvailableRootsResponse {
|
|
|
|
roots: vec!["kjuulh".into()],
|
|
|
|
}))
|
|
|
|
}
|
2024-05-12 22:24:37 +02:00
|
|
|
|
|
|
|
async fn create_section(
|
|
|
|
&self,
|
|
|
|
request: tonic::Request<CreateSectionRequest>,
|
|
|
|
) -> std::result::Result<tonic::Response<CreateSectionResponse>, tonic::Status> {
|
|
|
|
let req = request.into_inner();
|
|
|
|
tracing::trace!("create section: req({:?})", req);
|
|
|
|
|
|
|
|
Ok(Response::new(CreateSectionResponse {}))
|
|
|
|
}
|
2024-05-11 23:23:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub trait ServerExt {
|
|
|
|
fn grpc_server(&self) -> Server;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ServerExt for SharedState {
|
|
|
|
fn grpc_server(&self) -> Server {
|
|
|
|
Server::new(self.querier())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub async fn serve(state: &SharedState, host: SocketAddr) -> anyhow::Result<()> {
|
|
|
|
tracing::info!("listening on {}", host);
|
|
|
|
|
|
|
|
let graph_server = state.grpc_server();
|
|
|
|
|
|
|
|
transport::Server::builder()
|
|
|
|
.add_service(GraphServer::new(graph_server))
|
|
|
|
.serve(host)
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|