terrazzo-terminal 0.2.8

A simple web-based terminal emulator built on Terrazzo.
use tonic::Request;
use tonic::Response;
use tonic::Streaming;
use tonic::async_trait;

use super::bind::BindStream;
use crate::backend::client_service::ClientServiceImpl;
use crate::backend::client_service::port_forward_service::stream::GrpcStream;
use crate::backend::protos::terrazzo::portforward::PortForwardDataRequest;
use crate::backend::protos::terrazzo::portforward::PortForwardEndpoint;
use crate::backend::protos::terrazzo::portforward::port_forward_service_server::PortForwardService;

#[async_trait]
impl PortForwardService for ClientServiceImpl {
    type BindStream = BindStream;

    async fn bind(
        &self,
        requests: Request<Streaming<PortForwardEndpoint>>,
    ) -> Result<Response<BindStream>, tonic::Status> {
        let upload_stream = super::bind::dispatch(&self.server, requests.into_inner()).await?;
        Ok(Response::new(upload_stream))
    }

    type DownloadStream = GrpcStream;

    async fn download(
        &self,
        requests: Request<tonic::Streaming<PortForwardDataRequest>>,
    ) -> Result<Response<GrpcStream>, tonic::Status> {
        let download_stream =
            super::download::download(&self.server, requests.into_inner()).await?;
        Ok(Response::new(download_stream))
    }

    type UploadStream = GrpcStream;

    async fn upload(
        &self,
        requests: Request<tonic::Streaming<PortForwardDataRequest>>,
    ) -> Result<Response<GrpcStream>, tonic::Status> {
        let upload_stream = super::upload::upload(&self.server, requests.into_inner()).await?;
        Ok(Response::new(upload_stream))
    }
}