snix_build/proto/
grpc_buildservice_wrapper.rs1use crate::buildservice::BuildService;
2use std::ops::Deref;
3use tonic::async_trait;
4
5use super::{BuildRequest, BuildResponse};
6
7pub struct GRPCBuildServiceWrapper<BUILD> {
10 inner: BUILD,
11}
12
13impl<BUILD> GRPCBuildServiceWrapper<BUILD> {
14 pub fn new(build_service: BUILD) -> Self {
15 Self {
16 inner: build_service,
17 }
18 }
19}
20
21#[async_trait]
22impl<BUILD> crate::proto::build_service_server::BuildService for GRPCBuildServiceWrapper<BUILD>
23where
24 BUILD: Deref<Target = dyn BuildService> + Send + Sync + 'static,
25{
26 async fn do_build(
27 &self,
28 request: tonic::Request<BuildRequest>,
29 ) -> Result<tonic::Response<BuildResponse>, tonic::Status> {
30 let request = TryInto::<crate::buildservice::BuildRequest>::try_into(request.into_inner())
31 .map_err(|err| tonic::Status::new(tonic::Code::InvalidArgument, err.to_string()))?;
32 match self.inner.do_build(request).await {
33 Ok(resp) => Ok(tonic::Response::new(resp.into())),
34 Err(e) => Err(tonic::Status::internal(e.to_string())),
35 }
36 }
37}