//! Streaming bodies for Requests and Responses //! //! For both [Clients](crate::client) and [Servers](crate::server), requests and //! responses use streaming bodies, instead of complete buffering. This //! allows applications to not use memory they don't need, and allows exerting //! back-pressure on connections by only reading when asked. //! //! There are two pieces to this in hyper: //! //! - **The [`HttpBody`](HttpBody) trait** describes all possible bodies. //! hyper allows any body type that implements `HttpBody`, allowing //! applications to have fine-grained control over their streaming. //! - **The [`Body`](Body) concrete type**, which is an implementation of //! `HttpBody`, and returned by hyper as a "receive stream" (so, for server //! requests and client responses). It is also a decent default implementation //! if you don't have very custom needs of your send streams.
pubuse bytes::{Buf, Bytes}; pubuse http_body::Body as HttpBody; pubuse http_body::SizeHint;
mod aggregate; mod body; mod length; mod to_bytes;
/// An optimization to try to take a full body if immediately available. /// /// This is currently limited to *only* `hyper::Body`s. #[cfg(feature = "http1")] pub(crate) fn take_full_data<T: HttpBody + 'static>(body: &mut T) -> Option<T::Data> { use std::any::{Any, TypeId};
// This static type check can be optimized at compile-time. if TypeId::of::<T>() == TypeId::of::<Body>() { letmut full = (body as &mutdyn Any)
.downcast_mut::<Body>()
.expect("must be Body")
.take_full_data(); // This second cast is required to make the type system happy. // Without it, the compiler cannot reason that the type is actually // `T::Data`. Oh wells. // // It's still a measurable win!
(&mut full as &mutdyn Any)
.downcast_mut::<Option<T::Data>>()
.expect("must be T::Data")
.take()
} else {
None
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.