use std::io;
use std::sync::Arc;
use foundation_core::valtron::{PipeReceiver, PipeSender};
use foundation_http::shared::context::ContextBag;
use foundation_http::native::serve::{BoxFuture, H2Serve};
use foundation_netio::http2::types::{H2Frame, H2IncomingFrame, SimpleIncomingRequestHeader};
use crate::shared::router::ConnectRpcHandler;
pub struct ConnectRpcServeH2 {
handler: Arc<ConnectRpcHandler>,
}
impl ConnectRpcServeH2 {
#[must_use]
pub fn new(handler: ConnectRpcHandler) -> Self {
Self {
handler: Arc::new(handler),
}
}
}
impl H2Serve for ConnectRpcServeH2 {
fn serve_h2(
&self,
bag: Arc<ContextBag>,
header: SimpleIncomingRequestHeader,
body: PipeReceiver<H2IncomingFrame>,
tx: PipeSender<H2Frame>,
) -> BoxFuture<'static, io::Result<()>> {
self.handler.dispatch_h2(bag, header, body, tx)
}
}