terrazzo-terminal 0.2.7

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

use super::dispatch::remote_fn_dispatch;
use super::response::remote::RemoteResponseStream;
use crate::backend::client_service::ClientServiceImpl;
use crate::backend::protos::terrazzo::remotefn::RemoteFnRequest;
use crate::backend::protos::terrazzo::remotefn::remote_streaming_fn_service_server::RemoteStreamingFnService;

#[async_trait]
impl RemoteStreamingFnService for ClientServiceImpl {
    type CallServerFnStream = super::response::remote::RemoteResponseStream;

    async fn call_server_fn(
        &self,
        request: tonic::Request<RemoteFnRequest>,
    ) -> Result<tonic::Response<Self::CallServerFnStream>, tonic::Status> {
        let mut request = request.into_inner();
        let address = request.address.get_or_insert_default();
        let address = std::mem::take(&mut address.via);
        let response = remote_fn_dispatch(&self.server, &address, request).await?;
        Ok(tonic::Response::new(RemoteResponseStream(response)))
    }
}