snix_build/buildservice/
grpc.rs1use tonic::{async_trait, transport::Channel};
2
3use crate::buildservice::BuildRequest;
4use crate::proto::{self, build_service_client::BuildServiceClient};
5
6use super::{BuildResult, BuildService};
7
8pub struct GRPCBuildService {
9 client: BuildServiceClient<Channel>,
10}
11
12impl GRPCBuildService {
13 #[allow(dead_code)]
14 pub fn from_client(client: BuildServiceClient<Channel>) -> Self {
15 Self { client }
16 }
17}
18
19#[async_trait]
20impl BuildService for GRPCBuildService {
21 async fn do_build(&self, request: BuildRequest) -> std::io::Result<BuildResult> {
22 let mut client = self.client.clone();
23 let resp = client
24 .do_build(Into::<proto::BuildRequest>::into(request))
25 .await
26 .map_err(std::io::Error::other)?
27 .into_inner();
28
29 Ok::<BuildResult, _>(resp.try_into().map_err(std::io::Error::other)?)
30 }
31}