engula_cooperator/
server.rs1use engula_apis::*;
16use engula_supervisor::Supervisor;
17use tonic::{Request, Response, Status};
18
19use crate::{apis::*, Universe};
20
21#[derive(Clone)]
22pub struct Server {
23 uv: Universe,
24}
25
26impl Server {
27 pub fn new(supervisor: Supervisor) -> Self {
28 Self {
29 uv: Universe::new(supervisor),
30 }
31 }
32
33 pub fn into_service(self) -> cooperator_server::CooperatorServer<Self> {
34 cooperator_server::CooperatorServer::new(self)
35 }
36}
37
38#[tonic::async_trait]
39impl cooperator_server::Cooperator for Server {
40 async fn txn(&self, req: Request<TxnRequest>) -> Result<Response<TxnResponse>, Status> {
41 let req = req.into_inner();
42 let res = self.uv.execute(req).await?;
43 Ok(Response::new(res))
44 }
45}