From 55eaeceec8520e008260c8b5630b53d6d5ecdfb6 Mon Sep 17 00:00:00 2001 From: Tanner Rogalsky Date: Sun, 14 Nov 2021 11:03:15 -0500 Subject: Collect the platform-specific concrete future implementations into mods. --- futures/src/lib.rs | 69 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 22 deletions(-) (limited to 'futures') diff --git a/futures/src/lib.rs b/futures/src/lib.rs index 01cf5c89..ba7c558b 100644 --- a/futures/src/lib.rs +++ b/futures/src/lib.rs @@ -37,33 +37,58 @@ pub mod time; pub use command::Command; pub use executor::Executor; +pub use platform::*; pub use runtime::Runtime; pub use subscription::Subscription; -/// A boxed static future. -/// -/// - On native platforms, it needs a `Send` requirement. -/// - On the Web platform, it does not need a `Send` requirement. #[cfg(not(target_arch = "wasm32"))] -pub type BoxFuture = futures::future::BoxFuture<'static, T>; +mod platform { + /// A boxed static future. + /// + /// - On native platforms, it needs a `Send` requirement. + /// - On the Web platform, it does not need a `Send` requirement. + pub type BoxFuture = futures::future::BoxFuture<'static, T>; -/// A boxed static future. -/// -/// - On native platforms, it needs a `Send` requirement. -/// - On the Web platform, it does not need a `Send` requirement. -#[cfg(target_arch = "wasm32")] -pub type BoxFuture = futures::future::LocalBoxFuture<'static, T>; + /// A boxed static stream. + /// + /// - On native platforms, it needs a `Send` requirement. + /// - On the Web platform, it does not need a `Send` requirement. + pub type BoxStream = futures::stream::BoxStream<'static, T>; -/// A boxed static stream. -/// -/// - On native platforms, it needs a `Send` requirement. -/// - On the Web platform, it does not need a `Send` requirement. -#[cfg(not(target_arch = "wasm32"))] -pub type BoxStream = futures::stream::BoxStream<'static, T>; + /// Boxes a stream. + /// + /// - On native platforms, it needs a `Send` requirement. + /// - On the Web platform, it does not need a `Send` requirement. + pub fn boxed_stream(stream: S) -> BoxStream + where + S: futures::Stream + Send + 'static, + { + futures::stream::StreamExt::boxed(stream) + } +} -/// A boxed static stream. -/// -/// - On native platforms, it needs a `Send` requirement. -/// - On the Web platform, it does not need a `Send` requirement. #[cfg(target_arch = "wasm32")] -pub type BoxStream = futures::stream::LocalBoxStream<'static, T>; +mod platform { + /// A boxed static future. + /// + /// - On native platforms, it needs a `Send` requirement. + /// - On the Web platform, it does not need a `Send` requirement. + pub type BoxFuture = futures::future::LocalBoxFuture<'static, T>; + + /// A boxed static stream. + /// + /// - On native platforms, it needs a `Send` requirement. + /// - On the Web platform, it does not need a `Send` requirement. + pub type BoxStream = futures::stream::LocalBoxStream<'static, T>; + + /// Boxes a stream. + /// + /// - On native platforms, it needs a `Send` requirement. + /// - On the Web platform, it does not need a `Send` requirement. + pub fn boxed_stream(stream: S) -> BoxStream + where + S: futures::Stream + 'static, + { + futures::stream::StreamExt::boxed_local(stream) + } +} -- cgit