use super::{ExtractError, FromMessageRequest, MessageRequest, Payload};
pub struct StreamingBody {
stream: crate::request::RequestBodyStream,
}
impl StreamingBody {
#[must_use]
pub fn new(stream: crate::request::RequestBodyStream) -> Self { Self { stream } }
#[must_use]
pub fn into_stream(self) -> crate::request::RequestBodyStream { self.stream }
#[must_use]
pub fn into_reader(self) -> crate::request::RequestBodyReader {
crate::request::RequestBodyReader::new(self.stream)
}
}
impl std::fmt::Debug for StreamingBody {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("StreamingBody").finish_non_exhaustive()
}
}
impl FromMessageRequest for StreamingBody {
type Error = ExtractError;
fn from_message_request(
req: &MessageRequest,
_payload: &mut Payload<'_>,
) -> Result<Self, Self::Error> {
req.take_body_stream()
.map(Self::new)
.ok_or(ExtractError::MissingBodyStream)
}
}