From 143fe969eb6225c2aa8694930114103f1d4f0c9c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 17 Mar 2025 20:46:23 +0100 Subject: h3 ground work --- src/h3_support.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/h3_support.rs (limited to 'src/h3_support.rs') diff --git a/src/h3_support.rs b/src/h3_support.rs new file mode 100644 index 0000000..56286db --- /dev/null +++ b/src/h3_support.rs @@ -0,0 +1,30 @@ +use crate::error::ServiceError; +use bytes::{Buf, Bytes}; +use h3::server::RequestStream; +use h3_quinn::RecvStream; +use hyper::body::{Body, Frame}; +use std::{ + pin::Pin, + task::{Context, Poll}, +}; + +pub struct H3RequestBody(pub RequestStream); + +impl Body for H3RequestBody { + type Data = Bytes; + type Error = ServiceError; + + fn poll_frame( + mut self: Pin<&mut Self>, + cx: &mut Context<'_>, + ) -> Poll, Self::Error>>> { + match self.0.poll_recv_data(cx) { + Poll::Ready(Ok(Some(mut f))) => { + Poll::Ready(Some(Ok(Frame::data(f.copy_to_bytes(f.remaining()))))) + } + Poll::Ready(Ok(None)) => Poll::Ready(None), + Poll::Ready(Err(e)) => Poll::Ready(Some(Err(ServiceError::H3(e)))), + Poll::Pending => Poll::Pending, + } + } +} -- cgit v1.2.3-70-g09d2