feat(body): require Sync when wrapping a dynamic Stream
This commit is contained in:
@@ -41,7 +41,11 @@ enum Kind {
|
||||
content_length: Option<u64>,
|
||||
recv: h2::RecvStream,
|
||||
},
|
||||
Wrapped(Pin<Box<dyn Stream<Item = Result<Chunk, Box<dyn StdError + Send + Sync>>> + Send>>),
|
||||
// NOTE: This requires `Sync` because of how easy it is to use `await`
|
||||
// while a borrow of a `Request<Body>` exists.
|
||||
//
|
||||
// See https://github.com/rust-lang/rust/issues/57017
|
||||
Wrapped(Pin<Box<dyn Stream<Item = Result<Chunk, Box<dyn StdError + Send + Sync>>> + Send + Sync>>),
|
||||
}
|
||||
|
||||
struct Extra {
|
||||
@@ -142,7 +146,7 @@ impl Body {
|
||||
/// ```
|
||||
pub fn wrap_stream<S>(stream: S) -> Body
|
||||
where
|
||||
S: TryStream + Send + 'static,
|
||||
S: TryStream + Send + Sync + 'static,
|
||||
S::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||
Chunk: From<S::Ok>,
|
||||
{
|
||||
@@ -411,13 +415,13 @@ impl Stream for Body {
|
||||
|
||||
|
||||
impl
|
||||
From<Box<dyn Stream<Item = Result<Chunk, Box<dyn StdError + Send + Sync>>> + Send>>
|
||||
From<Box<dyn Stream<Item = Result<Chunk, Box<dyn StdError + Send + Sync>>> + Send + Sync>>
|
||||
for Body
|
||||
{
|
||||
#[inline]
|
||||
fn from(
|
||||
stream: Box<
|
||||
dyn Stream<Item = Result<Chunk, Box<dyn StdError + Send + Sync>>> + Send,
|
||||
dyn Stream<Item = Result<Chunk, Box<dyn StdError + Send + Sync>>> + Send + Sync,
|
||||
>,
|
||||
) -> Body {
|
||||
Body::new(Kind::Wrapped(stream.into()))
|
||||
|
||||
Reference in New Issue
Block a user