terrazzo-terminal 0.2.7

A simple web-based terminal emulator built on Terrazzo.
use pin_project::pin_project;
use server_fn::BoxedStream;
use server_fn::ServerFnError;
use tonic::Streaming;

use crate::backend::protos::terrazzo::remotefn::ServerFnResponse as ServerFnResponseProto;

pub mod local;
pub mod remote;

#[pin_project(project = HybridResponseStreamProj)]
pub enum HybridResponseStream {
    Local(BoxedStream<String, ServerFnError>),
    Remote(#[pin] Box<Streaming<ServerFnResponseProto>>),
}

impl From<HybridResponseStream> for BoxedStream<String, ServerFnError> {
    fn from(response_stream: HybridResponseStream) -> Self {
        match response_stream {
            HybridResponseStream::Local(local_stream) => local_stream,
            remote_stream => self::local::LocalResponseStream(remote_stream).into(),
        }
    }
}