snix_build/buildservice/
grpc.rs

1use 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}