use crate::tso::TsoOracle; use flaredb_proto::pdpb::tso_server::Tso; use flaredb_proto::pdpb::{TsoRequest, TsoResponse}; use std::sync::Arc; use tonic::{Request, Response, Status}; pub struct TsoServiceImpl { oracle: Arc, } impl TsoServiceImpl { pub fn new(oracle: Arc) -> Self { Self { oracle } } } #[tonic::async_trait] impl Tso for TsoServiceImpl { async fn get_timestamp( &self, request: Request, ) -> Result, Status> { let req = request.into_inner(); let count = req.count; let ts = self.oracle.get_timestamp(count); Ok(Response::new(TsoResponse { timestamp: ts, count, })) } }