Merge pull request #1118 from TannerRogalsky/native-web-fixes

Native web fixes.
This commit is contained in:
Héctor Ramón 2021-11-29 14:51:35 +07:00 committed by GitHub
commit 96c7f9765c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 29 deletions

View file

@ -37,33 +37,58 @@ pub mod time;
pub use command::Command; pub use command::Command;
pub use executor::Executor; pub use executor::Executor;
pub use platform::*;
pub use runtime::Runtime; pub use runtime::Runtime;
pub use subscription::Subscription; 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"))] #[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 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>;
/// 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 future.
///
/// - On native platforms, it needs a `Send` requirement.
/// - On the Web platform, it does not need a `Send` requirement.
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
pub type BoxFuture<T> = futures::future::LocalBoxFuture<'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. /// A boxed static stream.
/// ///
/// - On native platforms, it needs a `Send` requirement. /// - On native platforms, it needs a `Send` requirement.
/// - On the Web platform, it does not need 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::LocalBoxStream<'static, T>;
pub type BoxStream<T> = futures::stream::BoxStream<'static, T>;
/// A boxed static stream. /// Boxes a stream.
/// ///
/// - On native platforms, it needs a `Send` requirement. /// - On native platforms, it needs a `Send` requirement.
/// - On the Web platform, it does not need a `Send` requirement. /// - On the Web platform, it does not need a `Send` requirement.
#[cfg(target_arch = "wasm32")] pub fn boxed_stream<T, S>(stream: S) -> BoxStream<T>
pub type BoxStream<T> = futures::stream::LocalBoxStream<'static, T>; where
S: futures::Stream<Item = T> + 'static,
{
futures::stream::StreamExt::boxed_local(stream)
}
}

View file

@ -1,7 +1,7 @@
//! Listen to external events in your application. //! Listen to external events in your application.
use crate::event::{self, Event}; use crate::event::{self, Event};
use crate::Hasher; use crate::Hasher;
use iced_futures::futures::stream::BoxStream; use iced_futures::BoxStream;
/// A request to listen to external events. /// A request to listen to external events.
/// ///
@ -21,7 +21,7 @@ pub type Subscription<T> =
/// A stream of runtime events. /// A stream of runtime events.
/// ///
/// It is the input of a [`Subscription`] in the native runtime. /// 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. /// A native [`Subscription`] tracker.
pub type Tracker = pub type Tracker =

View file

@ -27,10 +27,9 @@ where
self: Box<Self>, self: Box<Self>,
event_stream: EventStream, event_stream: EventStream,
) -> BoxStream<Self::Output> { ) -> BoxStream<Self::Output> {
event_stream let stream = event_stream.filter_map(move |(event, status)| {
.filter_map(move |(event, status)| { future::ready((self.f)(event, status))
future::ready((self.f)(event, status)) });
}) iced_futures::boxed_stream(stream)
.boxed()
} }
} }