diff options
author | 2021-11-29 14:51:35 +0700 | |
---|---|---|
committer | 2021-11-29 14:51:35 +0700 | |
commit | 96c7f9765c716dbe94d25f4961d07bc8e18a02c4 (patch) | |
tree | 7963a9dfa913736fcf849db38c666ce4b834e3bc | |
parent | aeec0375f0897b2ef0897c4c54476b2d0db9311a (diff) | |
parent | 24d7d4740fd163b3d3f52fb8ea41233001ab6b93 (diff) | |
download | iced-96c7f9765c716dbe94d25f4961d07bc8e18a02c4.tar.gz iced-96c7f9765c716dbe94d25f4961d07bc8e18a02c4.tar.bz2 iced-96c7f9765c716dbe94d25f4961d07bc8e18a02c4.zip |
Merge pull request #1118 from TannerRogalsky/native-web-fixes
Native web fixes.
-rw-r--r-- | futures/src/lib.rs | 69 | ||||
-rw-r--r-- | native/src/subscription.rs | 4 | ||||
-rw-r--r-- | native/src/subscription/events.rs | 9 |
3 files changed, 53 insertions, 29 deletions
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<T> = 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<T> = 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<T> = 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<T> = 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<T> = 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<T, S>(stream: S) -> BoxStream<T> + where + S: futures::Stream<Item = T> + 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<T> = 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<T> = 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<T> = 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<T, S>(stream: S) -> BoxStream<T> + where + S: futures::Stream<Item = T> + 'static, + { + futures::stream::StreamExt::boxed_local(stream) + } +} diff --git a/native/src/subscription.rs b/native/src/subscription.rs index ff954382..2950879c 100644 --- a/native/src/subscription.rs +++ b/native/src/subscription.rs @@ -1,7 +1,7 @@ //! Listen to external events in your application. use crate::event::{self, Event}; use crate::Hasher; -use iced_futures::futures::stream::BoxStream; +use iced_futures::BoxStream; /// A request to listen to external events. /// @@ -21,7 +21,7 @@ pub type Subscription<T> = /// A stream of runtime events. /// /// It is the input of a [`Subscription`] in the native runtime. -pub type EventStream = BoxStream<'static, (Event, event::Status)>; +pub type EventStream = BoxStream<(Event, event::Status)>; /// A native [`Subscription`] tracker. pub type Tracker = diff --git a/native/src/subscription/events.rs b/native/src/subscription/events.rs index f689f3af..ca143bb3 100644 --- a/native/src/subscription/events.rs +++ b/native/src/subscription/events.rs @@ -27,10 +27,9 @@ where self: Box<Self>, event_stream: EventStream, ) -> BoxStream<Self::Output> { - event_stream - .filter_map(move |(event, status)| { - future::ready((self.f)(event, status)) - }) - .boxed() + let stream = event_stream.filter_map(move |(event, status)| { + future::ready((self.f)(event, status)) + }); + iced_futures::boxed_stream(stream) } } |