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(),
}
}
}