diff --git a/futures-core/src/future/mod.rs b/futures-core/src/future/mod.rs index 110a8289fe..2d4bf986e1 100644 --- a/futures-core/src/future/mod.rs +++ b/futures-core/src/future/mod.rs @@ -47,9 +47,17 @@ where } } +mod private_try_future { + use super::Future; + + pub trait Sealed {} + + impl Sealed for F where F: ?Sized + Future> {} +} + /// A convenience for futures that return `Result` values that includes /// a variety of adapters tailored to such futures. -pub trait TryFuture { +pub trait TryFuture: private_try_future::Sealed { /// The type of successful values yielded by this future type Ok; diff --git a/futures-core/src/stream.rs b/futures-core/src/stream.rs index 9177454573..92685ac3f6 100644 --- a/futures-core/src/stream.rs +++ b/futures-core/src/stream.rs @@ -112,9 +112,17 @@ where } } +mod private_try_stream { + use super::Stream; + + pub trait Sealed {} + + impl Sealed for S where S: ?Sized + Stream> {} +} + /// A convenience for streams that return `Result` values that includes /// a variety of adapters tailored to such futures. -pub trait TryStream { +pub trait TryStream: private_try_stream::Sealed { /// The type of successful values yielded by this future type Ok;